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的更多相关文章

  1. 记pytorch版faster rcnn配置运行中的一些坑

    记pytorch版faster rcnn配置运行中的一些坑 项目地址 https://github.com/jwyang/faster-rcnn.pytorch 一般安装配置参考README.md文件 ...

  2. 从编程实现角度学习Faster R-CNN(附极简实现)

    https://www.jianshu.com/p/9da1f0756813 从编程实现角度学习Faster R-CNN(附极简实现) GoDeep 关注 2018.03.11 15:51* 字数 5 ...

  3. Faster R-CNN代码例子

    主要参考文章:1,从编程实现角度学习Faster R-CNN(附极简实现) 经常是做到一半发现收敛情况不理想,然后又回去看看这篇文章的细节. 另外两篇: 2,Faster R-CNN学习总结      ...

  4. Faster RCNN 学习与实现

    论文 论文翻译 Faster R-CNN 主要分为两个部分: RPN(Region Proposal Network)生成高质量的 region proposal: Fast R-CNN 利用 reg ...

  5. 物体检测丨Faster R-CNN详解

    这篇文章把Faster R-CNN的原理和实现阐述得非常清楚,于是我在读的时候顺便把他翻译成了中文,如果有错误的地方请大家指出. 原文:http://www.telesens.co/2018/03/1 ...

  6. 实战 | 源码入门之Faster RCNN

    前言 学习深度学习和计算机视觉,特别是目标检测方向的学习者,一定听说过Faster Rcnn:在目标检测领域,Faster Rcnn表现出了极强的生命力,被大量的学习者学习,研究和工程应用.网上有很多 ...

  7. TorchVision Faster R-CNN 微调,实战 Kaggle 小麦检测

    本文将利用 TorchVision Faster R-CNN 预训练模型,于 Kaggle: 全球小麦检测 上实践迁移学习中的一种常用技术:微调(fine tuning). 本文相关的 Kaggle ...

  8. faster r-cnn 在CPU配置下训练自己的数据

    因为没有GPU,所以在CPU下训练自己的数据,中间遇到了各种各样的坑,还好没有放弃,特以此文记录此过程. 1.在CPU下配置faster r-cnn,参考博客:http://blog.csdn.net ...

  9. r-cnn学习系列(三):从r-cnn到faster r-cnn

    把r-cnn系列总结下,让整个流程更清晰. 整个系列是从r-cnn至spp-net到fast r-cnn再到faster r-cnn.  RCNN 输入图像,使用selective search来构造 ...

  10. 论文阅读之:Is Faster R-CNN Doing Well for Pedestrian Detection?

    Is Faster R-CNN Doing Well for Pedestrian Detection? ECCV 2016   Liliang Zhang & Kaiming He 原文链接 ...

随机推荐

  1. pt-kill 用法记录

    pt-kill 用法记录 # 参考资料Percona-Toolkit系列之pt-kill杀会话利器http://www.fordba.com/percona-toolkit-pt-kill.html ...

  2. Java基础super关键字、final关键字、static关键字、匿名对象整理

    super关键字 10.1子父类中构造方法的调用 public class Test { public static void main(String[] args) { new Zi(); } } ...

  3. cucumbe无法识别中文场景的问题

    import org.junit.runner.RunWith; import cucumber.api.CucumberOptions; import cucumber.api.junit.Cucu ...

  4. python bytes类型去除尾部字节

    by = b'\x01\x02' print(by) by = by.rstrip() print(by) by = by.rstrip(chr(2).encode()) print(by) b'\x ...

  5. printf不定参数

    title: printf不定参数 tags: C ARM date: 2018-10-21 12:14:58 --- 不定参数的传递 函数调用时参数传递是使用堆栈来实现的,参数入栈顺序是从右向左,在 ...

  6. java实现《剑指offer》(二)11~20 更新中

    11.二进制中1的个数 输入一个整数,输出该数二进制表示中1的个数.其中负数用补码表示. (1)最优解 public class Solution { public int NumberOf1(int ...

  7. C++ WString与String互相转换

    std::wstring StringToWString(const std::string& str) { , str.c_str(), -, NULL, ); wchar_t *wide ...

  8. MQTT学习笔记

    因为工作需要,了解了一下MQTT.顺便记下来,现在还不会用. 一.概述 MQTT(Message Queuing Telemetyr Transport  消息队列遥测传输协议):基于发布/订阅(Pu ...

  9. springboot-01 helloworld

    第一个springboot程序 新建maven项目,添加如下依赖: <?xml version="1.0" encoding="UTF-8"?> & ...

  10. Coursera Deep Learning 2 Improving Deep Neural Networks: Hyperparameter tuning, Regularization and Optimization - week2, Optimization algorithms

    Gradient descent Batch Gradient Decent, Mini-batch gradient descent, Stochastic gradient descent 还有很 ...