RCNN.pdf
https://blog.csdn.net/weixin_39875161/article/details/90761383
1. 引言
图像分类,检测及分割是计算机视觉领域的三大任务。图像分类模型是将图像划分为单个类别,通常对应于图像中最突出的物体。但是现实世界的很多图片通常包含不只一个物体,此时如果使用图像分类模型为图像分配一个单一标签其实是非常粗糙的,并不准确。对于这样的情况,就需要目标检测模型。目标检测模型可以识别一张图片的多个物体,并可以定位出不同物体,它很多场景有用,如无人驾驶和安防系统等。
近10年以来,在视觉识别上大部分的方法还是基于SIFT和HOG特征的,从下图中可以看到,以手动提取特征为主导的物体检测任务mAP(物体类别和位置的平均精度)提升缓慢,瓶颈难以突破。
随着ReLu激励函数、Dropout正则化手段和大规模图像样本集ILSVRC的出现,Hinton及他的学生在2012年ImageNet大规模视觉识别挑战赛中采用CNN特征获得了最高的图像识别精确度。自此之后,卷积神经网络重新引起大家的重视,同时手工设计特征方式逐渐退出舞台。由Ross Girshick 在2014年CVPR提出的RCNN[1]算法将目标检测推向新的里程碑。RCNN是借助CNN强大的特征表达能力和SVM高效的分类性能来突破目标检测的瓶颈。
作者在文章中注意有2个创新点 :
- 采用CNN网络提取图像特征,从经验驱动的人造特征范式HOG、SIFT到数据驱动的表示学习范式,提高特征对样本的表示能力;
- 采用大样本下有监督预训练+小样本微调的方式解决小样本难以训练甚至过拟合等问题。
2. 算法总体思路
在介绍RCNN之前,可以通过下表看出相对之前的目标检测实现方法:
RCNN算法的整体流程如下图所示:
整体步骤:
- 输入一张标注注好的图片;
- 抽取大约2000个Region Proposals;
- 然后把这些Region Proposal输入CNN中计算特征。需要注意的是这里只是输入一张图片,而一张图片有2000个Region Proposals,故在CNN中计算特征时,具有很大的时间复杂度和空间复杂度,这也是后来SPP net方法主要解决的问题。
- CNN提取特征之后,通过线性 SVM 进行分类,得到结果。所以 R-CNN把检测问题直接转换成了一个分类问题!
3. 区域生成(Extract Region Proposals)
在此阶段,论文采用2012IJCV中提出的Selective Search方法来获取候选框[2]。即首先采取过分割手段把一张图片分成很多小区域,然后通过计算小区域的颜色相似度,纹理相似度,大小相似度和吻合相似度,最后综合这四个相似度进行合并(通过颜色直方图,梯度直方图相近等规则进行合并)生成约2000个候选框。详细过程参见博客。
通过上述Selective Search算法生成的2000个候选框为大小各不相同的矩形候选框。然而CNN对输入的图片大小必须是固定尺寸,如果把生成的矩形选框不做处理,就扔进CNN中,肯定不行的。因此对于每个输入的候选框都需要缩放到固定的大小。为了简单起见,我们假设下一阶段CNN所需要的输入图片为227227的正方形图片。作者在论文中尝试了两种不同的处理方法:
(1)各向异性缩放
这种方法忽略图片的长宽比例及扭曲程度,全部缩放到227227大小,如下图(D)所示。
(2)各向同性缩放
因为图片扭曲后,会影响后续CNN的训练精度,故作者在论文中也测试了“各向同性缩放”方案。这个方案有两种办法:
第一种:在原始图片中,把bounding box的边界进行扩展延伸成正方形,然后再进行裁剪。如果已经延伸到了原始图片的外边界,则用bounding box中的颜色均值进行填充,如下图(B)所示。
第二种:先把bounding box图片裁剪出来,然后用bounding box中的颜色均值填充成正方形图片,如下图©所示。
对于上述的异性和同性缩放,论文中还有个padding处理。在上面的示意图中,第1、3行是padding=0的处理结果,第2、4行是padding=16的处理结果。作者在论文中的实验结果表明当采用各向异性缩放、padding=16时的精度最高,能使mAP提升3%-5%。经过缩放处理后,可以得到2000个指定大小的候选框图片。
然而人工标注的数据一张图片中只标注了正确的bounding box,通过Selective Search生成的2000个矩形框也不可能会出现一个与人工标注完全匹配的候选框。因此我们需要用 IoU 为2000个bounding box打标签,以便下一步CNN训练使用。在CNN阶段,如果用Selective Search挑选出来的候选框与物体的人工标注矩形框的重叠区域IoU大于0.5,那么我们就把这个候选框标注成物体类别,否则我们就把它当做背景类别。此外还有SVM阶段的正负样本标签问题,等到了SVM讲解阶段再具体讲解。
补充说明:为什么要将候选框缩放为227×227?
文章在CNN过程中采用AlexNet网络进行特征提取,为了适应AlexNet网络的输入图像大小(227×227),故将所有建议框变形为227×227。
4. 特征提取(Compute CNN Features)
4.1. 网络结构设计
作者在论文中给出了两个可选方案:第一选择经典的AlexNet;第二选择VGG16。经过实验表明使用AlexNet的精度为58.5%,VGG16精度为66%。VGG的特点是采用较小的卷积核和步长,具有较高的精度,但是计算量是AlexNet的7倍。为了简单起见,这里选用AlexNet,并进行讲解。AlexNet特征提取部分包含了5个卷积层、2个全连接层,在AlexNet中Pool5层神经元个数为9216个, fc6、fc7的神经元个数都是4096个,通过这个网络训练完毕后,最后提取特征是每个输入候选框图片都能得到一个4096维的特征向量。AlexNet网络结构如下图。
图 AlexNet网络架构图
上图可以简化为:
特征可视化
文中采用了巧妙的方式将AlexNet CNN网络中Pool5层特征进行了可视化。该层的大小是6×6×256,即有256种表示不同的特征,这相当于原始227×227图片中有256种195×195的感受视野【相当于对227×227的输入图像,卷积核大小为195×195,padding=4,step=8,输出大小(227-195+2×4)/8+1=6×6】;
文中将这些特征视为”物体检测器”,输入10 million的Region Proposal集合,计算每种6×6特征即“物体检测器”的激活量,之后进行非极大值抑制操作,最后展示出每种6×6特征即“物体检测器”前几个得分最高的Region Proposal,从而给出了这种6×6的特征图表示了d的纹理、结构等。
为什么要用全连接层输出?
为了提高特征表达能力用于分类判别。经过卷积神经网络之后输出的特征向量,进入SVM进行训练。每一类别都会训练出一个SVM分类,这里是二分类SVM判别。例如:有标签数据含有20种类别,那么将会分别训练出20个SVM来对有标签的数据进行单独判别。
训练完成之后由于之前的Region Proposal提取出的可能存在重复区域,经过SVM判别之后就产生相同物体多个bounding boxes标注。那么通过非极大值NMS抑制的策略来减少重复标注问题。同时对bounding boxes使用线性回归方法来对位置估计精修。