首页 > 编程学习 > 笔记二 | Rich feature hierarchies for accurate object detection and semantic segmentation

分为三个部分

第一部分 region proposal

方法 selective search

二 用R-CNN做目标检测

算法流程:提取候选的region,然后提取

1 Region proposal

使用了selective search的方法获取候选区域(region proposal),大约获取2000个

2 Feature extraction

2.1 提取过程

        将每个region proposal都先调整到227×227的图像,然后用Alexnet(5层卷积层,2层全连接层)神经网络提取4096维的特征向量。

2.2 网络框架

        用了Caffe的框架,可以参考caffe.berkeleyvision

2.3 网络描述

2.3.1 输入region的尺寸需要调整到与网络输入一致

在进行特征提取前,需要先将每个建议框调整到227×227的尺寸。

【调整方法】原文讨论了好几种调整的方法

2.3.2 时间空间复杂度分析

【参数量】

        由于对region先用CNN进行了特征提取,再用SVM分类,就极大减少了SVM输入数据端的维度(360K vs 4K-dimension)。

【时间】region proposals特征提取这两个过程的运行时间可以被所有目标类别平摊,每一个类单独的时间花销是特征向量feature在进行SVM分类non-maximum suppression上。

【存储】

用本文的方法:R-CNN提取特征矩阵为2000×4096(region的数量×特征维度),SVM权重矩阵4096×N(维度×类别数量),其做分类时只用相乘这两个矩阵。

传统方法:高纬度features作SVM分类时,需要大量的内存存储

相比较而言,本文中降维提取的特征所需要的内存是很小的

3 训练

3.1 CNN预训练

有监督预训练:对CNN在ILSVRC2012上预训练(图像有标签但无bounding box labels),最后一层是4096维特征到ILSVRC分类数据集上1000类的映射。这样的预训练使得AlexNet在图像分类任务中获得了较强的特征提取能力。

3.2 Domain-specific fine-tuning(调优)

        为了将CNN应用于新的检测任务和新的domain(warped VOC windows),需要用SGD的方法再训练网络参数,此时网络的输入是来自VOC的wraped region proposals。

【网络的调整】

替换层:将预训练时的1000个通道的分类层替换为一个随机初始化的21-way的分类层(VOC的20个classes加一个背景)

【分类标准】        

正样本(positive example):region proposals与ground-truth box的IoU \geq 0.5

负样本(negetive example):region proposals 与 ground-truth box 的IoU \leq 0.5

【训练过程】

使用SGD方法训练,采用mini-batch的方法,统一采样32个正样本(在所有类上)和96个负样本

计算它们的平均损失函数的值来更新参数,学习率为0.001(预训练时的0.1倍)。

3.3 SVM训练

        R-CNN网络输出的是4096维的特征向量,然后送到SVM中分类,SVM输出属于该类别的得分。SVM是二分类器,所以对于每一个类别都要训练一个SVM分类器。

【训练方法】

正样本为标定的真值边界框(Ground-truth bounding boxes)经CNN提取后的特征向量。

负样本为与所有标定真值边界框的IoU\leq 0.3的region proposals经CNN提取后的特征向量

 因为负样本的数量非常多,所以用难负样本挖掘(standard hard negative mining)的方法选取具有代表性的负样本。将每次检测结果为错误的情况作为难负样本(hard negative)送回去训练,直至模型的成绩不再提升。

【讨论】

在SVM阶段负样本选取IoU的阈值是0.3,原因是SVM适用于小样本训练,故对IoU的限制严格;CNN在样本数量较少时容易发生过拟合,所以需要大量的训练数据,因此“放宽”了IoU。

调优训练的正样本IoU宽松,不强调位置的精准性

正样本负样本
SVM标定的真值边界框难负样本挖掘方法筛选
CNN与标定真值边界框IoU大于等于0.5的建议框随机抽样

用SVM代替softmax分类,mAP由50.9%提升到54.2%。

3.4训练结果

三 可视化,消融实验,误差模式分析

1 可视化学习特征

文章提出一种简单,无参数方法来直接显示网络学习到的内容。

1.1 思路

        思想是挑出一个feature,然后将它作为目标检测器。做法就是计算其在大量的region proposals(1000万)的activations,从高到底对activations的结果排序,运用non-maximum suppression的方法,然后展示得分最高的regions

1.2 实验做法

        文章可视化Alexnet的pool5,feature map(又称为unit)为6×6×256,每个pool5的unit在原始227×227的输入上的感受野为195×195。

        在VOC 2007上 fine-tuned,下图的每一行是一个pool5 unit得分最高的16个activations:

        可以看出来挑选的六个unit分别学到了不同的内容,如第一行是人脸,第二行是狗的脸和洞的排列;网络体现了在pool5层学习到的representation结合了一些class-tuned feature和有关形状,纹理等的特征分布

