2018-12 文献阅读:RCNN(2014)

文献阅读:Rich feature hierarchies for accurate object detection and semantic segmentation,Tech report(v5)(2014)


作者:Ross Girshick,Jeff Donahue,Trevor Darrell,Jitendra Malik
阅读原因:了解RCNN、Fast RCNN、Faster RCNN在object detection中的应用
Fast RCNN学习笔记
主要参考:①R-CNN读书笔记关于Faster R-CNN的一切——笔记1:R-CNN【目标检测】RCNN算法详解

摘要

  • Region CNN(R-CNN)可以说是利用深度学习进行目标检测的开山之作。作者Ross Girshick多次在PASCAL VOC的目标检测竞赛中折桂,2010年更带领团队获得终身成就奖。这篇文章思路简洁,在DPM方法多年平台期后,效果提高显著。

  • RCNN是一种可伸缩的(scalable)检测算法,在PASCAL VOC2012数据集上将mean average precision(mAP)提高了30%,达到53.3%。下面是mAP的计算过程,其中AP为average precision,即平均精确度。
    在这里插入图片描述
    \qquad 计算mAP时,一般先计算每个预测框的loU值(预测框与真实框的交集面积与并集面积之比),通过与loU阈值比较得到“正确预测”或“错误预测”。计算第i个图像的第C类的精度:
    P r e c i s i o n i , C = C 类 别 的 正 确 预 测 次 数 C 类 别 的 总 数 量 Precision_{i,C}=\frac{C类别的正确预测次数}{C类别的总数量} Precisioni,C=CC
    再计算平均精度AP:
    A P C = ∑ i P r e c i s i o n i , C 图 像 总 数 AP_C=\frac{\sum_iPrecision_{i,C}}{图像总数} APC=iPrecisioni,C
    进而再对AP取平均,就得到mAP值。
    m A P = 1 ∣ Q R ∣ ∑ q ∈ Q R A P q mAP=\frac{1}{|Q_R|}\sum_{q\in Q_R}AP_q mAP=QR1qQRAPq

  • RCNN有两个优点:
    (1)可以将high-capacity CNN应用于候选区域(region proposals),从而实现目标的局部化和分割(Regions with CNN,R-CNN)。
    (2)当有标签的training data缺乏时,先在辅助任务进行有监督预训练,再在自己的数据集上做微调,这样可以提高模型性能。

  • RCNN的不足:
    (1)测试时速度慢:对于提取的Region Proposal,多数都是互相重叠的,重叠部分会被多次重复提取特征,都要分别进行CNN前向传播一次(相当于进行了2000次提特征和SVM分类的过程),操作冗余,计算量较大。
    (2)训练时速度慢:原因同上。
    (3)多阶段训练过程:每一步需要训练三个模型:CNN、SVM、bounding box回归,且RCNN中独立的分类器和回归器都需要大量特征作为训练样本。

介绍

1. 回顾

  • 过去的图像识别主要基于SIFTHOG,但在PASCAL VOC目标检测任务中进展缓慢。
  • SIFT和HOG都是块取向(blockwise orientation)的直方图,可以粗略代表灵长类动物视觉路径中皮层区域V1中的细胞。但同时,我们也需要分层的、多阶段的过程来计算特征。
  • Fukushima的 “neocognitron” 是用来解决模式识别的一个分层的、具有转移不变形的模型,是对分层过程的一次尝试,但缺乏监督训练的算法。还有一类模型是对neocognitron的拓展,是通过反向传播算法,利用随机梯度下降法来训练CNN,这是有效的。
  • 在SVM出现时,CNN曾沉寂过一段时间,但CNN在ImageNet图像分类任务中的出色表现又使人们对它重燃兴趣。

2. 思路

Q:在什么情况下,CNN在ImageNet分类的结果可以推广到PASCAL VOC目标检测问题?

A:本文通过建立图像分类和目标检测的关系,来回答这一问题。相较于简单的HOG,CNN可以得到好得多的目标检测结果。为得到这一结果,需要解决两个问题:
(1)利用深度网络将目标局部化
(2)只利用较少的带注释的检测数据来训练一个high-capacity模型

问题一:目标局部化——区域识别

  • 经典的目标检测算法是使用滑窗法建立滑窗检测器,依次判断所有可能的区域,这样会使网络中的单元(units)数大幅上升,使得此网络有非常大的感受野(receptive fields)和步长(strides),速度很慢。
  • 本文的方法是区域识别(recognition using regions):预先提取一系列较可能是object的候选区域,之后只在这些候选区域上提取特征,进行detection。

