我是直接学习Faster-RCNN的,RCNN和Fast-RCNN基本没怎么看。在学习Faster-RCNN的过程中我参考了很多文章,其实我觉得Faster-RCNN 并没有涉及到复杂的算法,学习Faster-RCNN的困难之处在于找到可信的资料,主要总结了一些文章中模糊的地方,收集的参考资料很有价值,大家可以综合看这些资料,通过这些资料应该基本能理解Faster-RCNN。写这篇文章有两个目的:
- 对自己学习Faster-RCNN的总结
- 对想要学习Faster-RCNN的人们提供一些学习启发和参考资料
我还是一个水水的研究生,水平有限,很多地方是个人理解,有问题欢迎提出。
在我看来Faster-RCNN有以下难点:
-
网络结构的理解
-
锚盒(ancher)的生成
-
RPN生成及训练
-
提取roi之后的训练
-
第3点和第4点是否分开训练
-
RPN的3x3的滑框用卷积层来定义的是做什么用的
先把自己学习的参考资料摆出来:
- https://blog.csdn.net/weixin_40449426/article/details/78141635 Faster RCNN的训练过程的理解
- https://blog.csdn.net/dudu815110/article/details/79088258 Faster-RCNN框架中alt四步训练过程
- http://caffecn.cn/?/question/449 这篇解释了RPN的3x3的滑框用卷积层的作用
- https://zhuanlan.zhihu.com/p/41955458 这篇解释了感受野的问题
- https://blog.csdn.net/zijin0802034/article/details/77685438,除了连接文章中的这一句“其实真正的输入是这个窗口对应的 CNN 特征,也就是 R-CNN 中的 Pool5 feature(特征向量)”不理解之外,我觉得Faster-RCNN和RCNN的框回归是一样的
- https://zhuanlan.zhihu.com/p/31426458 这篇通过caffe介绍网络结构写的很好
- https://sci-hub.tw/10.1007/978-1-4471-0851-1_4 原始论文Faster R-CNN Towards Real-Time Object Detection with Region Proposal Networks,网速有些慢,打不开的人可以自己搜索文章名
- https://www.jianshu.com/p/4064de5499d5 从RCNN到Faster R-CNN的介绍
- https://blog.csdn.net/u011534057/article/details/51247371 里面关于共享特征的介绍
从网络结构开始:之前看到很多图都是一个总体的结构图,比如下面这幅图,形象但是不具体,没有表达出训练步骤。
下面我从训练步骤和细节讲起,在此之前先说一下共享特征
共享特征:
区域生成网络(RPN)和fast RCNN都需要一个原始特征提取网络(下图灰色方框)。这个网络使用ImageNet的分类库得到初始参数,但要如何精调参数,使其同时满足两方的需求呢?本文讲解了三种方法。
不管是RPN还是Fast R-CNN网络,其网络结构一部分来自于pre-trained model的卷积层(下文简称model),另一部分则是他们各自特有的结构(有卷积和FC,下文简称unique)。
训练过程:
第一步:用model生成Feature Map,接着训练RPN,在训练后,model以及RP