R-CNN在2014年被提出,算法流程可以概括如下:
-
候选区域生成:利用选择性搜索(selective search)方法找出图片中可能存在目标的候选区域(region proposal)
-
CNN网络提取特征:对候选区域进行特征提取(可以使用AlexNet、VGG等网络)
-
目标分类:训练分类模型(如svm等)识别目标物体和背景,对于每个类别都会有一个二元SVM
-
目标定位:训练回归模型,预测每个被识别物体的边界框
综上所述,可以概括为选取候选区域-》提取特征-》分类模型-》回归模型。R-CNN的整体设计思路,与传统图像目标检测很相似,只是将传统特征提取(HOG等方法)变为了卷积网络提取。
候选区域
候选区域(region proposal)选择方法有很多,比如EdgeBox、MSER、MCG和SelectivSearch等,其中SelectivSearch是比较有代表性的一种。
SelectiveSearch方法通常一张图像生成2000~3000左右的候选区域,通过SelectiveSearch产生的区域数量远远少于滑动窗口的穷举法产生的候选区域。具体过程如下:
-
使用语义分割的方法,将图片中的每一个像素作为一组,利用颜色、纹理和边界等多尺度综合方法,将像素相近的组合为一个像素组。
-
继续将各个像素组合并,直到整张图片合并完毕。
为了保证候选区域划分更加合理,Selective Search进行了如下设计:
- 多样性策略
为了保证候选区域的准确性,SelectiveSearch主要通过颜色空间变换和距离计算方式进行优化。
- 颜色空间变化:将颜色空间可以转换为八种色彩空间。
-
距离计算:距离计算包括了颜色距离、纹理距离、尺度相似度衡量、形状重合度衡量和最终相似度衡量。
-
颜色距离:1)每一个区域用三通道的颜色直方图表示,每个颜色通道设定25bins的直方图,这样每个区域就有3*25=75维的向量;2)对75维进行L1-normal归一化,每个颜色通道累加和为1,三个通道累计和为3;3)如果区域i和区域j直方图一样,则颜色相似度为3;4)如果区域i和区域j直方图差别较大,由于累加取两个区域bin的最小值,因为差距越大,累加和越小,相似度越小
-
纹理距离:1)论文采用SIFT方法,将每个颜色通道的8个方向计算方差为1的高斯微分;2)用L1-Normal
对每个颜色通道的每个方向的10bins的直方图,得到8*10*3=240维向量;3)两个区域相似度越高,纹理距离越大,反之越小
-
尺度相似度衡量:通过颜色距离和纹理距离进行合并,容易使得合并后的区域不断吞并周围的区域,导致多尺度只应用在那个局部,不是全局的多尺度。尺度相似度衡量,就是给小区域更高的权重,保证每个位置都是多尺度在合并
-
区域重合度衡量:区域重合度主要是为了衡量两个区域的"吻合"程度,不能合并后出现断崖的区域。
-
最终相似度衡量:将上述四种衡量方式加权合并,得到最终相似度衡量数值
-
特征提取
利用预训练模型(AlexNet、VGG、GoogLeNet、ResNet等)对候选区域进行特征提取,候选区域提取的图像尺寸大小不一,当时特征提取的网络大多需要将输入图像的大小进行统一。
以AlexNet网络为例,输入图像大小为227*227,通过CNN对候选区域进行特征提取,2000个候选区域组成2000*4096特征矩阵。
特征提取阶段主要涉及以下几个步骤:
- 设计网络结构
网络结构可以有很多参照,例如AlexNet、VGG、GoogLeNet、ResNet等均可进行特征提取。
- 有监督训练
相比于随机的初始化网络参数,使用预训练模型可以更快的让模型收敛,取得更好的效果。
- fine-tune
为了使预训练模型更加适用于当前场景,需要对模型进行再训练,一般仅改变末基层网络参数或结构。
其中,特征提取需要注意以下几点:
- 全连接层的输入数据尺寸都是固定的,因此在进行特征提取前,需要将输入图像进行裁剪或形变转为固定尺寸
如何裁剪更合理?
论文中尝试了3种裁剪方式,图中A是我们的候选区域,1)将bounding box扩展为正方形,然后进行裁剪,如果延伸到了图片外,使用bounding box中的颜色均值进行替代,如B)所示;2)先将bounding box裁剪出来,然后用bounding box中的颜色均值填充为裁剪的大小,如C)所示;3)直接将原始图像形变为需要的形状,如D。
什么是预训练模型(pre-train)?
预训练模型是指在其他训练集上已经训练好的初始模型,可以将此类模型迁移到现有问题,公用层的参数保持与原本相同,仅对部分网络层进行微调,也就是fine-tune(在训练)
为什么不在fine-tune后进行softmax分类,反而又进行svm分类器训练?
先上结论,论文中也进行添加softmax尝试,发现效果要低于svm。cnn模型相对比较容易过拟合,训练时需要较多的样本,因此在cnn训练阶段,标注是相对宽松的,一个bounding box可能仅包含了物体的一部分,也会被当做正样本。但在SVM阶段,需要bounding box将整个物体都包含进来才算正样本,这样能训练的数据量就很少,而svm在小样本上训练效果还可以,所以最终分类效果更好一些。
目标分类
假设需要检测的类别有N个,则需要训练N个分类器(常见SVM等),对每个图片中的候选区域的特征向量进行识别,假设有2000个候选区域,则产生[2000, N]的得分矩阵。
对2000*N的矩阵中每一列进行非极大值抑制(NMS),剔除重叠建议框,得到该类中得分高相对较高的建议框。
NMS是如何工作的?
假设在识别动物任务中,一张图片中一个猫有5个矩形框,矩形框中是猫的概率从低到高是a、b、c、d、e。
-
将矩形框分别a、b、c、d与概率最大的e进行判断,计算IOU是否大于某个阈值
-
假设a、b分别与e的IOU值都大于阈值,则丢弃a、b,e成为第一个被保留的矩形框
-
从剩余的矩形框c、d中选择概率最大的d,计算c与d的IOU是否大于某个阈值,大于则保留d,丢弃c;小于则保留或丢弃c
-
按照上述步骤进行重叠建议框剔除
IOU的阈值如何确定?
论文中尝试了0~0.5,在0.3是效果更好一些,小于0.3被标记为负样本;不同数据集阈值大小并不固定,需要进行尝试。
目标定位
**Bounding Box Regression(边框回归):**SelectiveSearch方法获得的区域相对粗略,使用回归模型对给定的区域结果进行预测得到一个更加准确的位置。
如图所示,黄色框是预测的Region Proposal,希望通过回归算法让黄色框更加接近真实的绿色框,即Ground Truth。
为什么回归可以用来目标定位?
当输入的Proposal和Ground Truth相差较小时(RCNN设置为IOU>0.6),认为此时是一种线性变换,此时可以用线性回归来对窗口进行微调,当IOU较小时,此时可能使用线性回归效果不理想。
RCNN存在一下问题:
-
候选区域的提取,需要较多的磁盘空间来计算与存储;
-
传统CNN等一些网络,要求输入图像尺寸统一,因此需要对输入图像做形变,可能会导致部分信息缺失
-
大量的ProposalRegion存在重叠部分,每个ProposalRegion都需要通过主干网络(CNN等)进行计算,因此有很多重复性的计算
-
CNN网络、分类器、回归模型这三个流程,导致整体计算时间长、参数多等问题,训练流程不够迅捷。