之前有看过这几篇论文,但都不是了解特别清楚。这次索性做个纵向对比,重新把这几篇论文翻出来看,也当做一个阅读笔记。
目前的目标检测算法主要分为两类:一类是以RCNN领头的two stage的检测算法。另一类是以Overfeat领头的one stage算法。其主要的综述可以看
https://zhuanlan.zhihu.com/p/33277354
各项指标可以看以下链接:
https://handong1587.github.io/deep_learning/2015/10/09/object-detection.html
RCNN

可以由上述的overview看到,RCNN主要分为三部分:1)提取proposals 2)CNN提取特征 3)分类。
1)提取特征: RCNN还是采取了传统的proposal算法:Selective Search 算法对 目标region进行提取。事实上,由于我们知道 Region proposals 提取下来后 尺寸大小不一,然后在特征提取时,采用了CNN进行提取特征,此处RCNN采取了Wrapped, 即无视原来的大小和长宽比,强行将proposal的大小拉伸至227 x 227。
2)提取特征: 对每一个proposal进行CNN提取特征。(其实我们可以看到,这种操作为RCNN带来了巨大的计算量)
3)分类: RCNN中采用了SVM对CNN提取下来的特征进行分类。特征矩阵为 2000x4096, 则SVM的权重矩阵为4096xN,其中N为类别数。
Note:
1. CNN后面接一个Softmax就能分类, 为什么RCNN把CNN提取特征和分类给分开做?
由于训练数据不一样:
CNN提取特征的时候,设置IOU>0.5的作为正样本,其他作为负样本。
在一个mini-batch中,作者32个正样本,96个负样本进行输入。
而SVM中:作者将groud truth作为正样本,IOU<0.3的为负样本,其他忽略。
2.由于把CNN提取特征和SVM分类两个任务分开,需要在硬盘上存入大量样本数据,容易造成 disk-hungry.
3. 上面也提到,RCNN对每一个proposal都进行了CNN操作,存在着