RCNN总结
背景
挑战一:不同于图像分类,检测需要在图片中定位物体。一个方法是将帧定位视作为一个回归问题;另一个方法是使用滑动窗口探测器(含有目标特征),通过这种方法使用CNNs至少有20年,通常用于特定的种类如人脸,行人等,为了保证较高的分辨率,这些CNNs通常只有两个卷积层和池化层,然而由于更深的网络,更大的输入图片和滑动步长,使得使用滑动窗口来定位的方法充满了挑战。
挑战二:在检测中面临的第二个挑战时目前可用的有标签数据是远远不够来训练一个大的CNN网络的。对于这个问题,比较方便的解决办法是先使用无监督的方式进行预训练,再使用有标签的数据集进行fine-tuning。
改进
对于挑战一,作者通过用区域进行识别的操作方法来解决CNN的定位问题。测试阶段,这个方法对每一个输入的图片产生近2000个不分种类的”region proposals”,使用CNNs从每个”region proposals”中提取一个固定长度的特征向量,然后对每个特征向量使用特定种类的线性SVM进行分类。作者使用了仿射图像变化的方法来对每个不同形状的”region proposals”产生一个固定长度的CNN输出的特征向量。
对于挑战二,作者表明在一个大的数据集上(ILSVRC)进行有监督的预训练,然后在一个小的数据集上进行特定场合的fine-tune是在数据比较小的时候训练high-capacity CNNs的有效方法。在作者的实验中,使用fine-tune可以将准确率提高8个百分点。在提取完特征后使用SVM分类器对每个region属于某一类的可能性进行打分,再使用非极大值抑制的方法去除多余的框。
模块设计
一.选择性搜索方法(SS)遵循如下规则:
- 图片中目标的尺寸不一样,边缘清晰程度也不一样,选择性搜索应该能够将所有的情况都考虑进去。
- 区域合并的算法应该多元化。初始的小的图像区域可能是根据颜色、纹理、部分封闭等原因得到的,一个单一的策略很难适应所有的情况将小区域合并在一起,因此需要有一个多元化的策略集,能够在不同的场合都有效。
- 能够快速计算。
二.Feature extraction: 对于region proposals的特征提取,作者所使用的模型是在Imagenet数据集上的Alexnet模型(共8层,前5层是卷积层,后3层是全连接层)。因为CNN中的全连接层神经元个数固定,所以要求输入的图片尺寸都是一样的,所以在计算每个region proposals的特征前会对每个region都回归到一样227*227,最终每个region都会产生一个4096维的特征向量。关于图像的缩放,作者使用的是最直接的方法,首先将原始的框向周围增加16的padding,再直接缩放。在附加文件中,作者还指出了其他两种缩放方式:1.是将包围盒的短边扩展为和长边一样大,使之成为正方形再缩放,这样做的好处是能保证目标的比例不会变化;2.是将包围盒两边加上图像均值的padding,再缩放,同样保证了目标的比例不会变化。
BBox回归:
为了进一步提高定位的精度,作者在对各个region proposal打分后,利用回归的方法对边界框进行修改重新预测了一个新的边界框。 注意:只有当Proposal和Ground Truth比较接近时(线性问题),我们才能将其作为训练样本来训练我们的线性回归模型,否则会导致训练的回归模型不work(当Proposal跟GT离得比较远,就是复杂的非线性问题了,此时用线性回归模型来建模显然不合理)
损失函数:
由于RCNN分为多个阶段训练,不是end-to-end训练,所以它的损失函数也分为几块的损失来看。 第一,有监督预训练的损失,它的操作是在Imagenet上进行预训练,其损失应该就是1000类的分类损失。 第二,特定领域的fine-tune,它的操作是把网络的最后一个全连接层改为自己的类别数,其损失函数是21类的分类损失。 第三,特定类别的分类器,其损失就是各自SVM的分类损失。 第四,BBox回归损失.
训练阶段:
训练可以看做三部分:第一是对Alexnet进行有监督预训练,第二是对Alexnet进行特定领域的fine-tune,第三是训练特定类别的SVM分类器。 ①有监督预训练:利用ILSVRC 2012(Imagenet)数据集对Alex网络模型进行训练,使网络模型中的参数都是经过训练过的参数,而不是刚开始那样随机初始化的参数。 ②特定领域的fine-tune:为了适应不同场合的识别需要,如VOC,对网络继续使用从VOC图片集上对region proposals归一化后的图片进行训练(训练的是Alexnet提取特定数据集物体特征的能力)。网络输入为建议框变形后的227227的图像,只需要将最后的1000类的分类层换成21类的分类层(20个VOC中的类别和1个背景类),其他都不需要变,衔接的时候是200021与214096(衔接时再加一个全连接层)相乘得20004096维特征。为了保证训练只是对网络的微调而不是大幅度变化,网络的学习率只设置成0.001。计算每个”region proposal”与人工标注的框的IOU,IOU重叠率设为0.5,大于这个阈值的作为正样本,其他作为负样本,然后在训练的每一次迭代中都使用32个正样本(包括所有类别)和96个背景样本组成的128张图片的batch进行训练(这么做的原因还是因为正样本图片太少)。 ③特定类别的分类器:对每个类都训练一个线性的SVM分类器,训练SVM需要正负样本文件,这里的正样本就是ground-truth框中的图像作为正样本,完全不包含的region proposals应该是负样本,但对于一些包含某一类物体某些部位的region proposals该如何训练呢,作者同样是使用IOU阈值的方法,阈值调为0.3,计算每一个region proposal与标准框的IoU,小于0.3的作为负样本,其他的全部丢弃。
测试阶段:
- 输入一张多目标图像,采用selective search算法提取约2000个建议框;
- 先在每个建议框周围加上16个像素值为建议框像素平均值的边框,再直接变形为227*227的大小;
- 先将所有建议框像素减去该建议框像素平均值的边界框【预处理操作】,再依次将每个227227的建议框输入AlexNet CNN网络获取4096维的特征,2000个建议框的CNN特征组合成20004096维矩阵;
- 将20004096维特征预20个SVM组成的权值矩阵409620相乘【20种分类,SVM是二分类器,则有20个SVM】,获得2000*20维矩阵表示每个建议狂是某个物体类别的得分;
- 分别对上述2000*20维矩阵中每一列即每一类进行非极大值抑制剔除重叠建议框,得到该列即该类中得分最高的建议框;
- 分别用20个回归器对上述20个类别中剩余的建议框进行回归操作,最终得到每个类别的修正后的得分最高的Bounding Box。
优点:
本篇论文主要是提出:
- 采用CNN网络提取图像特征,提高特征对样本的表示能力
- 采用大样本下有监督预训练+小样本微调的方式解决小样本难以训练甚至过拟合的问题这两个思维方法。从人为提取特征转向为用CNN自动提取特征,是用深度解决检测问题的先驱。
缺点:
- 最大的缺点是对一张图处理的速度很慢,这是由于一张图片中由selective search算法得出的约2k个建议框都需要经过变形处理后由CNN前向网络计算一次特征,其中涵盖了对一张图片中多个重复区域的重复计算,很累赘;
- 在计算2k个建议框的CNN特征时,在硬盘上保留了2K个建议框的Pool5特征,虽然这样做只需要一次CNN前向网络运算,但是耗费了大量磁盘空间。
- 训练时间长,每次都需要计算不同图片中不同建议框CNN特征,无法共享同一张图的CNN特征,训练速度很慢。
- 训练、测试过程很复杂,这些不连续过程必然涉及到特征存储、浪费磁盘空间等问题。
准确率:
- PASCAL VOC 2010测试集上实现了53.7%的mAP;
- PASCAL VOC 2012测试集上实现了53.3%的mAP;
- 计算Region Proposals和features平均所花时间:13s/images on a GPU;53s/image on a CPU
|