使用区域识别方法来解决CNN局部化问题,此方法在目标检测和语义分割(semantic segmentation)中的应用都很成功。同时,bounding-box回归(边框回归)方法可以很好的降低mislocalizations——此模型主要的error mode】。

问题二:labeled data缺乏——无监督预训练+有监督微调

  • 经典的目标检测算法在区域中提取人工设定的特征(Haar,HOG)。
  • 本文的方法需要训练深度网络进行特征提取。共有两个数据集:
    识别库(ImageNet ILSVRC2012):标定每张图片中物体的类别。一千万图像,1000类。【没有物体的位置标注,unlabeled data】
    检测库(PASCAL VOC2007):标定每张图片中物体的类别和位置。一万图像,20类。
    先在识别库上进行预训练(等同于得到AlexNet),之后在检测库上进行fine-tuning调优参数。

本文的第二个贡献:展现了上述预训练+微调的方法是在labeled data缺乏的情况下,训练大容量CNN的有效方法。

[图像处理之特征提取(一)之HOG特征简单梳理][]

3. 模型的高效性

本文模型是高效的,唯一的计算是矩阵-向量乘积和贪婪非极大值抑制(greedy non-maximum suppression)。这些计算都与在所有类别中出现的特征有关,而且这些类别的维度比之前使用的区域特征小两个数量级。

  • non-maximum suppression(NMS)是一种局部最大搜索方法,用于在目标检测任务中找出评分最高的窗口。因为得到的窗口会有很多包含或重叠的情况,所以用NMS选取评分最高的窗口,同时抑制评分低的窗口。

RCNN过程

文献Figure 1

一个image生成约2000个 region proposals(selective search,类似聚类思想)

↓ \downarrow

每个region proposal输入CNN, 提取4096维 特征向量(所有类别参数共享)

↓ \downarrow

将特征向量输入每个类别的SVM 分类器,得到每个proposal所有类别的评分(2000*N评分矩阵)+ bounding-box回归器 精细修正候选框位置

↓ \downarrow

Greedy NMS 筛选出detected object bounding box

1. 生成候选区域(region proposal)

  • 为了避免盲目的滑窗,先提取若干候选区域。提取候选区域的算法很多,RCNN对提取候选区域的算法没有限定,论文里使用的是selective search,使得R-CNN与以前的检测方法可比。(具体参考What makes for effective detection proposals详细对比了各种region proposal的算法。)
  • 本文生成了2k个region proposals,最终的检测结果就从这2k个中选择。

2. 用训练好的CNN提取每个proposal的特征

  • 利用CNN从每个区域中提取固定长度特征向量。我们使用仿射图像扭曲(affine image warping) 将图像warp后输入CNN,通过向前传播方法计算固定长度的特征。
  • 训练CNN网络使用的是AlexNet,去掉最后一层FC,使用倒数第二层FC的4096维输出作为特征向量。AlexNet要求输入图像是227 ∗ * 227大小,因此对输入的region proposal图像,需要将它变形到与CNN匹配的大小227 ∗ * 227,从而通过CNN提取出4096维的特征向量。(变形方法见附录A)

3. 用每个类别训练好的线性SVM对每个proposal中所有类别进行评分

  • 每个类别对应一个二分类svm分类器,输入为CNN输出的4096维特征向量,输出为该region proposal输入该SVM对应类别的score。本文使用的PASCALvoc数据库有20个类别,所以有20个SVM。一幅图像最终输出2k*20的评分矩阵。
