Object Detection Network———Rcnn(Rich feature hierarchies for accurate oject detection and semantic )

概述

本篇论文的题目是 《Rich feature hierarchies for accurate oject detection and semantic segmentation》,翻译过来就是针对高准确度的目标检测与语义分割的多特征层级,通俗地来讲就是一个用来做目标检测和语义分割的神经网络。
这篇论文也带来了一个观点,那就是当你缺乏大量的标注数据时,比较好的可行的手段是,进行神经网络的迁移学习,采用在其他大型数据集训练过后的神经网络,然后在小规模特定的数据集中进行 fine-tune 微调。

目标检测和对象识别

对象识别:给定一张图片可以识别出类别就是对象识别(dog,cat那种。。。)
目标检测:除了要分辨出目标的类别,还要判断目标所处的位置。(框起来)

  • 图像识别(classification):
    输入:图片
    输出:物体的类别
    评估方法:准确率
  • 定位(localization):
    输入:图片
    输出:方框在图片中的位置(x,y,w,h)
    评估方法:检测评价函数 intersection-over-union ( IOU )
    Object Detection Network———Rcnn(Rich feature hierarchies for accurate oject detection and semantic )

Object Detection Network———Rcnn(Rich feature hierarchies for accurate oject detection and semantic )

定位问题的些许思路

当作回归问题看待

看做回归问题,我们需要预测出(x,y,w,h)四个参数的值,从而得出方框的位置。
下图为简单的CNN识别图像的网络。

Object Detection Network———Rcnn(Rich feature hierarchies for accurate oject detection and semantic )
在上述神经网络的尾部展开(也就说CNN前面保持不变,我们对CNN的结尾处作出改进:加了两个头:“分类头”和“回归头”)成为classification + regression模式。
Object Detection Network———Rcnn(Rich feature hierarchies for accurate oject detection and semantic )之后Regression那个部分用欧氏距离损失, 使用SGD训练,最后预测阶段把2个头部拼上即可完成不同的功能。
这里需要进行两次fine-tuning
第一次在ALexNet上做,第二次将头部改成regression head,前面不变,做一次fine-tuning
Regression的部分加在哪?
有两种处理方法:
1.加在最后一个卷积层后面(如VGG)
2.加在最后一个全连接层后面(如R-CNN)
regression太难做了,应想方设法转换为classification问题。
regression的训练参数收敛的时间要长得多,所以上面的网络采取了用classification的网络来计算出网络共同部分的连接权值。

取图像窗口

还是刚才的classification + regression思路,咱们取不同的大小的“框”,让框出现在不同的位置,得出这个框的判定得分, 取得分最高的那个框。
Object Detection Network———Rcnn(Rich feature hierarchies for accurate oject detection and semantic )
Object Detection Network———Rcnn(Rich feature hierarchies for accurate oject detection and semantic )Object Detection Network———Rcnn(Rich feature hierarchies for accurate oject detection and semantic )Object Detection Network———Rcnn(Rich feature hierarchies for accurate oject detection and semantic )根据得分的高低,我们选择了右下角的黑框作为目标位置的预测。
注:有的时候也会选择得分最高的两个框,然后取两框的交集作为最终的位置预测。
疑惑:框要取多大?
取不同的框,依次从左上角扫到右下角。非常粗暴啊。
总结一下思路:
对一张图片,用各种大小的框(遍历整张图片)将图片截取出来,输入到CNN,然后CNN会输出这个框的得分(classification)以及这个框图片对应的x,y,h,w(regression)。
这方法实在太耗时间了,做个优化。
原来网络是这样的:
Object Detection Network———Rcnn(Rich feature hierarchies for accurate oject detection and semantic )优化成这样:把全连接层改为卷积层,这样可以提提速。
Object Detection Network———Rcnn(Rich feature hierarchies for accurate oject detection and semantic )物体检测(Object Detection)
当图像有很多物体怎么办的?难度可是一下暴增啊。

那任务就变成了:多物体识别+定位多个物体
那把这个任务看做分类问题?
Object Detection Network———Rcnn(Rich feature hierarchies for accurate oject detection and semantic )
看成分类问题有何不妥?
你需要找很多位置, 给很多个不同大小的框
你还需要对框内的图像分类
解决这种问题的方法是:找出可能含有物体的框(也就是候选框,比如选1000个候选框),这些框之间是可以互相重叠互相包含的,这样我们就可以避免暴力枚举的所有框了。
比如:dgeBoxesSelective Search
各种选取方法对比如下:
Object Detection Network———Rcnn(Rich feature hierarchies for accurate oject detection and semantic )

R-CNN

借鉴了滑动窗口思想,R-CNN 采用对区域进行识别的方案。
具体是:
给定一张输入图片,从图片中提取 2000 个类别独立的候选区域。
对于每个区域利用 CNN 抽取一个固定长度的特征向量。
再对每个区域利用 SVM 进行目标分类。

Object Detection Network———Rcnn(Rich feature hierarchies for accurate oject detection and semantic )

特征抽取

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 指标,采取非极大性抑制,以最高分的区域为基础,剔除掉那些重叠位置的区域。