深度学习经典目标检测实例分割语义分割网络的理解之二 RCNN

本篇主要剖析R-CNN网络架构,参考了几篇优秀的博文!特别是@shenxiaolu1984 的目标检测系列博文。

https://blog.****.net/shenxiaolu1984/article/details/51066975


流程:

RCNN算法分为4个步骤 

- 一张图像生成1K~2K个候选区域 
- 对每个候选区域,使用深度网络提取特征 
- 特征送入每一类的SVM 分类器,判别是否属于该类 
- 使用回归器精细修正候选框位置 

深度学习经典目标检测实例分割语义分割网络的理解之二 RCNN


候选区域生成

这部分还参考了@guoyunfei20的一篇专门介绍selective search 的博文,非常棒:

https://blog.****.net/guoyunfei20/article/details/78723646

使用了Selective Search1方法从一张图像生成约2000-3000个候选区域。

其步骤如下:

深度学习经典目标检测实例分割语义分割网络的理解之二 RCNN

step0:生成区域集R,具体参见论文《Efficient Graph-Based Image Segmentation》

step1:计算区域集R里每个相邻区域的相似度S={s1,s2,…} 
step2:找出相似度最高的两个区域,将其合并为新集,添加进R 
step3:从S中移除所有与step2中有关的子集 
step4:计算新集与所有子集的相似度 

step5:跳至step2,直至S为空

换句话说就是先使用一种过分割手段将图像分割成小区域,再合并可能性最高的两个区域。重复直到整张图像合并成一个区域位置 输出所有曾经存在过的区域,所谓候选区域候选区域生成和后续步骤相对独立,实际可以使用任意算法进行。

相似度计算

颜色、纹理、尺寸和空间交叠这4个参数。

颜色相似度(color similarity)
将色彩空间转为HSV,每个通道下以bins=25计算直方图,这样每个区域的颜色直方图有25*3=75个区间。 对直方图除以区域尺寸做归一化后使用下式计算相似度:

深度学习经典目标检测实例分割语义分割网络的理解之二 RCNN

纹理相似度(texture similarity)

论文采用方差为1的高斯分布在8个方向做梯度统计,然后将统计结果(尺寸与区域大小一致)以bins=10计算直方图。直方图区间数为8*3*10=240(使用RGB色彩空间)。

深度学习经典目标检测实例分割语义分割网络的理解之二 RCNN

其中,深度学习经典目标检测实例分割语义分割网络的理解之二 RCNN是直方图中第深度学习经典目标检测实例分割语义分割网络的理解之二 RCNN个bin的值。

尺寸相似度(size similarity)

深度学习经典目标检测实例分割语义分割网络的理解之二 RCNN

保证合并操作的尺度较为均匀,避免一个大区域陆续“吃掉”其他小区域。

例:设有区域a-b-c-d-e-f-g-h。较好的合并方式是:ab-cd-ef-gh -> abcd-efgh -> abcdefgh。 不好的合并方法是:ab-c-d-e-f-g-h ->abcd-e-f-g-h ->abcdef-gh -> abcdefgh。

交叠相似度(shape compatibility measure)

深度学习经典目标检测实例分割语义分割网络的理解之二 RCNN

深度学习经典目标检测实例分割语义分割网络的理解之二 RCNN

3.5、最终的相似度

深度学习经典目标检测实例分割语义分割网络的理解之二 RCNN


多样化与后处理

为尽可能不遗漏候选区域,上述操作在多个颜色空间中同时进行(RGB,HSV,Lab等)。在一个颜色空间中,使用上述四条规则的不同组合进行合并。所有颜色空间与所有规则的全部结果,在去除重复后,都作为候选区域输出。

作者提供了Selective Search的源码,内含较多.p文件和.mex文件,难以细查具体实现。

最后的数据结构

一张输入图片,得到大概2K个候选框,有重叠的情况。结构维度(2000,x,y,w,h)


特征提取

候选样本预处理

使用深度网络提取特征之前,首先把候选区域归一化成同一尺寸227×227(Alexnet的输入尺寸)。 
此处有一些细节可做变化:外扩的尺寸大小,形变时是否保持原比例,对框外区域直接截取还是补灰。会轻微影响性能。

预训练

网络结构 
基本借鉴Hinton 2012年在Image Net上的分类网络2,略作简化3。 
深度学习经典目标检测实例分割语义分割网络的理解之二 RCNN 
此网络提取的特征为4096维,之后送入一个4096->1000的全连接(fc)层进行分类。 
学习率0.01。

训练数据 
使用ILVCR 2012的全部数据进行训练,输入一张图片,输出1000维的类别标号。

调优训练(fine turning)

网络结构 
同样使用上述网络,最后一层换成4096->21的全连接网络。 
学习率0.001,每一个batch包含32个正样本(属于20类)和96个背景。

训练数据 
使用PASCAL VOC 2007的训练集,输入一张图片,输出21维的类别标号,表示20类+背景。 
考察一个候选框和当前图像上所有标定框重叠面积最大的一个。如果重叠比例大于0.5,则认为此候选框为此标定的类别;否则认为此候选框为背景。

类别判断

分类器 
对每一类目标,使用一个线性SVM二类分类器进行判别。输入为深度网络输出的4096维特征,输出是否属于此类。 
由于负样本很多,使用hard negative mining方法。 即大多数选择出来的候选框都是背景其实。
正样本 
本类的真值标定框。 
负样本 
考察每一个候选框,如果和本类所有标定框的重叠都小于0.3,认定其为负样本

位置精修

目标检测问题的衡量标准是重叠面积:许多看似准确的检测结果,往往因为候选框不够准确,重叠面积很小。故需要一个位置精修步骤。 
回归器 

对每一类目标,使用一个线性脊回归器进行精修。加入一个l2_norm的惩罚项(这部分我也不确定。。。正则项λ=10000λ=10000。 )

输入为深度网络pool5层的4096维特征,输出为xy方向的缩放和平移。 
训练样本 

判定为本类的候选框中,和真值重叠面积大于0.6的候选框。


这里找到一个github的代码:https://github.com/broadinstitute/keras-rcnn 用Keras复现的。

                                                                                                                                                                                              
参考文献:
  1. J. Uijlings, K. van de Sande, T. Gevers, and A. Smeulders. Selective search for object recognition. IJCV, 2013. 
  2. A. Krizhevsky, I. Sutskever, and G. Hinton. ImageNet classification with deep convolutional neural networks. In NIPS, 2012 
  3. 所有层都是串行的。relu层为in-place操作,偏左绘制。 
  4. Girshick, Ross. “Fast r-cnn.” Proceedings of the IEEE International Conference on Computer Vision. 2015. 
  5. Ren, Shaoqing, et al. “Faster R-CNN: Towards real-time object detection with region proposal networks.” Advances in Neural Information Processing Systems. 2015.