论文地址:Rich Feature Hierarchies for Accurate Object Detection and Semantic Segmentation
GitHub地址: https://github.com/rbgirshick/rcnn
图像分类,检测及分割是计算机视觉领域的三大任务。图像分类模型是将图像划分为单个类别,通常对应于图像中最突出的物体。但是现实世界的很多图片通常包含不只一个物体,此时如果使用图像分类模型为图像分配一个单一标签其实是非常粗糙的,并不准确。对于这样的情况,就需要目标检测模型。目标检测模型可以识别一张图片的多个物体,并可以定位出不同物体,它很多场景有用,如无人驾驶和安防系统等。
近10年以来,在视觉识别上大部分的方法还是基于SIFT和HOG特征的,从下图中可以看到,以手动提取特征为主导的物体检测任务mAP(物体类别和位置的平均精度)提升缓慢,瓶颈难以突破。
随着ReLu激励函数、Dropout正则化手段和大规模图像样本集ILSVRC的出现,Hinton及他的学生在2012年ImageNet大规模视觉识别挑战赛中采用CNN特征获得了最高的图像识别精确度。自此之后,卷积神经网络重新引起大家的重视,同时手工设计特征方式逐渐退出舞台。由Ross Girshick 在2014年CVPR提出的RCNN[1]算法将目标检测推向新的里程碑。RCNN是借助CNN强大的特征表达能力和SVM高效的分类性能来突破目标检测的瓶颈。作者在文章中注意有2个创新点 :
在介绍RCNN之前,可以通过下表看出相对之前的目标检测实现方法:
输入一张标注注好的图片;
抽取大约2000个Region Proposals;
然后把这些Region Proposal输入CNN中计算特征。需要注意的是这里只是输入一张图片,而一张图片有2000个Region Proposals,故在CNN中计算特征时,具有很大的时间复杂度和空间复杂度,这也是后来SPP net方法主要解决的问题。
CNN提取特征之后,通过线性 SVM 进行分类,得到结果。所以 R-CNN把检测问题直接转换成了一个分类问题!
在此阶段,论文采用2012IJCV中提出的Selective Search方法来获取候选框[2]。即首先采取过分割手段把一张图片分成很多小区域,然后通过计算小区域的颜色相似度,纹理相似度,大小相似度和吻合相似度,最后综合这四个相似度进行合并(通过颜色直方图,梯度直方图相近等规则进行合并)生成约2000个候选框。详细过程参见博客。
通过上述Selective Search算法生成的2000个候选框为大小各不相同的矩形候选框。然而CNN对输入的图片大小必须是固定尺寸,如果把生成的矩形选框不做处理,就扔进CNN中,肯定不行的。因此对于每个输入的候选框都需要缩放到固定的大小。为了简单起见,我们假设下一阶段CNN所需要的输入图片为227*227的正方形图片。作者在论文中尝试了两种不同的处理方法:
(1)各向异性缩放
这种方法忽略图片的长宽比例及扭曲程度,全部缩放到227*227大小,如下图(D)所示。
(2)各向同性缩放
因为图片扭曲后,会影响后续CNN的训练精度,故作者在论文中也测试了“各向同性缩放”方案。这个方案有两种办法:
对于上述的异性和同性缩放,论文中还有个padding处理。在上面的示意图中,第1、3行是padding=0的处理结果,第2、4行是padding=16的处理结果。作者在论文中的实验结果表明当采用各向异性缩放、padding=16时的精度最高,能使mAP提升3%-5%。经过缩放处理后,可以得到2000个指定大小的候选框图片。
然而人工标注的数据一张图片中只标注了正确的bounding box,通过Selective Search生成的2000个矩形框也不可能会出现一个与人工标注完全匹配的候选框。因此我们需要用 IoU 为2000个bounding box打标签,以便下一步CNN训练使用。在CNN阶段,如果用Selective Search挑选出来的候选框与物体的人工标注矩形框的重叠区域IoU大于0.5,那么我们就把这个候选框标注成物体类别,否则我们就把它当做背景类别。此外还有SVM阶段的正负样本标签问题,等到了SVM讲解阶段再具体讲解。
补充说明:为什么要将候选框缩放为227×227?
文章在CNN过程中采用AlexNet网络进行特征提取,为了适应AlexNet网络的输入图像大小(227×227),故将所有建议框变形为227×227。
作者在论文中给出了两个可选方案:第一选择经典的AlexNet;第二选择VGG16。经过实验表明使用AlexNet的精度为58.5%,VGG16精度为66%。VGG的特点是采用较小的卷积核和步长,具有较高的精度,但是计算量是AlexNet的7倍。为了简单起见,这里选用AlexNet,并进行讲解。AlexNet特征提取部分包含了5个卷积层、2个全连接层,在AlexNet中Pool5层神经元个数为9216个, fc6、fc7的神经元个数都是4096个,通过这个网络训练完毕后,最后提取特征是每个输入候选框图片都能得到一个4096维的特征向量。AlexNet网络结构如下图。
特征可视化
文中采用了巧妙的方式将AlexNet CNN网络中Pool5层特征进行了可视化。该层的大小是6×6×256,即有256种表示不同的特征,这相当于原始227×227图片中有256种195×195的感受视野【相当于对227×227的输入图像,卷积核大小为195×195,padding=4,step=8,输出大小(227-195+2×4)/8+1=6×6】;
文中将这些特征视为”物体检测器”,输入10 million的Region Proposal集合,计算每种6×6特征即“物体检测器”的激活量,之后进行非极大值抑制操作,最后展示出每种6×6特征即“物体检测器”前几个得分最高的Region Proposal,从而给出了这种6×6的特征图表示了d的纹理、结构等。
为什么要用全连接层输出?
为了提高特征表达能力用于分类判别。经过卷积神经网络之后输出的特征向量,进入SVM进行训练。每一类别都会训练出一个SVM分类,这里是二分类SVM判别。例如:有标签数据含有20种类别,那么将会分别训练出20个SVM来对有标签的数据进行单独判别。
训练完成之后由于之前的Region Proposal提取出的可能存在重复区域,经过SVM判别之后就产生相同物体多个bounding boxes标注。那么通过非极大值NMS抑制的策略来减少重复标注问题。同时对bounding boxes使用线性回归方法来对位置估计精修。
参数初始化: 目标检测的一个难点在于,物体标签训练数据少,如果要直接采用随机初始化CNN参数的方法,那么目前的训练数据量是远远不够的。这种情况下,最好的是采用某些方法,把参数初始化了,然后再进行有监督的参数微调,原文中采用的是有监督的预训练。所以作者在设计网络结构的时候,是直接用AlexNet的网络,然后连参数也是直接采用它的参数作为初始的参数值,然后再fine-tuning训练。
网络优化求解: 采用随机梯度下降法,学习速率大小为0.001;
数据集
样本 | 来源 |
---|---|
正样本 | ILSVRC2012 |
负样本 | ILSVRC2012 |
ILSVRC 2012与PASCAL VOC2007数据集有冗余吗?
即使图像分类与目标检测任务本质上是不同的,理论上应该不会出现数据集冗余问题,但是作者还是通过两种方式测试了PASCAL 2007测试集和ILSVRC 2012训练集、验证集的重合度:
这说明PASCAL 2007测试集和ILSVRC 2012训练集、验证集基本上不重合,没有数据冗余问题存在。
什么叫有监督预训练?为什么要进行有监督预训练?
有监督预训练也称之为迁移学习。举例说明:若有大量标注信息的人脸年龄分类的正负样本图片,利用样本训练了CNN网络用于人脸年龄识别;现在要通过人脸进行性别识别,那么就可以去掉已经训练好的人脸年龄识别网络CNN的最后一层或几层,换成所需要的分类层,前面层的网络参数直接使用为初始化参数,修改层的网络参数随机初始化,再利用人脸性别分类的正负样本图片进行训练,得到人脸性别识别网络,这种方法就叫做有监督预训练。这种方式可以很好地解决小样本数据无法训练深层CNN网络的问题,我们都知道小样本数据训练很容易造成网络过拟合,但是在大样本训练后利用其参数初始化网络可以很好地训练小样本,这解决了小样本训练的难题。
这篇文章最大的亮点就是采用了这种思想,ILSVRC样本集上用于图片分类的含标注类别的训练集有1 million之多,总共含有1000类;而PASCAL VOC2007样本集上用于物体检测的含标注类别和位置信息的训练集只有10k,总共含有20类,直接用这部分数据训练容易造成过拟合,因此文中利用ILSVRC2012的训练集先进行有监督预训练。
接着采用Selective Search 生成的候选框,然后处理到指定大小图片,继续对上面预训练的CNN模型进行fine-tuning训练。假设要检测的物体类别有N类,那么我们就需要把上面预训练阶段的CNN模型的最后一层给替换掉,替换成N+1个输出的神经元(加1,表示还有一个背景),然后这一层直接采用参数随机初始化的方法,其它网络层的参数不变;接着就可以开始继续SGD训练了。开始的时候,SGD学习率选择0.001,在每次训练的时候,我们batch size大小选择128,其中32个是正样本、96个是负样本。
其中:
样本 | 来源 |
---|---|
正样本 | Ground Truth+与Ground Truth相交IoU>0.5的建议框【由于Ground Truth太少了】 |
负样本 | 与Ground Truth相交IoU≤0.5的建议框 |
PASCAL VOC2007样本集上既有图像中物体类别标签,也有图像中物体位置标签;
采用训练好的AlexNet CNN网络进行PASCAL VOC2007样本集下的微调:
可以不进行特定样本下的微调吗?可以直接采用AlexNet CNN网络的特征进行SVM训练吗?
由此作者得出结论:不针对特定任务进行微调,而将CNN当成特征提取器,pool5 层得到的特征是基础特征,类似于 HOG、SIFT,类似于只学习到了人脸共性特征;从 fc6 和 fc7 等全连接层中所学习到的特征是针对特征任务特定样本的特征,类似于学习到了分类性别分类年龄的个性特征。
这是一个二分类问题,假设我们要检测车辆,我们知道只有当bounding box把整辆车都包含在内,那才叫正样本;如果bounding box 没有包含到车辆,那么我们就可以把它当做负样本。但问题是当我们的检测窗口只有部分包好物体,那该怎么定义正负样本呢?作者在实验中测试了IOU阈值各种方案数值(0,0.1,0.2,0.3,0.4,0.5),最后通过训练发现,如果选择IOU阈值为0.3时效果最好(选择为0时,精度下降了4%;选择0.5时,精度下降了5%),即当重叠度小于0.3的时候,我们就把它标注为负样本。如下表所示:
样本 | 来源 |
---|---|
正样本 | Ground Truth |
负样本 | 与Ground Truth相交IoU<0.3的建议框 |
由于SVM是二分类器,需要为每个类别训练单独的SVM。一旦CNN fc7层特征被提取出来,那么我们将为每个物体训练一个SVM分类器。当我们用CNN提取2000个候选框,可以得到2000*4096这样的特征向量矩阵,然后与SVM权值矩阵4096与N点乘(N为分类类别数目,因为我们训练的N个SVM,每个SVM包含4096个 W W W),就可以得到结果。
训练集中正样本一般比较少,而负样本很多,SVM训练出来的效果并不是很好,可以通过Hard negative mining method来解决这个问题,hard negative mining意思是第一次训练的时候会有很多负样本分到正样本中,我们把这些称为hard negative,把这些拿出来作为有代表性的负样本重新进行训练。
线性SVM分类示意图:
SVM判别分类输入向量来自全连接层的输出向量,这里可以理解成为特征向量在高维空间中进行分类表达。例如:假设 1 × n 1\times n 1×n 为向量,映射到n维空间就是一个点(假设为A),另外一个 1 × n 1\times n 1×n 向量同样映射到n维空间假设为B点。带有标签的A(狗)、B(猫)维向量通过SVM得到判别。因此,测试图像输出矢量会经过所有训练标签的SVM分类器进行判别出类别信息。
为什么微调时和训练SVM时所采用的正负样本阈值【0.5和0.3】不一致?
为什么不直接采用微调后的AlexNet CNN网络最后一层SoftMax进行21分类【20类+背景】?
因为微调时和训练SVM时所采用的正负样本阈值不同,微调阶段正样本定义并不强调精准的位置,而SVM正样本只有Ground Truth;并且微调阶段的负样本是随机抽样的,而SVM的负样本是经过Hard negative mining方法筛选的;导致在采用SoftMax会使PASCAL VOC2007测试集上mAP从54.2%降低到50.9%。
样本 | 来源 |
---|---|
正样本 | 与Ground Truth相交IoU最大的Region Proposal,并且IoU>0.6的Region Proposal |
输入数据为某类型样本对N个: ( P i , G i ) i = 1 ⋯ N {(P^i,G^i)}_{i=1⋯N} (Pi,Gi)i=1⋯N 以及 P i = 1 ⋯ N i P^i_{i=1⋯N} Pi=1⋯Ni 所对应的AlexNet CNN网络Pool5层特征 ϕ 5 ( P i ) i = 1 ⋯ N \phi_5(P^i)_{i=1⋯N} ϕ5(Pi)i=1⋯N ,输出回归后的建议框Bounding-box,训练的是 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) 四种变换操作的权重向量。
首先要明确目标检测不仅是要对目标进行识别,还要完成定位任务,所以最终获得的bounding-box也决定了目标检测的精度。 其中定位精度可以用算法得出的物体检测框与实际标注的物体边界框的IoU值来近似表示。
如下图所示,绿色框为实际标准的卡宴车辆框,即Ground Truth;黄色框为Selective Search算法得出的建议框,即Region Proposal。即使黄色框中物体被分类器识别为卡宴车辆,但是由于绿色框和黄色框IoU值并不大,所以最后的目标检测精度并不高。采用回归器是为了对候选框进行校正,使得校正后的Region Proposal与Selective Search更接近, 以提高最终的检测精度。论文中采用bounding-box回归使mAP提高了3~4%。
那么问题来了,回归器如何设计呢?
如上图,黄色框口 P P P表示建议框Region Proposal,绿色窗口G表示实际框Ground Truth,红色窗口 G ^ \hat{G} G^表示Region Proposal进行回归后的预测窗口,现在的目标是找到 P P P 到 G ^ \hat{G} G^ 的线性变换【当Region Proposal与Ground Truth的IoU>0.6时可以认为是线性变换】,使得 G ^ \hat{G} G^ 与 G G G 越相近,这就相当于一个简单的可以用最小二乘法解决的线性回归问题,具体往下看。
让我们先来定义 P P P 窗口的数学表达式:
P i = ( P x i , P y i , P w i , P h i ) P^i=(P^i_x,P^i_y,P^i_w,P^i_h) Pi=(Pxi,Pyi,Pwi,Phi)
其中 ( P x i , P y i ) (P^i_x,P^i_y) (Pxi,Pyi) 表示第一个 i i i 窗口的中心点坐标。 P w i , P h i P^i_w,P^i_h Pwi,Phi 分别表示第 i i i 个窗口的宽和高;G窗口的数学表达式为:
G i = ( G x i , G y i , G w i , G h i ) G^i=(G^i_x,G^i_y,G^i_w,G^i_h) Gi=(Gxi,Gyi,Gwi,Ghi)
其中, G ^ \hat{G} G^ 窗口的数学表达式为:
G i ^ = ( G x i ^ , G y i ^ , G w i ^ , G h i ^ ) \hat{G^i}=(\hat{G^i_x},\hat{G^i_y},\hat{G^i_w},\hat{G^i_h}) Gi^=(Gxi^,Gyi^,Gwi^,Ghi^)
以下省去 i i i 上标。这里定义了四种变换函数, 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)。 d x ( P ) 和 d y ( P ) d_x(P)和d_y(P) dx(P)和dy(P) 通过平移对 x x x 和 y y y 进行变化, d w ( P ) d_w(P) dw(P) 和 d h ( P ) d_h(P) dh(P) 通过缩放对 w w w 和 h h h 进行变化,即下面四个式子所示:
(1) G ^ x = P w d x ( P ) + P x \hat{G}_x=P_wd_x(P)+P_x\tag{1} G^x=Pwdx(P)+Px(1)
(2) G ^ y = P h d x ( P ) + P x \hat{G}_y=P_hd_x(P)+P_x\tag{2} G^y=Phdx(P)+Px(2)
(3) G ^ w = P w e x p ( d w ( P ) ) \hat{G}_w=P_wexp(d_w(P))\tag{3} G^w=Pwexp(dw(P))(3)
(4) G ^ h = P h e x p ( d h ( P ) ) \hat{G}_h=P_hexp(d_h(P))\tag{4} G^h=Phexp(dh(P))(4)
每一个 d ∗ ( P ) d_*(P) d∗(P) (*表示 x , y , w , h x, y, w, h x,y,w,h)都是一个AlexNet CNN网络的Pool5层特征 ϕ 5 ( P ) \phi_5(P) ϕ5(P) 的线性函数,即
d ∗ ( P ) = w ∗ T ϕ ( P ) d_*(P)=w^T_*\phi(P) d∗(P)=w∗Tϕ(P)
其中 w ∗ T w_*^T w∗T 是所需要学习的回归参数,损失函数即为:
(5) L o s s = arg min ∑ i = 0 N ( t ∗ i − w ^ ∗ T ϕ 5 ( P i ) ) 2 + λ ∣ ∣ w ∗ ^ ∣ ∣ 2 Loss = \arg\min\sum^N_{i=0}(t_*^i-\hat{w}^T_*\phi_5(P^i))^2+\lambda||\hat{w_*}||^2\tag{5} Loss=argmini=0∑N(t∗i−w^∗Tϕ5(Pi))2+λ∣∣w∗^∣∣2(5)
损失函数中加入的正则项 λ ∣ ∣ w ^ ∗ ∣ ∣ 2 \lambda||\hat{w}_*||^2 λ∣∣w^∗∣∣2 是为了避免回归参数 w ∗ T w^T_* w∗T 过大。其中,回归目标 t ∗ t_* t∗ 由训练输入对 ( P , G ) (P,G) (P,G) 按下式计算得来:
(6) t x = ( G x − P x ) / P w t_x=(G_x-P_x)/P_w\tag{6} tx=(Gx−Px)/Pw(6)
(7) t y = ( G y − P y ) / P h t_y=(G_y-P_y)/P_h\tag{7} ty=(Gy−Py)/Ph(7)
(8) t w = l o g ( G w / P w ) t_w=log(G_w/P_w)\tag{8} tw=log(Gw/Pw)(8)
(9) t h = l o g ( G h / P h ) t_h=log(G_h/P_h)\tag{9} th=log(Gh/Ph)(9)
① 构造样本对。为了提高每类样本框回归的有效性,对每类样本都仅仅采集与Ground Truth相交IoU最大的Region Proposal,并且IoU>0.6的Region Proposal作为样本对 ( P i , G i ) (P^i,G^i) (Pi,Gi),一共产生20对样本对(20个类别);
② 每种类型的回归器单独训练,输入该类型样本对 N N N 个: ( P i , G i ) i = 1 ⋯ N {(P^i,G^i)}_{i=1⋯N} (Pi,Gi)i=1⋯N 以及 P i = 1 ⋯ N i P^i_{i=1⋯N} Pi=1⋯Ni 所对应的AlexNet CNN网络Pool5层特征 ϕ 5 ( P i ) i = 1 ⋯ N \phi_5(P^i)_{i=1⋯N} ϕ5(Pi)i=1⋯N ;
③ 利用(6)-(9)式和输入样本对 ( P i , G i ) i = 1 ⋯ N {(P^i,G^i)}_{i=1⋯N} (Pi,Gi)i=1⋯N 计算 t ∗ i = 1 ⋯ N i t^i_{∗i=1⋯N} t∗i=1⋯Ni;
④ 利用 ϕ 5 ( P i ) i = 1 ⋯ N \phi_5(P^i)_{i=1⋯N} ϕ5(Pi)i=1⋯N 和 t ∗ i = 1 ⋯ N i t^i_{∗i=1⋯N} t∗i=1⋯Ni,根据损失函数(5)进行回归,得到使损失函数最小的参数 w ∗ T w^T_* w∗T。
为什么要进行非极大值抑制?非极大值抑制又如何操作? (IOU操作)
本部分详细过程可以参考: https://ayameyao.github.io/NMS/
先解释什么叫IoU。如下图所示IoU即表示(A∩B)/(A∪B)
在测试过程完成到第4步之后,获得2000×20维矩阵表示每个建议框是某个物体类别的得分情况,此时会遇到下图所示情况,同一个车辆目标会被多个建议框包围,这时需要非极大值抑制操作去除得分较低的候选框以减少重叠框。
具体怎么做呢?
① 对2000×20维矩阵中每列按从大到小进行排序;
② 从每列最大的得分建议框开始,分别与该列后面的得分建议框进行IoU计算,若IoU>阈值,则剔除得分较小的建议框,否则认为图像中存在多个同一类物体;
③ 从每列次大的得分建议框开始,重复步骤②;
④ 重复步骤③直到遍历完该列所有建议框;
⑤ 遍历完2000×20维矩阵所有列,即所有物体种类都做一遍非极大值抑制;
⑥ 最后剔除各个类别中剩余建议框得分少于该类别阈值的建议框。
目标检测的精装度得到极大的提高,可以说是深度学习目标检测的开山之作。比同一时期的OverFeat效果提升显著。
每张图片产生的2000个 Region Proposal 都需要经过变形处理后由AlexNet前向网络计算一次特征,这其中涵盖了对一张图片中多个重复区域的重复计算,太浪费时间和空间资源;
使用CNN计算2000个候选框的特征时,在硬盘上保留了每个候选框的Pool5特征,虽然这样做只需要进行一次CNN前向网络运算,但是占用大量磁盘空间;
由于采用RoI-centric sampling(从所有图片的所有建议框中均匀取样)进行训练,所以每次都需要计算不同图片中不同建议框的CNN特征,无法共享同一张图的CNN特征,导致训练速度很慢;
测试过程复杂,首先要提取候选框,然后通过CNN提取每个候选框的特征,再使用SVM分类和非极大值抑制,最后用bounding-box回归才能得到图片中物体的种类及位置信息。同样训练过程也很复杂,通过ILSVRC 2012上预训练的AlexNet,在PASCAL VOC2007上微调CNN,训练20类SVM分类器和20类bounding-box回归器,这些不连续过程必然涉及到特征存储、占用大量磁盘空间。
相关文献:
[1]. Girshick, R., Donahue, J., Darrell, T. and Malik, J., 2014. Rich feature hierarchies for accurate object detection and semantic segmentation. In Proceedings of the IEEE conference on computer vision and pattern recognition (pp. 580-587).
[2]. Uijlings, J.R., Van De Sande, K.E., Gevers, T. and Smeulders, A.W., 2013. Selective search for object recognition. International journal of computer vision, 104(2), pp.154-171.
相关参考博客:
[1]. R-CNN论文详解
[2]. Selective Search for Object Recognition解读
[3]. 【object detection】目标检测之RCNN