R-CNN 笔记

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_24548569/article/details/81810264

论文地址:https://arxiv.org/pdf/1311.2524.pdf

简介

R-CNN(Regions with CNN features),是将 CNN 方法应用到目标检测问题的一个里程碑。作者在提出了两个观点:

  1. 可以将高容量卷积神经网络(CNN)应用于自下而上的 region proposals,以便对对象进行定位和分割,
  2. 当做了标签的训练集数量稀缺时,使用预训练的 CNN,然后 fine-tuning,模型的表现可以有明显的提升。

作者比较了 R-CNN 和 OverFeat 两种算法,在200-class ILSVRC 2013的数据集中,R-CNN 的 mAP (平均精度)为31.4%,而 OverFeat 的 mAP 为24.3%,可以看出 R-CNN 比 OverFeat 有很大的优势。

R-CNN 也可以处理 semantic segmentation 问题,R-CNN 在 VOC 2012的数据集中,mAP 达到53.3%,比当时最好的算法要高30%。而在 PASCAL VOC 2011数据集中 mAP为47.9%。

R-CNN 分为以下几个流程:

  1. Region proposals. 从输入图像中找到有检测对象的候选区域。
  2. Feature extraction. 作者使用 AlexNet 卷积网络提取候选区域的特征。
  3. Object category classifiers. 作者为每个类别训练一个二分类的SVM分类器。

R-CNN 的流程如下图所示:
R-CNN 流程图

Region proposals

目标检测问题分为定位和分类问题。解决定位问题的方法有许多种。一种方法是把定位问题看成回归问题,直接从图片中预测出对象在图像中的位置,但是这种方法的实际效果很差。另外一种方法是滑动窗体检测法,许多经典的目标检测算法都是使用滑动窗体检测的方法定位图中对象的位置。但是滑动窗体检测方法得到的对象位置不精确,特别是当滑动窗体有很大的接受域(窗体大小)和移动步长。作者别出新意,决定”recognition using regions”,先从图像中提取可能包含对象的区域作为候选区域,然后识别这些候选区域中对象。

作者使用 selective search 算法来进行 region proposals。每张图片会选出2000个候选区域。

Feature extraction

作者使用 Krizhevsky 实现的CNN网络作为特征提取器,候选区域作为输入,从候选区域中提取出一个4096维的特征向量。这个CNN网络有5个卷积层和2个全连接层。

CNN网络输入的是 227 × 227 的RGB图像,而候选区域的大小形状不同。因此,作者对候选区域进行包装。作者比较了几种不同的图像变形方法(如下图所示),最后作者使用了D的变形方法,即不管候选区域的大小和宽高比如何,作者拉伸候选区域以适应CNN输入图片的大小。作者没有评估这些变形方法,只是选择最简单的方法D。
Object proposal transformations

因为缺少训练一个大的CNN的训练数据,作者使用预训练的CNN模型,然后使用目标训练集进行 fine-tuning。作者发现,进行 fine-tuning 后,R-CNN 的 mAP 提高了8个百分点,在 VOC 2010 数据集中 mAP 到达54%,而DPM算法只达到33%。

扫描二维码关注公众号,回复: 3731456 查看本文章

作者在一个大的辅助数据集(ILSVRC2012)来预训练CNN模型,该数据集只使用图像级别的标注。为了让预训练的CNN适应新的任务(检测)和新的目标数据(处理后的候选区域图像),作者使用目标数据通过SGD方法继续训练CNN模型。在训练时,作者把原来CNN的分类层中的1000个神经单元,对于VOC数据,减少为20个,对于ILSVRC2013数据,减少为200个。作者把与 ground-truth box 的IoU超过0.5的区域作为正样本,其他作为负样本。SGD的学习率时0.001,允许fine-tuning可以工作,同时不破坏参数。作者使用32个正样本和96个负样本作为一次mini-batch。

R-CNN的pool5是最大池化层,是网络的第5个也是最后一个卷积层。pool5的特征图是 6 × 6 × 256 = 9216 维。fc6是pool5之后的全连接层,它有 4096 × 9216 的权重矩阵。fc7是网络的最后一层,它有 4096 × 4096 的权重矩阵。作者比较了这3层的重要性。
Detection average precision on VOC 2007 test
pool5学习到的是图像普通的特征,fine-tuning使得fc6和fc7学到检测对象类别的特征。

作者尝试使用VGG-16作为特征提取器,发现它的表现效果更好,但是,VGG-16耗费更多的时间。

Classifier

作者为每个类别训练一个线性SVM,同时使用 non-maximum suppression(非极大值抑制)算法去掉重合的区域。而且作者使用一个简单的 bounding-box regression 方法来减少错误定位问题,提高定位精度,同时提高mAP 3到4个百分点。

如果一个区域包括对象的一部分区域,那么就难以对这个区域进行分类。作者设置一个IoU阈值,高于IoU阈值的区域就认为时正样本,低于IoU阈值的区域就认为时负样本。作者发现IoU阈值为0.3最好。如果IoU阈值为0.5,mAP下降5个百分点,设置为0,则mAP下降4个百分点。因为训练集数据太大,作者使用 standard hard negative mining 方法进行训练svm。Hard negative 能够快速收敛,而且在实际训练时,遍历一次数据后,mAP就停止增长。作者使用的训练集与fine-tuning使用的训练集不同。作者在训练svm时使用的训练集的正样本时 ground-truth boxes,其他IoU低于0.3的区域作为负样本。

非极大值抑制是指删除一个候选区域,如果这个候选区域和另外一个svm得分更高的候选区域的交集/并集(IoU)大于一个可学习的阈值(简称IoU阈值)。

bounding-box regression从pool5的特征获取输入,然后预测新的检测窗体。训练bounding-box regression模型的训练集是 { ( P i , G i ) } i = 1 , , N ,其中 P i = ( P x i , P y i , P w i , P h i ) 是P的bounding box的中间坐标和宽高。同样,G是ground-truth bounding box。作者定义4个转换函数 d x ( P ) d y ( P ) d w ( P ) d h ( P ) 。把P转换成预测的 ground-truth box G ^ 的公式为:

G ^ x = P w d x ( P ) + P x G ^ y = P h d y ( P ) + P y G ^ w = P w e x p ( d w ( P ) ) G ^ h = P h e x p ( d h ( P ) )

每个方程 d ( P ) ( 表示x、y、w、h其中一个)是P的pool5特征的线性函数。定义P的pool5特征为 ϕ 5 ( P ) ,则

d ( P ) = w T ϕ 5 ( P )

其中 w 是权重向量。bounding-box regression的损失函数是
i N ( t i w T ϕ 5 ( P i ) ) 2 + λ w 2

其中,回归目标 t 是:
t x = ( G x P x ) / P w t y = ( G y P y ) / P h t w = l o g ( G w / P w ) t h = l o g ( G h / P h )

作者收集训练集在选P时,选择与G的IoU超过0.6的区域,因为P和G离得太远就没有意义了。

猜你喜欢

转载自blog.csdn.net/qq_24548569/article/details/81810264
今日推荐