候选区域 \ 得分 \ 类别1N=20
2k个proposalsscoresscoresscores
  • 受Deformable Part Models(DPM)的启发,在得到评分后,我们利用bounding-box回归预测一个新的边框。Bounding-box回归的作用是微调窗口 (见3.5节和附录C,或参考边框回归(Bounding Box Regression)详解
    【注】SVM分类器和bounding box回归器是相互独立的!

4. Greedy non-maximum suppression(NMS)

  • 根据评分对该类的region proposal进行Greedy non-maximum suppression(NMS)筛选出最终的region。
  • 对每一类(即评分矩阵的每一列),根据score对这些region进行排序,把score最大的bounding box(也就是region proposal)加入队列作为已被选择项,然后计算其他候选bounding box与队列中已经被选择了的bounding box的IoU(intersection-over-union),剔除IoU大于阈值的候选bounding box(IoU越大则越重叠),重复直到候选bounding box为空。这样就剩下了每一类符合要求的那些含有该类物体的bounding box。

RCNN过程

Object detection with R-CNN

要点1:生成与类别独立的候选区域

文中使用selective search方法,算法如下:
在这里插入图片描述
\qquad selective search算法是先通过简单的区域划分算法,将图片划分成很多小区域,再通过相似度和区域大小(小的区域先聚合,这样是防止大的区域不断的聚合小区域,导致层次关系不完全)不断的聚合相邻小区域,类似于聚类的思路。这样就能解决object层次问题。例如汽车是object,轮胎也是object,汽车包含轮胎,两个目标的层次是不同的。

\qquad 为了保证能够划分的完全,对于相似度,作者提出了可以多样化的思路,不但使用多样的颜色空间(RGB,Lab,HSV等等),还有很多不同的相似度计算方法。并类过程中的proposals都是算法的输出,选择评分高的作为selective search的结果,得到约2k个region proposals。参考选择性搜索(selective search)Selective Search原理及实现(均附代码)

要点2:CNN从每个候选区域提取长度固定的特征向量

  • 用CNN从每个候选区域中提取4096维的特征,用向前传播方法计算特征,CNN包括五个卷积层和两个全连接层。
  • 在计算之前,先要将图像转变为227*227像素大小才能输入CNN。先将边框扩大,再对边框中的所有像素进行warp,使得warping之后,图像中精确有p个像素(文中p=16)。

要点3:每个类别对应的线性SVM

要点4:bounding box回归(附录C)

在这里插入图片描述
\qquad bounding-box回归可以改善局部化效果。在DPM中,是用inferred DPM part location计算出的几何特征进行回归,而RCNN是用CNN计算出的特征进行回归。

\qquad 对于N个training pairs { ( P i , G i ) } i = 1 N \{(P^i,G^i)\}_{i=1}^N {(Pi,Gi)}i=1N,其中proposal P i = ( P x i , P y i , P w i , P h i ) P^i=(P_x^i,P_y^i,P_w^i,P_h^i) Pi=(Pxi,Pyi,Pwi,Phi)、ground-truth bounding box G i = ( G x i , G y i , G w i , G h i ) G^i=(G_x^i,G_y^i,G_w^i,G_h^i) Gi=(Gxi,Gyi,Gwi,Ghi)都是四元组:前两项指明了bounding box的中心点的坐标,后两项是bbox的width和height。我们的目的是学习一个变换,将proposed box P P P 映射到ground-truth box G G G

\qquad 我们用四个函数来(参数化)表示这个变换: d x ( P ) , d y ( P ) , d w ( P ) , d h ( P ) d_x(P),d_y(P),d_w(P),d_h(P) dx(P),dy(P),dw(P),dh(P)。前两个表示 P P P的bounding box的中心的一个scale-invariant的平移,后两个表示 P P P的bounding box的宽和高的一个log-space平移(尺度放缩)。则这个变换可以拆分为:平移+尺度放缩

  1. 先做平移( Δ x , Δ y \Delta x,\Delta y Δx,Δy), Δ x = P w d x ( P ) , Δ y = P h d y ( P ) \Delta x=P_wd_x(P),\Delta y=P_hd_y(P) Δx=Pwdx(P),Δy=Phdy(P)
    在这里插入图片描述
  2. 再做尺度放缩( S x , S y S_x,S_y Sx,Sy), S w = exp ⁡ ( d w ( P ) ) , S h = exp ⁡ ( d h ( P ) ) S_w=\exp(d_w(P)),S_h=\exp(d_h(P)) Sw=exp(dw(P)),Sh=exp(dh(P))
    在这里插入图片描述

\qquad 每一个函数 d ∗ ( P ) d_*(P) d(P)都可以modeled as是proposal P P P的pool5 feature的线性函数,记作 ϕ 5 ( P ) \phi_5(P) ϕ5(P)【实际操作中,并不是输入P的四元组,而是P的pool5 feature】,则有 d ∗ ( P ) = w ∗ T ϕ 5 ( P ) d_*(P)=w_*^T\phi_5(P) d(P)=wTϕ5(P) w ∗ w_* w是需要学习的参数。而此时,回归的真实目标也从G变为了: t ∗ = ( t x , t y , t w , t h ) t_*=(t_x,t_y,t_w,t_h) t=(tx,ty,tw,th),其中
在这里插入图片描述
因此,损失函数为
L = ∑ i N ( t ∗ i − w ^ ∗ T ϕ 5 ( P i ) ) 2 L=\sum_i^N(t_*^i-\hat{w}_*^T\phi_5(P^i))^2 L=iN(tiw^Tϕ5(Pi))2
从而问题转化为正则化的最小二乘问题(Ridge回归):
在这里插入图片描述

  • 训练:【每一类进行一次bounding box回归,多次迭代并不会提升结果】
    Input:proposal P的pool5 feature,真实的transformation t ∗ t_* t
    Output:由(5)式训练出的参数 w ∗ w_* w,从而由transformation d ^ ∗ \hat{d}_* d^ P P P映射为 G ^ \hat{G} G^

\qquad 进行bounding box回归时需要注意:(1)Ridge回归中正则化参数 λ \lambda λ很重要,本文取 λ = 1000 \lambda=1000 λ=1000。(2)只针对至少和一个ground-truth box“很近”的proposal P进行训练,这里“很近”指的是:与P重叠的ground-truth boxes中,IoU最大的ground-truth box G,且IoU大于等于0.6,则这样的{P,G}需要进行训练。其他不满足的P舍弃。

Test-time detection

RCNN具有两个性质:
(1)所有类别的CNN参数共享
(2)CNN得到的特征向量比其他方法得到的维数要低,例如spatial pyramids with bag-of-visual-word。

这种共享使得计算时间被分摊在所有类别上。每一类的计算只有:特征与SVM权重之间的点乘,和NMS。而一个图像的所有点乘计算可以写成矩阵-矩阵乘积。特征矩阵是2k × \times × 4096,SVM权重矩阵是4097 × \times ×N,其中N是类别数。这意味着,RCNN的性质使得它可以处理几千个目标种类而不需要借助近似技巧。

如何训练?

从RCNN的结构看,需要训练CNN和SVMs。

CNN

  • 预训练:用Caffe中在ILSVRC2012上训练好的Alexnet作为初始状态
    \qquad 在辅助数据集(ILSVRC2012)上预训练CNN,数据集只有图像水平的注释,没有边框label。预训练使用的是开源的Caffe CNN library。
  • fine-tuning:将预训练好的AlexNet的最后1000-way ImageNet分类(softmax)层替换为随机初始化的(N+1)-way全连接层【N是物体类别数,+1是背景类】,其他结构不变。对于VOC,N=20;对于ILSVRC2013,N=200。
    \qquad 使用warped region proposals来继续CNN参数的随机梯度下降(SGD)训练。训练细节:(1)region proposal的标签设置:与某个ground-thuth box的IoU大于等于0.5的为正,其他情况为负。(2)参数:SGD学习速率设为0.001【预训练学习速率的1/10】。(3)Mini-batch size:每个SGD迭代步,随机采样32个正样本和96个负样本,得到mini-batch大小是128
    AlexNet
    在这里插入图片描述
AlexNet框架

SVM——Object category classifiers

  • 每一类都需要训练一个SVM
  • 对每一类,正负样本的规定:该类的Ground-truth box是正样本,与Ground-truth box的IoU小于0.3【0.3是在测试集上从{0,0.1,…,0.5}中间确定的】的region proposal是负样本,其余的region proposal舍弃,不用作训练。

fine-tuning和SVM关于正负样本定义的不同 and softmax(附录B)

  • 为什么要用不同的定义?
    \qquad fine-tuning:对于每一个region proposal,找出与图片中ground-truth box的IoU值最大的那个box(如果存在这样的box),若IoU值大于等于0.5,则将这个region proposal标记为该box对应类别的正样本。其余proposals标记为background(即,所有类别中都是负样本)。
    \qquad SVM:只将ground-truth box定义为对应类别的正样本,将与某一类中所有ground-truth boxes的IoU值都小于0.3的proposal标记为该类别的负样本。其余灰色区域的proposal舍弃。

  • 这样分别定义的原因
    1、若训练SVM时延用fine-tuning的正负样本定义,结果明显劣于现在的定义。
    2、fine-tuning的定义方式增加了很多jittered样本,扩充了正样本的数量。在对整个网络进行微调时,这种扩充是必要的,防止过拟合。而在精确的局部化过程中,这些jittered样本会导致结果不是最优的。

  • 为什么fine-tuning之后还要训练SVM?
    \qquad 若直接用fine-tuning后的CNN的最后一层【21-way softmax 回归分类器】进行目标检测,会导致mAP下降(VOC2007)。这可能是因为fine-tuning中正样本的定义不能突出精确局部化的目的,而且训练softmax 分类器是在随机抽取的负样本上,而不是训练SVM时的hard negatives。
    \qquad 本文推测:若在fine-tuning过程中增加一些变动,不训练SVM也是可以的。那么,这可以使RCNN更简洁,速度更快,且效果不变。

结果

在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值