Region CNN(RCNN) 可以说是利用深度学习进行目标检测的开山之作。作者 Ross Girshick 多次在 PASCAL VOC 的目标检测竞赛中折桂,2010 年更带领团队获得终身成就奖。R-CNN 基于卷积神经网络(CNN)、线性回归和支持向量机(SVM)等算法,实现目标检测技术。
对于一张图片,R-CNN 基于 selective search 方法大约生成 2000 个候选区域,然后每个候选区域被 resize 成固定大小,并送入一个 CNN 模型中,最后得到一个特征向量。然后这个特征向量被送入一个多类别 SVM 分类器中,预测出候选区域中所含物体的属于每个类的概率值。每个类别训练一个 SVM 分类器,从特征向量中推断其属于该类别的概率大小。为了提升定位准确性,R-CNN 最后又训练了一个边界框回归模型,通过边框回归模型对框的准确位置进行修正。
(1)一张图像生成 1K~2K 个候选区域 (使用 Selective Search 方法)
(2)对每个候选区域,使用深度网络提取特征
(3)特征送入每一类的 SVM 分类器,判别是否属于该类
(4)使用回归器精细修正候选框位置
(1)测试速度慢:用 Selective Search 算法提取候选框,一张图像内候选框之间存在大量重叠,提取特征操作冗余。
(2)训练速度慢:过程极其繁琐
(3)训练所需空间大:对于 SVM 和 bounding-box 回归训练,需要从每个图像中的每个目标候选框提取特征,并写入磁盘。对于非常深的网络,如 VGG16,从 VOCo7 训练集上的5k图像上提取的特征需要数百 GB 的存储空间。
继 2014 年的 RCNN 之后,Ross Girshick 在 15 年推出 Fast RCNN,构思精巧,流程更为紧凑,大幅提升了目标检测的速度。基于 VGG16 的 Fast RCNN 算法在训练速度上比 RCNN 快了将近 9 倍;测试速度比 RCNN 快了 213 倍,在 VOC2012 上的 mAP 在 66% 左右。
Fast R-CNN 将整张图像归一化后直接送入深度网络。在邻接时,才加入候选框信息,在末尾的少数几层处理每个候选框。是对整张图像卷积而不是对每个 region proposal 卷积,ROI Pooling、分类和回归都放在网络一起训练的。Fast RCNN 不仅大大提高了检测速度,也提高了检测准确率。
(1)一张图像生成 1K~2K 个候选区域 (使用 Selective Search 方法)
(2)将图像输入网络得到相应的特征图,将 SS 算法生成的候选框投影到特征图上获得相应的特征矩阵
(3)将每个特征矩阵通过 ROI pooling 层缩放到 7x7 大小的特征图,接着将特征图展平通过一系列全连接层得到预测结果。一系列全连接层:经过两个 output 都为 4096 维的全连接层,分别经过 output 各为 21 和 84 维的全连接层(并列的,前者是分类输出,后者是回归输出),最后接上两个损失层(分类是 softmax,回归是 smoothL1)。
Multi-task loss 多损失融合(分类损失和回归损失融合)
p p p 是分类器预测的 softmax 概率分布 p = ( p 0 , . . . , p k ) p = (p_0,...,p_k) p=(p0,...,pk)
u u u 对应目标真实类别标签
t u t^u tu 对应边界框回归器预测的对应类别 u 的回归参数
v v v 对应真实目标的边界框回归 ( v x , v y , v w , v h ) (v_x,v_y,v_w,v_h) (vx,vy,vw,vh)
改进:
(1)卷积是对于整张图像先提取了泛化特征,这样子减少了大量的计算量;R-CNN 中对于每一个 region proposal 做卷积会有很多重复计算;
(2)ROIPooling 的提出,巧妙的解决了尺度放缩的问题;
(3)将 regressor 放进网络一起训练,同时用 softmax 代替 SVM 分类器,更加简单高效。
不足:
region proposal 的提取依然使用 selective search,目标检测时间大多消耗在这上面(提 region proposal 2~3s,提特征分类只需 0.32s),这也是后续 Faster RCNN 的改进方向之一。
Faster R-CNN 是作者 Ross Girshick 继 Fast R-CNN 后的又一力作。同样使用 VGG16 作为网络的 backbone,推理速度在 GPU 上达到 5fps (包括候选区域的生成),准确率也有进一步的提升。在 2015 年的 ILSVRC 以及 COCO 竞赛中获得多个项目的第一名。
(1)将图像输入网络得到相应的特征图
(2)使用 RPN 结构生成候选框,将 RPN 生成的候选框投影到特征图上获得相应的特征矩阵
(3)将每个特征矩阵通过 ROI pooling 层缩放到 7x7 大小的特征图,接着将特征图展平通过一系列全连接层得到预测结果
k anchor boxes 给定了大小和长宽比例,如下图 RPN 的九种 anchor;
2k scores 目标概率,分为两个:背景概率、目标概率;
4k coordinates 边界框回归参数,四个:dx, dy, dw, dh
图中 256 表示:ZF网络特征图的深度 channel = 256,而使用 VGG16 的话就是 512。
RPN 的九种 anchor:
三种尺度(面积) {128*, 256*, 512*}
三种比例 {1:1, 1:2, 2:1}
每个位置在原图,上都对应有 3 x 3 = 9 anchor
对于一张 1000 x 600 x 3 的图像,大约有 60 x 40 x 9 (20k) 个 anchor,忽略跨越边界的 anchor 以后,剩下约 6k 个 anchor。对于 RPN 生成的候选框之间存在大量重叠,基于候选框的 cls 得分,采用非极大值抑制,IoU 设为 0.7,这样每张图片只剩 2k 个候选框。
原论文是这么介绍的:
For training RPNs, we assign a binary class label (of being an object or not) to each anchor. We assign a positive label to two kinds of anchors: (i) the anchor/anchors with the highest Intersectionover-Union (IoU) overlap with a ground-truth box, or (ii) an anchor that has an IoU overlap higher than 0.7 with any ground-truth box. Note that a single ground-truth box may assign positive labels to multiple anchors. We assign a negative label to a non-positive anchor if its IoU ratio is lower than 0.3 for all ground-truth boxes. Anchors that are neither positive nor negative do not contribute to the training objective.
首先要知道 IoU 是什么,IoU 即交并比,两个矩形框 A、B 的重合度,公式如下:
I o U = ( A ∩ B ) / ( A ∪ B ) IoU = (A \cap B) / (A \cup B) IoU=(A∩B)/(A∪B)
正样本有两种情况:
(i) 与 ground-truth bo x的 IoU 的重叠区最大的 anchor/anchors,将它定义为正样本;
(ii) anchor 与 ground-truth box 的 IoU 值大于 0.7,将它定义为正样本;
负样本:如果 anchor 与任何 ground-truth box 的 IoU 值小于 0.3,便将它定义为负样本。
既不属于正样本又不属于负样本的 anchor 不参与训练。
p i p_i pi 表示第 i 个 anchor 预测为真实标签的概率
p i ∗ p_i^* pi∗ 当为正样本时为 1,当为负样本时为 0
t i t_i ti 表示预测第 i 个 anchor 的边界框回归参数
t i ∗ t_i^* ti∗ 表示第 i 个 anchor 对应的 ground-truth box 的回归参数
N c l s N_{cls} Ncls 表示一个 mini-batch 中的所有样本数量 256
N r e g N_{reg} Nreg 表示 anchor 位置的个数 (不是 anchor 个数) 约 2400
本笔记记录学习 R-CNN/FastrR-CNN/Faster R-CNN,若有错误,欢迎批评指正,学习交流。