Pytorch复现Faster-RCNN
5月的最后一天,需要写点什么。
通过前几篇博客对Faster-RCNN算是有了一个比较全面的认识,接下来的半个月断断续续写了一些代码,基本上复现了论文。利用torchvision的VGG16预训练权重,在VOC02007trainval训练13个epoch,最后VOC2007test的map在0.69左右。当然利用caffe预训练的权重结果略好一些。
关于复现过程:起初只是对目标检测方向突然有了兴趣,想玩一玩,但是只跑跑代码看看结果带给人的新奇感仅仅持续了几分钟,所以找了份代码深究了一下,最后结合chainer的实现方案自己成功复现。
关于代码部分:需要加速的部分主要有RoI-Pooling和NMS。也简单看了看Cython,实现了C扩展。可是为了进一步加速需要cuda,这方面没有深究,所以代码可以利用自己实现的C扩展版本,也可以利用别人写好的cuda加速的版本,在调试代码的过程中,为了方便,直接利用法二。剩余其他部分都是自己完成。
关于心态方面:心血来潮想要实现Faster,可是直到实现的时候才发现有些细节根本难以顾及,断断续续写了一些子函数模块后,感觉想要放弃..可想了想以后万一需要再次接触Faster岂不又得重头看起,所以又是断断续续硬着头皮撸。代码大约不到一周写完了,痛苦的事情才刚刚开始,那就是调试。先是一些低级错误,比如类型匹配问题、路径问题等等。然后是逻辑错误,这是最难调试的,初步调试方法是眼瞅,强行瞅出一些基本的逻辑问题,然后是ipdb一行一行的过...前几天每次都能找出一些错误更正后将代码跑通然后回去睡觉,第二天满怀希望来了却发现损失不降,要不就是map太低...每晚都是带着希望回去,第二天发现还是不行... 列几个那几天陆续找出来的隐藏错误:
- PIL读进来的图像,size函数的顺序是(w,h)。而代码默认需要的顺序是(c, h, w)。
- IOU计算错误。这个是自己的算法错误...
- 损失函数计算错误,(n,c,h,w)应该先转换成(n,h,w,c)再reshape为(n,h×w,c)。
- chainer中的roi_pooling函数需要的roi坐标为(xmin, ymin,xmax,ymax),而代码里默认的顺序为(ymin, xmin, ymax, xmax)...
- RPN网络的两个卷积函数没加激活函数...
最初的目标是5月底之前实现Faster,当解决了所有bug之后,map终于正常了,也实现了既定的目标。故作文以记之...突然发现带给我的新奇感又没有了...
来张自己跑出来的测试图吧,纪念平平淡淡的五月,马上就迎来儿童节了...
然后明天就是总决赛了,詹姆斯撑住,撑住...骑士靠你了...头像是科比只是为了好玩...
知乎的两张图..
另外偶然发现了一个很棒的repo,实现了vgg和resnet两种结构,还有几种不同的roi pooling,以及多batch、多GPU,值得多多研究。
注:resnet直接用效果不升反降(当输入的图像尺寸比较小的时候,直接把vgg换成resnet效果反而会下降,但是如果提高输入图像的尺度的话,把vgg替换成resnet-101效果会更好,对于resnet这样非常深的网络,需要更大的尺度输入来让深层的feature map仍然保持空间信息),所以实现细节值得从代码里好好研究下,另外kaiming有一篇论文(Object Detection Networks on Convolutional Feature Maps)试验了rcnn系列目标检测中深层分类与深层特征的设计,以及对Network on Conv feature map (NoC)设计的方法。涉及对不同网络的设计方法,非常值得参考。
Pytorch复现Faster-RCNN的更多相关文章
- 记pytorch版faster rcnn配置运行中的一些坑
记pytorch版faster rcnn配置运行中的一些坑 项目地址 https://github.com/jwyang/faster-rcnn.pytorch 一般安装配置参考README.md文件 ...
- 从编程实现角度学习Faster R-CNN(附极简实现)
https://www.jianshu.com/p/9da1f0756813 从编程实现角度学习Faster R-CNN(附极简实现) GoDeep 关注 2018.03.11 15:51* 字数 5 ...
- Faster R-CNN代码例子
主要参考文章:1,从编程实现角度学习Faster R-CNN(附极简实现) 经常是做到一半发现收敛情况不理想,然后又回去看看这篇文章的细节. 另外两篇: 2,Faster R-CNN学习总结 ...
- Faster RCNN 学习与实现
论文 论文翻译 Faster R-CNN 主要分为两个部分: RPN(Region Proposal Network)生成高质量的 region proposal: Fast R-CNN 利用 reg ...
- 物体检测丨Faster R-CNN详解
这篇文章把Faster R-CNN的原理和实现阐述得非常清楚,于是我在读的时候顺便把他翻译成了中文,如果有错误的地方请大家指出. 原文:http://www.telesens.co/2018/03/1 ...
- 实战 | 源码入门之Faster RCNN
前言 学习深度学习和计算机视觉,特别是目标检测方向的学习者,一定听说过Faster Rcnn:在目标检测领域,Faster Rcnn表现出了极强的生命力,被大量的学习者学习,研究和工程应用.网上有很多 ...
- TorchVision Faster R-CNN 微调,实战 Kaggle 小麦检测
本文将利用 TorchVision Faster R-CNN 预训练模型,于 Kaggle: 全球小麦检测 上实践迁移学习中的一种常用技术:微调(fine tuning). 本文相关的 Kaggle ...
- faster r-cnn 在CPU配置下训练自己的数据
因为没有GPU,所以在CPU下训练自己的数据,中间遇到了各种各样的坑,还好没有放弃,特以此文记录此过程. 1.在CPU下配置faster r-cnn,参考博客:http://blog.csdn.net ...
- r-cnn学习系列(三):从r-cnn到faster r-cnn
把r-cnn系列总结下,让整个流程更清晰. 整个系列是从r-cnn至spp-net到fast r-cnn再到faster r-cnn. RCNN 输入图像,使用selective search来构造 ...
- 论文阅读之:Is Faster R-CNN Doing Well for Pedestrian Detection?
Is Faster R-CNN Doing Well for Pedestrian Detection? ECCV 2016 Liliang Zhang & Kaiming He 原文链接 ...
随机推荐
- percona-5.7二进制多实例安装
percona-mysql-5.7二进制多实例安装 规划:端口号 配置文件 备注3306 /data/mysql/mysql_3306/my_3306.cnf 3307 /data/m ...
- POJ3662 SPFA//二分 + 双端队列最短路
https://cn.vjudge.net/problem/12427/origin 题意:求1到N第K + 1大条边权最小的路径 首先想到dp递推,dp[x][y]表示到x这个点经过y条免费边的最小 ...
- 《玩转Django2.0》读书笔记-Django配置信息
<玩转Django2.0>读书笔记-Django配置信息 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 项目配置是根据实际开发需求从而对整个Web框架编写相应配置信息. ...
- 在Mac OS环境下安装MySQL服务
在Mac OS环境下安装MySQL服务 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 我之前介绍过window环境下安装mysql服务,以及在Linux环境下安装mysql服务,今 ...
- PHP6天基础知识部分
---恢复内容开始--- (一).基础(PHP超文本预处理器) 1.PHP标记(2种) 1.<?php?>:大众的用法?和php之间不能有空格否则无效. 2.<??>:小众的用 ...
- JMeter之Ramp-up Period(in seconds)说明(可同时并发)
Ramp-up Period(in seconds) [1]决定多长时间启动所有线程.如果使用10个线程,ramp-up period是100秒,那么JMeter用100秒使所有10个线程启动并运行. ...
- 【1】Java中double转BigDecimal的注意事项
项目遇到该问题 先上结论:不要直接用double变量作为构造BigDecimal的参数. 线上有这么一段Java代码逻辑: 1,接口传来一个JSON串,里面有个数字:57.3. 2,解析JSON并把这 ...
- GIL 全局解释器
全局解释器锁 GIL 相当于给python解释器加了一把互斥锁 每一个进程都有一把互斥锁,所有线程必须先拿到解释器,才能执行代码, 同一进程下,所有线程并发 在 Cpython 解释器下,多个进程可以 ...
- 细说java之编码
JAVA编程中涉及的编码 1.J2EE中涉及的编码(1) HttpServletResponse响应内容编码: resp.setCharacterEncoding(charset); (2)JSP文件 ...
- C#编程思想(持续更新)
1.将约束的参数先用变量保存,一定不变的设为const,在使用时不直接填入数字而是使用这些变量,这样可以很大程度上方便后续参数的修改 2.字段先用属性封装后,所有的调用都使用属性而不是字段 3.要返回 ...