计算机视觉学习之-Object Detection

R-CNN
数据集:
一个较大的识别库(ImageNet ILSVC 2012):标定每张图片中物体的类别。一千万图像,1000类。
一个较小的检测库(PASCAL VOC 2007):标定每张图片中,物体的类别和位置。一万图像,20类。
本文使用识别库进行预训练,而后用检测库调优参数。最后在检测库上评测。
步骤:
一张图像生成1K~2K个候选区域
对每个候选区域,使用CNN判断这个候选区域里面有没有目标物体,2000个区域就要进行2000计算,非常耗费时间
- 特征送入每一类的SVM 分类器,判别是否属于该类
- 使用回归器精细修正候选框位置
计算机视觉学习之-Object Detection
候选区域生成:
使用了Selective Search方法从一张图像生成约2000-3000个候选区域。基本思路如下:
- 使用一种过分割手段,将图像分割成小区域
- 查看现有小区域,合并可能性最高的两个区域。重复直到整张图像合并成一个区域位置
- 输出所有曾经存在过的区域,所谓候选区域
候选区域生成和后续步骤相对独立,实际可以使用任意算法进行。
合并规则:
优先合并以下四种区域:
- 颜色(颜色直方图)相近的
- 纹理(梯度直方图)相近的
- 合并后总面积小的
- 合并后,总面积在其BBOX中所占比例大的
保证合并操作的尺度较为均匀,避免一个大区域陆续“吃掉”其他小区域
保证合并后形状规则

Fast R-CNN
计算机视觉学习之-Object Detection
Fast R-CNN网络将整个图像和一组候选框作为输入。网络首先使用几个卷积层(conv)和最大池化层来处理整个图像,以产生卷积特征图。然后,对于每个候选框,RoI池化层从特征图中提取固定长度的特征向量。每个特征向量被送入一系列全连接(fc)层中,其最终分支成两个同级输出层 :一个输出KK个类别加上1个背景类别的Softmax概率估计,另一个为KK个类别的每一个类别输出四个实数值。每组4个值表示KK个类别的一个类别的检测框位置的修正。

Faster R-CNN
计算机视觉学习之-Object Detection
目标检测的四个基本步骤(候选区域生成,特征提取,分类,位置精修)被统一到一个深度网络框架之内。所有计算没有重复,完全在GPU中完成,大大提高了运行速度。
faster RCNN可以简单地看做“区域生成网络+fast RCNN“的系统,用区域生成网络代替fast RCNN中的Selective Search方法。本篇论文着重解决了这个系统中的三个问题:
1. 如何设计区域生成网络
2. 如何训练区域生成网络
3. 如何让区域生成网络和fast RCNN网络共享特征提取网络

YOLO(You Only Look Once)
计算机视觉学习之-Object Detection
YOLO第一代:输入一张图片,YOLO做一个固定数量的切分,然后在每一个小方格的中心,我们做一定数量的框猜测(不同的长宽比,不同的尺寸),然后直接对每一个框进行分类,以及四个角上的回归,分类和框的位置都融合到一个网站中去,俗称端到端的训练。
计算机视觉学习之-Object Detection

SSD(Single Shot MultiBox Detector)
计算机视觉学习之-Object Detection
Multi-scale feature maps for detection
在基础网络结构后,添加了额外的卷积层,这些卷积层的大小是逐层递减的,可以在多尺度下进行 predictions。
Convolutional predictors for detection
每一个添加的特征层(或者在基础网络结构中的特征层),可以使用一系列 convolutional filters,去产生一系列固定大小的 predictions,具体见 Fig.2。对于一个大小为 m×n,具有 p 通道的特征层,使用的 convolutional filters 就是 3×3×p 的kernels。产生的 predictions,那么就是归属类别的一个得分,要么就是相对于 default box coordinate 的 shape offsets。
在每一个 m×n 的特征图位置上,使用上面的 3×3的 kernel,会产生一个输出值。bounding box offset 值是输出的 default box 与此时 feature map location 之间的相对距离(YOLO 架构则是用一个全连接层来代替这里的卷积层)。
Default boxes and aspect ratios
每一个 box 相对于与其对应的 feature map cell 的位置是固定的。 在每一个 feature map cell 中,我们要 predict 得到的 box 与 default box 之间的 offsets,以及每一个 box 中包含物体的 score(每一个类别概率都要计算出)。
因此,对于一个位置上的 k个boxes 中的每一个 box,我们需要计算出 c 个类,每一个类的 score,还有这个 box 相对于 它的默认 box 的 4 个偏移值(offsets)。于是,在 feature map 中的每一个 feature map cell 上,就需要有 (c+4)×k 个 filters。对于一张 m×n 大小的 feature map,即会产生 (c+4)×k×m×n 个输出结果。