2 消融实验

2.1 实验内容

        分析了fine-tune阶段,CNN网络后三层的分类性能,即输出各层的结果并用SVM分类。

【各层介绍】

pool5:输出9216维的特征向量

全连接层6:对pool5左乘一个4096×9216的权重矩阵,再对结果添加bias,并半波整流

全连接层7:其作用是对fc6的feature乘以一个4096×4096的权重矩阵,并添加一个bias向量,半波整流

2.2 实验介绍及结果分析

2.2.1 实验一:不对网络进行fine-tuning,只在ILSVRC 2012上对CNN参数预训练

         结果却发现经过fc7层后,特征反而不如fc6层的特征的分类结果好,这就说明可以去掉这一层(节省29%的参数量,约16.8million),且不会使得mAP值下降。

文章还说到:CNN的表示能力大多来自于卷积层,而非后续的全连接层(占很大参数量)

2.2.2 实验二:在VOC 2007 trainval数据集上进行fine-tuned:

         可以看到fc7的mAP提升了8%,且fc6和fc7层mAP的提升远大于pool5层

说明pool5学到的更多是泛化的特征,fc6,fc7层的提升是因为学到了domain-specific,non-linear的特征

2.2.3 实验三:与同期其他特征学习方法的比较

DPM ST(A learned mid-level representation for contour and object detection)

DPM HSC

可以看到任一种R-CNN的性能都优于三种基于DPM的方法 

3 误差分析

        利用了分析工具 ,出自Hoiem的Diagnosing error in object detectors,讨论结果在Figure4和figure5的题目部分

四 边界框回归

通过误差分析会发现,有定位误差出现,假设有一个标定的真值目标边界框和建议框,即使建议框被分类器识别为飞机,但由于框的定位不准确,与真值边界框的IoU较小,相当于没有正确检测出飞机

我们可以使用边界框回归的方法来减小目标定位的误差。边界框回归的思路就是将定位不准确的建议框进行微调,使调整后的边界框与真值边界框更接近,从而提升定位的准确度。

训练一组特定类别的线性回归模型(包括Pascal VOC数据集中的全部20个类别),在使用SVM给建议框打分之后,通过建议框在CNN的顶层预测一个新的目标边界框的位置。实验结果表明,使用边界框回归的方法后,大量错误的位置检测结果被修复了,mAP相应地提升了3%~4%

对上述的问题,进行修正

Bounding box regression

训练了一个线性回归模型来预测一个新的检测window,作为selective search region proposal,提升了mAP

五 应用于语义分割

Semantic segmentation

Region分类任务是语义分割的一种标准技术,因此可以将R-CNN应用到PASCAL VOC分割挑战中。本文与同期领先的语义分割系统O2P比较,为了统一性使用了他们的开源框架。O2P利用CPMC对每张图生成150region proposals,并用support vector regression(SVR)预测每个类别的每个region的质量。CPMC regions和 多特征类型的second-order pooling

用于分割的CNN特征

评估了在CPMC regions上计算特征的三种策略,首先都是将包含region的矩形窗口 wrap成227×227。

第一种方法(full):忽略region的形状并在warped window上直接计算CNN features,与做检测类似

但这样的坏处就是忽略了region拥有的非矩阵形状的特性,导致两个可能重叠量很小的region也有很相似的boundng boxes。

第二种方法(fg)计算一个区域的foreground mask上的CNN features。

第三种方法是(full+fg):

在VOC 2011上验证集上的结果

fc6的结果好于fg

masked region又好于full

六 补充

1 目标建议框的变换

        CNN网络的输入是固定尺寸227×227,但proposal是任意尺寸的矩形框,所以需要先对proposal变换成可以送入CNN网络的尺寸。

1.1 尺寸变换

有两种变换方法:

tightest square with context:将proposal用一个正方形紧密围绕,然后将包含在正方形的image缩放成CNN输入的尺寸。另一种变体是舍弃图像中除proposal外的部分。

wrap:直接将proposal缩放成CNN输入尺寸,改变长宽比。

1.2 padding

        对proposal的周围进行填充。

2 正负样本选取以及softmax

