该系列核心思想为候选区域,即先找出候选区域, 再在候选区域上进行目标检测
1.R-CNN
基于候选区域的目标检测
- 通过选择性搜索算法, 对输入图像选取2000个候选区域
- 在每一个候选区域上进行卷积提取特征
- 对提取的特征分别做(1)svm分类, (2)线性回归bbox
因为对每一个候选区域做重复的事情, 切选择性搜索, 所以速度很慢
2.Fast RCNN
相对RCNN主要做了两个改进, 使的速度加快了.
- 直接对输入图片深层卷积提取特征, 在特征上进行选择性搜索获取ROI, 这样只用提取一次特征, 原来需要2000次.即一次提取特征+多任务学习.
- 使用softmax分类器替换svm, 结果没有降低, 加快了速度
ROI pooling 用于将不同尺寸的POI通过池化后, 变成一样的尺寸.如
未解决的问题, ROI搜索算法
问题:多个roi池化后多任务学习怎么进行的?
3.Faster-RCNN
主要提出了RPN网络,用深度学习生成ROI, 取代选择搜索算法.可以理解为Faster-RCNN = rpn + fast-rcnn
- 原文这个conv feature map的维度是13*13*256的;
- 作者在文章中指出,sliding window的大小是3*3的,那么如何得到这个256-d的向量呢? 这个很简单了,我们只需要一个3*3*256*256这样的一个4维的卷积核,就可以将每一个3*3的sliding window 卷积成一个256维的向量;
- 作者这里画的示意图 仅仅是 针对一个sliding window的;在实际实现中,我们有很多个sliding window,所以得到的并不是一维的256-d向量,实际上还是一个3维的矩阵数据结构;可能写成for循环做sliding window大家会比较清楚,当用矩阵运算的时候,会稍微绕些;
- 然后就是k=9,所以cls layer就是18个输出节点了,那么在256-d和cls layer之间使用一个1*1*256*18的卷积核,就可以得到cls layer,当然这个1*1*256*18的卷积核就是大家平常理解的全连接;所以全连接只是卷积操作的一种特殊情况(当卷积核的大小与图片大小相同的时候,其实所谓的卷积就是全连接了);
- reg layer也是一样了,reg layer的输出是36个,所以对应的卷积核是1*1*256*36,这样就可以得到reg layer的输出了;
- 然后cls layer 和reg layer后面都会接到自己的损失函数上,给出损失函数的值,同时会根据求导的结果,给出反向传播的数据,这个过程读者还是参考上面给的文档,写的挺清楚的
参考:
https://www.jiqizhixin.com/articles/2018-04-27
https://imlogm.github.io/%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0/rcnn/
文章来源: https://blog.csdn.net/yang_daxia/article/details/90235818