深度学习-目标检测R-CNN、SPP NET、Fast R-CNN、Faster RCNN浅谈

RCNN

RCNN的整体框架流程为:

1、采用Selective Search生成Region proposal(建议窗口),一张图片大约生成2000个建议窗口,由于Region proposal尺寸大小不一,warp(拉伸)到227*227。

2、运用CNN来提取特征,把每个候选区域送入CNN,提取特征。

3、将提取后的特征送入SVM分类器,用SVM对CNN输出的特征进行分类。

4、Bounding Box回归,用Bounding Box回归校正原来的region proposal,生成预测窗口的坐标。

缺陷:

1、第一步中region proposal由于尺寸不一,要进行缩放,易造成图像失真。

2、每个region proposal要进行CNN操作,计算量大。

SPP-NET

SPP-NET流程

1、通过selective search产生一系列的region proposal。对待检测的图片进行搜索出2000个候选窗口。这一步和R-CNN一样。 

2、特征提取阶段。这一步就是和R-CNN最大的区别了,同样是用卷积神经网络进行特征提取,但是SPP-Net用的是金字塔池化。这一步骤的具体操作如下:把整张待检测的图片,输入CNN中,进行一次性特征提取,得到feature maps,然后在feature maps中找到各个候选框对应的区域,再对各个候选框采用金字塔空间池化,提取出固定长度的特征向量。

如下图所示,得到的feature map进行1*1、2*2、4*4区域划分,每个区域通过maxpooling分别得到,长度为1、4、16特征,把它们连接到一起得到长度为21特征向量,因此不管spp-net输入特征图尺寸多大都会得到长度为21的特征向量。

3、最后一步也是和R-CNN一样,采用SVM算法进行特征向量分类识别。 

总结:

1、解决RCNN中图像伸缩可能造成失真的问题。

2、将整张图片输入CNN特征提取,而RCNN则将每个候选区域进行提取,减少计算量,加快速度。

FAST RCNN

FAST RCNN流程:

1、输入测试图像;

2、利用selective search 算法在图像中从上到下提取2000个左右的建议窗口(Region Proposal);

3、将整张图片输入CNN,进行特征提取;

4、把建议窗口映射到CNN的最后一层卷积feature map上;

5、通过RoI pooling层使每个建议窗口生成固定尺寸的feature map;ROIpooling layer实际上是SPP-NET的一个精简版,SPP-NET对每个proposal使用了不同大小的金字塔映射,而ROI pooling layer只需要下采样到一个7x7的特征图.对于VGG16网络conv5_3有512个特征图,这样所有region proposal对应了一个7*7*512维度的特征向量作为全连接层的输入。

6、利用Softmax Loss(探测分类概率) 和Smooth L1 Loss(探测边框回归)对分类概率和边框回归(Bounding box regression)联合训练.



总结

把多个任务的损失函数写到一起,实现单级的训练过程;

FASTER RCNN

FASTER RCNN流程:

1、首先向CNN网络【ZF或VGG-16】输入任意大小图片;

2、经过CNN网络前向传播至最后共享的卷积层,一方面得到供RPN网络输入的特征图,另一方面继续前向传播至特有卷积层,产生更高维特征图;

3、供RPN网络输入的特征图经过RPN网络得到区域建议和区域得分,并对区域得分采用非极大值抑制【阈值为0.7】,输出其Top-N【文中为300】得分的区域建议给RoI池化层;

4、第2步得到的高维特征图和第3步输出的区域建议同时输入RoI池化层,提取对应区域建议的特征;

5、第4步得到的区域建议特征通过全连接层后,输出该区域的分类得分以及回归后的bounding-box。


下一篇博客会详细介绍faster r-cnn

参考:https://blog.csdn.net/u014696921/article/details/52824118

           https://blog.csdn.net/u013129427/article/details/73162817

           https://shartoo.github.io/RCNN-series/

猜你喜欢

转载自blog.csdn.net/qq_41994006/article/details/80799916