2.1 正负样本的选取

        由正文可知,正负样本在fine-tuning阶段SVM阶段定义正负样本的方式不同:在fine-tuning时,正样本是与ground-truth boxes的IoU大于等于0.5的proposal,其他proposal称为background(负样本);训练SVM时,正样本是ground-truth boxes,取与ground-truth boxes的IoU小于0.3的为负样本,其余proposal被丢弃。

 【原因解释】

        在训练SVM时,使用的训练数据是从ImageNet上预训练后的CNN得到的features,此时还没有进行fine-tuning。实验验证当前对于正负样本的定义的效果最好。当开始进行fine-tuning时,发现使用与SVM相同的正负样本定义时,效果并不如现在的定义。

        fine-tuning阶段使用了很多IoU在0.5到1之间的proposals(称为“jittered" examples),扩大了近30倍的正样本的数量。作者推测fine-tuning阶段,大的训练集能够帮助获得更好的训练结果,且防止了过拟合。但是这种jittered examples更像是次优解,不是对目标精确定位的fine-tuned。

 2.2 softmax分类与SVM

        由2.1可知,fine-tuning阶段不能训练精确定位,这就引入了另一个问题:为什么在fine-tuning后要训练SVM,而不是直接用fine-tuned网络的最后一层进行分类。

        作者实验后发现,在VOC 2007数据集上直接用softmax分类,mAP由54.2%下降到50.9%。可能原因为:

  • 在fine-tuning阶段定义的positive examples不强调定位的准确性;
  • softmax分类器是用随机采样的negative examples训练的,SVM用的是hard negatives的子集进行训练的。

        由于差距不大,作者推测可以使用一些额外的微调缩小性能之间的差距,用softmax来替代SVM,在不损失性能的同时简化和加速R-CNN的训练。

3 边界框回归(Bounding-box regression)        

        文中在bounding-box 回归阶段提升定位的性能。在某一类的SVM上得到proposal的分数后,用一个class-specific bounding-box regressor预测一个bounding box。

3.1 训练算法

 [ 算法输入 ] 输入为N个训练对{(P^i,G^i)}_{i=1,\cdots,N},其中P^i = (P_x^i,P_y^i,P_w^i,P_h^i)表示了proposal P^i中心像素点的坐标。每个ground-truth bounding boxG也由G = (G_x,G_y,G_w,G_h)来表示。

训练目标是学习一种能够将proposalP映射为ground-truth bounding boxG的变换

[ 算法介绍 及 训练过程] 

        各维度的变换函数为d_x(P),d_y(P),d_w(P),d_h(P),实现为:

\\\hat{G_x} = P_wd_x(P)+P_x \\ \hat{G_y} = P_hd_y(P)+P_y\\ \hat{G_w} = P_wexp(d_w(P))\\ \hat{G_h} = P_hexp(d_h(P))

        前两个函数实现的是平移变换:

        \Delta x = P_wd_x(P),\Delta y = P_hd_y(P)

        后两个函数实现的是一个对数空间的尺寸缩放变换:

        S_w = e^{d_w(P)},S_h = e^{d_h(P)}

        每个变换函数d_{\star}(P)(\star = x,y,w,h)都是线性函数,在CNN最高层特征图上建模,输入为proposal在pool_5的特征(这一点很重要!!特征是从CNN的pool5层得到的),用\phi _5(P)表示。

        根据上述定义,将原proposal变换函数与输入的关系可以描述为:d_{\star}(P) = w_{\star}^T\phi_5(P)

        w_{\star}是可学习的参数向量,学习w_{\star}可以通过优化下面的正则化最小二乘目标(岭回归ridge regression):

w_{\star} = \mathop{\arg\min}_{\hat{w_{\star}}} \sum\limits_{i}^N(t_{\star}^i-\hat{w_{\star}}^T\phi_5(P^i))^2 + \lambda\left \| \hat{w_{\star}} \right \|^2

         t_{\star}的定义如下:

\\t_x =(G_X-P_x)/P_w \\ t_y = (G_y-P_y)/P_h \\ t_w = log(G_w/P_w) \\ t_h = log(G_h/P_h)

其含义为真正需要的平移量(t_x,t_y)和尺寸缩放量(t_w,t_h)

        训练损失函数为

Loss = \sum\limits_i^N(t_{\star}^i - \hat{w_{\star}}^T\phi_5(P^i))^2

        

        经过训练,就能通过proposal在CNN顶层的特征\phi _5(P),根据学习到的参数w_{\star}预测出d_{\star}(P),进而得到需要的平移变换\Delta x,\Delta y和尺寸缩放S_w,S_h,实现更精确的目标定位 。

[ 有关bounding-box回归实现时的两个问题 ]

一是正则化:在验证集上设置\lambda = 1000

二是要注意训练对(P,G)的选取:

        若proposal离所有ground-truth box很远,则对其做回归没有意义;

        因此选取proposal作为训练的输入时,要选择至少离一个ground-truth box‘近’的proposal。‘’的定量描述为:与ground-truth boxes的IoU的最大值大于0.6。其他不符合条件的proposal都舍弃 。

  

4 特征可视化

        下图是从pool5可视化的69个特征,每个特征展示在VOC2007上前24个最大激活的proposal,每个特征标注了其在pool5特征图(维度为6×6×256)上的位置(y,x,channel),(y,x)定位了感受野。

5 Per-category segmentation results

Copyright © 2010-2022 ngui.cc 版权所有 |关于我们| 联系方式| 豫B2-20100000