您现在的位置是:首页 >技术教程 >目标检测经典论文精读-R-CNN网站首页技术教程
目标检测经典论文精读-R-CNN
目标检测经典论文精读-R-CNN
论文链接: https://www.cv-foundation.org/openaccess/content_cvpr_2014/papers/Girshick_Rich_Feature_Hierarchies_2014_CVPR_paper.pdf
论文技术报告链接: https://arxiv.org/pdf/1311.2524.pdf
出处: CVPR 2014
参考视频: https://www.bilibili.com/video/BV1d64y1W74E/?spm_id_from=333.999.0.0&vd_source=e321967bf2cdc2338238788250d12de8
R-CNN基本原理
总结起来就是:输入原图,然后用selective search算法生成2000个候选框,再将每个候选框缩放为
227
×
227
227 imes227
227×227的固定大小,再逐一喂到同一个卷积神经网络提取4096维的特征,用该4096维的特征同时进行分类(线性SVM)和回归,最终得到目标检测结果。
可以看到R-CNN严重依赖上下游的多个步骤协作完成目标检测任务:①提取候选框;②缩放;③用CNN提取特征;④分类和回归。只要有一个步骤出现问题,整个检测系统就会出现问题。每个步骤都需要单独去优化,因此并不是一个端到端的系统。
R-CNN是一个非常耗时、非常低效、非常臃肿、一点不端到端的算法:
因此,可以对R-CNN进行改进:
产生候选框-Selective Search
论文链接: https://www.koen.me/research/selectivesearch/
将候选框缩放至 227 × 227 227 imes227 227×227固定大小
最终,作者采用连带邻近像素的非等比例缩放方法,连带像素
p
=
16
p=16
p=16。
这种将像素向外扩一圈,并将扩展之后的结果作为候选框的方法叫做Dilate proposal。
可视化能够使得某个feature map的某个值最大化的原始候选框
从AlexNet最后一个池化层得到的feature map的形状是
6
×
6
×
256
6 imes6 imes256
6×6×256,我们可视化其中的某一个channel的某一个值,找到使得这个值最大化的原始的候选框。
作者从
6
×
6
×
256
6 imes6 imes256
6×6×256的feature map中选了60多个channel来可视化能够使得某个channel的某个值最大化的24个原始候选框:
对比实验
说明了fine-tuning的重要性。
R-CNN用于语义分割:
为什么不直接用softmax分类而要用线性SVM分类?
原因①:
fine-tuning时与训练各类别SVM时的正负样本选择策略是不一样的,所以,如果直接用softmax的话,就必须都按照fine-tuning的正负样本的选择策略来,但是如果用SVM来分类的话,会更好,因为训练SVM时加入了hard negtive mining,而且选择正负样本时也和fine-tuning时不一样。因此,不能直接用softmax而是要用SVM的。
原因②:
为什么不使用SVM的正负样本选择策略去训练softmax?作者是使用Matlab实现的,Matlab是一个封装的很死的一个库,不允许有太多的自由的修改,不像python一样可以自由的修改底层代码。RBG大神当时写R-CNN时用的是Matlab,可能matlab只有SVM可以进行hard negtive mining。所以没有直接用softmax而是用的SVM。
Bounding Box Regression
所谓回归就是对候选框进行精调,使回归模型输出一系列偏移量,再对候选框施加偏移量从而得到最终的预测框。
具体来讲:
让黄色去拟合蓝色,即找一套线性权重,使得损失函数最小。
R-CNN的Slides讲解
没有什么实质性的进展。
R-CNN取得了实质性的突破。