概述
本篇论文的题目是 《Rich feature hierarchies for accurate oject detection and semantic segmentation》,翻译过来就是针对高准确度的目标检测与语义分割的多特征层级,通俗地来讲就是一个用来做目标检测和语义分割的神经网络。
这篇论文也带来了一个观点,那就是当你缺乏大量的标注数据时,比较好的可行的手段是,进行神经网络的迁移学习,采用在其他大型数据集训练过后的神经网络,然后在小规模特定的数据集中进行 fine-tune 微调。
目标检测和对象识别
对象识别:给定一张图片可以识别出类别就是对象识别(dog,cat那种。。。)
目标检测:除了要分辨出目标的类别,还要判断目标所处的位置。(框起来)
- 图像识别(classification):
输入:图片
输出:物体的类别
评估方法:准确率 - 定位(localization):
输入:图片
输出:方框在图片中的位置(x,y,w,h)
评估方法:检测评价函数 intersection-over-union ( IOU )
定位问题的些许思路
当作回归问题看待
看做回归问题,我们需要预测出(x,y,w,h)四个参数的值,从而得出方框的位置。
下图为简单的CNN识别图像的网络。
在上述神经网络的尾部展开(也就说CNN前面保持不变,我们对CNN的结尾处作出改进:加了两个头:“分类头”和“回归头”)成为classification + regression模式。
之后Regression那个部分用欧氏距离损失, 使用SGD训练,最后预测阶段把2个头部拼上即可完成不同的功能。
这里需要进行两次fine-tuning
第一次在ALexNet上做,第二次将头部改成regression head,前面不变,做一次fine-tuning
Regression的部分加在哪?
有两种处理方法:
1.加在最后一个卷积层后面(如VGG)
2.加在最后一个全连接层后面(如R-CNN)
regression太难做了,应想方设法转换为classification问题。
regression的训练参数收敛的时间要长得多,所以上面的网络采取了用classification的网络来计算出网络共同部分的连接权值。
取图像窗口
还是刚才的classification + regression思路,咱们取不同的大小的“框”,让框出现在不同的位置,得出这个框的判定得分, 取得分最高的那个框。
根据得分的高低,我们选择了右下角的黑框作为目标位置的预测。
注:有的时候也会选择得分最高的两个框,然后取两框的交集作为最终的位置预测。
疑惑:框要取多大?
取不同的框,依次从左上角扫到右下角。非常粗暴啊。
总结一下思路:
对一张图片,用各种大小的框(遍历整张图片)将图片截取出来,输入到CNN,然后CNN会输出这个框的得分(classification)以及这个框图片对应的x,y,h,w(regression)。
这方法实在太耗时间了,做个优化。
原来网络是这样的:
优化成这样:把全连接层改为卷积层,这样可以提提速。
物体检测(Object Detection)
当图像有很多物体怎么办的?难度可是一下暴增啊。
那任务就变成了:多物体识别+定位多个物体
那把这个任务看做分类问题?
看成分类问题有何不妥?
你需要找很多位置, 给很多个不同大小的框
你还需要对框内的图像分类
解决这种问题的方法是:找出可能含有物体的框(也就是候选框,比如选1000个候选框),这些框之间是可以互相重叠互相包含的,这样我们就可以避免暴力枚举的所有框了。
比如:dgeBoxes和Selective Search。
各种选取方法对比如下:
R-CNN
借鉴了滑动窗口思想,R-CNN 采用对区域进行识别的方案。
具体是:
给定一张输入图片,从图片中提取 2000 个类别独立的候选区域。
对于每个区域利用 CNN 抽取一个固定长度的特征向量。
再对每个区域利用 SVM 进行目标分类。
特征抽取
R-CNN 抽取了一个 4096 维的特征向量,采用的是 Alexnet,基于 Caffe 进行代码开发。
需要注意的是 Alextnet 的输入图像大小是 227x227。
而通过 Selective Search 产生的候选区域大小不一,为了与 Alexnet 兼容,R-CNN 采用了非常暴力的手段,那就是无视候选区域的大小和形状,统一变换到 227*227 的尺寸。
有一个细节,在对 Region 进行变换的时候,首先对这些区域进行膨胀处理,在其 box 周围附加了 p 个像素,也就是人为添加了边框,在这里 p=16。
测试阶段的目标检测
在测试阶段,R-CNN 在每张图片上抽取近 2000 个候选区域。
然后将每个候选区域进行尺寸的修整变换,送进神经网络以读取特征,然后用 SVM 进行类别的识别,并产生分数。
候选区域有 2000 个,所以很多会进行重叠。
针对每个类,通过计算 IoU 指标,采取非极大性抑制,以最高分的区域为基础,剔除掉那些重叠位置的区域。