• Regions with CNN features (R-CNN)


    Regions with CNN features (R-CNN)

    基于卷积神经网络特征的区域方法

    如下图。1.输入图像。2.基于原始图像提取种类独立的区域,构成候选区域集。3.对第2步提取出来的所有区域计算CNN特征,得到特征向量。4.使用特定的SVM分类器对第3步的特征向量进行分类。

     

    主要有两个重要的观点:

    (1) 将CNN结构应用到候选区域 

    (2) 针对标记数据很少的问题,利用辅助训练集如ImageNet的预训练再进行fine-tuning(第3步)

    代码:https://github.com/rbgirshick/rcnn

    目标检测(Object detection)主要由3部分组成:

    1. 候选区域

    The first generates category-independent region proposals. These proposals define the set of candidate detections available to our detector.

    2. 卷积网络

    The second module is a large convolutional neural network that extracts a fixed-length feature

    vector from each region.

    3. SVM检测器

    The third module is a set of classspecific linear SVMs.

    2.1模块设计

    Region proposals:候选区域。如图,给出一张图,识别图中的物体,用框标出来。在标出最终的物体之前,提取多个可能是物体的候选区域以缩小范围,即图中的蓝框和红框,之后仅在这些候选区域上采用CNN提取特征,进行判断。我们使用selective search(参考Selective Search for Object Recognition)来提取候选区域。

     

    selective search:

    1. 使用一种过分割手段,将图像分割成小区域 (1k~2k 个)
    2. 查看现有小区域,按照合并规则合并可能性最高的相邻两个区域。重复直到整张图像合并成一个区域位置
    3. 输出所有曾经存在过的区域,所谓候选区域

    其中合并规则如下: 优先合并以下四种区域:

    • 颜色(颜色直方图)相近的
    • 纹理(梯度直方图)相近的
    • 合并后总面积小的: 保证合并操作的尺度较为均匀,避免一个大区域陆续“吃掉”其他小区域 (例:设有区域a-b-c-d-e-f-g-h。较好的合并方式是:ab-cd-ef-gh -> abcd-efgh -> abcdefgh。 不好的合并方法是:ab-c-d-e-f-g-h ->abcd-e-f-g-h ->abcdef-gh -> abcdefgh)
    • 合并后,总面积在其BBOX中所占比例大的: 保证合并后形状规则。

     

    上述四条规则只涉及区域的颜色直方图、梯度直方图、面积和位置。合并后的区域特征可以直接由子区域特征计算而来,速度较快。

    Feature extraction:特征提取。提取一个4096维的特征向量。通过5个卷积层和2个全连接层,前向传播227x227RGB图像的均值,计算特征值。因为网络需要输入图片的尺寸固定,所以在网络之前,要修改被选区域到固定的尺寸以适应网络。

    为了计算,要将所选区域转化为固定大小(如227x227像素)的矩形框作为输入。如果所选区域小于矩形框,则丢失的数据使用图像的均值替代(在输入图像进CNN之前减去该均值)。如图2所示,每一张图分为上下两组,上面的图padding为0,下面的图padding为16。A列是裁剪的区域,B列是直接在原图中扩展所选区域,延伸到规定的大小,如果延伸到原始图片的外边界,就用颜色均值填充。C列是没有在原图中扩展,而是直接用颜色均值填充。D列是将图片拉伸到规定的尺寸。图3是处理好的图像,称为warped region proposals。经过试验,发现采用各向异性缩放、padding=16的精度最高。

     

    图 2

    图 3

    2.2 测试时检测

    在测试图像上搜索,使用selective search提取大约2000个候选区域,将每个区域扭曲到固定大小的矩阵里,前向传输通过CNN来计算特征。对于每个类别,使用该类别的SVM分类器来进行评估特征,每个提取出来的特征向量都得到该类别的一个分数。一张图有多个候选区域,对于每个类,采用贪心的非极大值抑制(greedy non-maximum suppression):选择得分最高的区域A,如果区域B与A重叠,且重叠度(IoU=(A∩B)/(A∪B))大于某个阈值,则舍去B,然后再选择除A以外得分最高的C,如此重复,找到所有被保留下来的区域,再将分数小于某一阈值的区域删除,就是该类别的检测结果。

    分析。有两点让检测变得高效:

    1. 所有的类别都共享所有的CNN参数。导致在计算候选区域和特征上的时间被平均分到所有类别中。惟一的类别特有的计算是特征和SVM权值和非极大值抑制的点积。事实上,一张图片的所有点积被分批成单独的矩阵对矩阵的乘积——当我们提取出2000个候选框,得到的特征矩阵通常是2000x4096。而SVM权值矩阵是4096xN,N是类别的数目,我们将特征矩阵和SVM矩阵点乘,就可以得到结果。
    2. 和其他方法相比,使用CNN计算的特征向量是低维的。

    RCNN可以应付很多类别,并且不需要借助一些额外的近似手段,比如哈希,别的方法在类别增长时,整个复杂度会上升很多,比之前的DPM的方法也要好很多。即使有10万个类别,结果矩阵乘积在现代多核CPU中也只需要10秒。这种效率不仅仅应用于候选区域和共享特征的计算。UVA系统具有高维特征,会慢两倍,需要134GB内存来存储10万个线性预测器,而我们低维特征只需要1.5GB。

    2.3训练

    Pascal 的全称是 Pattern Analysis, Statical Modeling and Computational Learning。PASCAL VOC 挑战赛是视觉对象的分类识别和检测的一个基准测试,提供了检测算法和学习性能的标准图像注释数据集和标准的评估系统。从2005年至今,该组织每年都会提供一系列类别的、带标签的图片,挑战者通过设计各种精妙的算法,仅根据分析图片内容来将其分类,最终通过准确率、召回率、效率来一决高下。

    有监督的预训练。在数据集ImageNet ILSVRC2012(ILSVRC,Large Scale Visual Recognition Challenge,大规模视觉识别挑战赛)上训练CNN,该训练是图像级别的。我们的CNN与Krizhevsky等人的性能相当,验证集的错误率比他们的top-1错误率高2.2%。这种误差是因为训练过程简化了。

    物体检测的一个难点在于,物体标签训练数据少,如果要直接采用随机初始化CNN参数的方法,那么目前的训练数据量是远远不够的。这种情况下,最好的是采用某些方法,把参数初始化了,然后在进行有监督的参数微调,这里文献采用的是有监督的预训练。所以paper在设计网络结构的时候,是直接用Alexnet的网络,然后连参数也是直接采用它的参数,作为初始的参数值,然后再fine-tuning训练。网络优化求解时采用随机梯度下降法,学习率大小为0.001。.

    特定区域的微调。为了调整CNN使之适应新任务(检测)以及新区域(扭曲的区域窗口),我们采用warped regioin proposals使用SGD(随机梯度下降法)训练CNN参数。使用随机初始的N+1路(其中N是类别层的数目,1是背景)类别层代替CNN的ImageNet特有的1000路类别层,CNN的其他架构保持不变。对于VOC,N=20;对于ILSVRC2013,N=200。我们设置所有候选区域的IoU重叠阈值为>=0.5,大于这个阈值的为正样本,其他为负样本。我们以0.001(预训练率的1/10)的学习率开始SGD,这允许微调而不破坏初始值。在每个SGD迭代,我们均匀地采样32个正样本(包括所有类别)和96个背景样本组成的mini-batch为128的图片。

    目标分类器。试想一个训练二值分类器来检测车子。那么一个包括车的区域就是一个正样本(positive example),一个和车没有关系的背景区域就是一个负样本(negative example),但是如何定义一个部分包含车子的区域呢?我们利用IoU重叠阈值,将候选框和物体的人工标注矩形框(PASCAL VOC的图片都有人工标注)进行重叠计算IoU,低于该阈值的定义为负例。阈值设为0.3。

    一旦提取出特征并且应用训练标签,我们对每个类最优化一个线性SVM。由于负样本很多,因此采用standard hard negative mining method来选择负样本。Hard negative mining收敛很快,只有在简单地处理过所有图像之后mAP才会停止增加。

    接下来我们讨论两个问题(附录B)为什么正例和负例在微调和SVM训练中定义不同。我们还讨论训练SVM的权衡,而不单单使用微调CNN最后softmax层的输出。

    1. 为什么正样本和负样本在微调和SVM训练中定义不同。

    对于微调,每个候选区域和所有类别的ground-truth样本(这里理解为人工标记的样本)进行重叠,选择IoU重叠最大的类别,如果IoU>=0.5,则把该候选区域标记为该类别,其它区域标记为“背景”。

    对于训练的SVM分类器,我们只把ground-truth box里面的样本作为正样本,并且当IoU<=0.3时,作为负样本。忽略那些虽然IoU>0.3但是不完全在ground-truth里面的样本。

    如下图,设红色的框为ground truth box,区域A和B在微调中属于正样本,因为IoU>=0.5,C和D在微调中属于负样本,因为它们的IoU<0.5;而A和D在SVM分类中属于负样本,因为不在ground truth box中,而C也属于负样本,因为它的IoU<0.3,只有B是正样本。如果有个区域完全在ground truth box里面,IoU是0.4,那么在微调中是负样本,在SVM分类器中是正样本。

     

    CNN微调在训练的时候,对训练数据做了比较宽松的标注,比如一个bounding box可能只包含物体的一部分,那么我也把它标注为正样本,用于训练CNN;采用这个方法的主要原因在于因为CNN容易过拟合,所以需要大量的训练数据,所以在CNN训练阶段我们是对Bounding box的位置限制条件限制的比较松(IoU只要大于0.5都被标注为正样本了);

    然而svm训练的时候,因为svm适用于少样本训练,所以对于训练样本数据的IoU要求比较严格,我们只有当bounding box把整个物体都包含进去了,我们才把它标注为物体类别,然后训练svm。

    1. 为什么微调之后不直接将网络的最后一层(21路softmax回归分类器)作为目标检测器,而要使用SVM分类器?

    因为微调定义的正样本没有强调精确的定位,softmax分类器根据随机选取的负样本而不是“hard negtives”训练。有SVM和没有SVM的mAP分别是54.2%和50.9%,这表明,没有SVM,对微调进行微调也有可能达到和有SVM相似的性能。

    2.4         PASCAL VOC 2010-12的结果

    2.5 ILSVRC2013的结果

    在200个类别的ILSVRC2013检测集上使用我们用于PASCAL VOC的系统参数运行R-CNN。实验两次,一次使用bounding-box regression,一次没有。

    3.1可视化学习的特征

    3.2 ablation研究

    对比有微调和没微调的性能。研究哪个层对检测性能最重要。

    3.3网络结构

    CNN架构(Alexnet),ImageNet ILSVC

    第一个卷积层:输入224x224x3的图像,卷积核96个11x11x3,步长4。

    第二个卷积层:输入第一个卷积层过滤后的图像,卷积核256个5x5x48。

    第三个卷积层:卷积核384个3x3x256.

    第四个卷积层:卷积核384个3x3x192.

    第五个卷积层:卷积核256个3x3x192.

    全连接层具有4096个神经元。

    3.4检测结果分析

    3.5bounding-box regression (BB)(附录C):

    使用一个类别专用的检测器SVM给每个选择的区域评分之后,我们使用一个类别专用的bounding-box回归器预测一个新的bounding box。如下图所示,红色的框代表原始的候选区域,绿色的G代表目标的ground truth,我们的目标是寻找一种关系,使输入原始的窗口P经过映射得到一个接近真实窗口G的回归窗口G’。

     

    输入是N个训练对:

     

    候选区域P的参数分别是bounding box的中心点的x坐标,y坐标,宽度,高度,这里指P对应的CNN特征,也就是R-CNN中的pool5 feature(特征向量)。Ground-truth bounding box 。怎么将P转化为G’呢?

    先做平移,得到(1)(2)两个公式,再做尺度缩放,对应公式(3)(4)。经过(1)~(4)得到的并不是真实值G,而是预测值G’。从P到真实值G的公式是(6)~(9)。

     

    目标函数可以表示为:

     

    Φ5(P)是区域P的特征向量。W*是要学习的参数(*表示x,y,w,h,也就是每个变换对应一个目标函数),d*(P)是关于P的pool5特征的线性函数,是得到的预测值。最小化预测值和真实值t的差距,得到损失函数:

     

    优化目标为:

     

    利用梯度下降法或者最小二乘法可以得到w*。

    我们需要学习这四个变换。

    实现bounding-box回归还有两个小问题。首先,正则化是非常重要的:基于验证集设置λ=1000;其次,要注意选择哪个训练对(P,G)进行训练。只有当候选区域和 Ground Truth 比较接近时(R-CNN设置IoU>0.6),我们才能将其作为训练样本训练我们的线性回归模型,否则会导致训练的回归模型不起作用(当候选区域跟ground truth离得较远,就是复杂的非线性问题了,此时用线性回归建模显然不合理)。线性回归就是给定输入的特征向量X,学习一组参数W,使得经过线性回归后的值跟真实值Y(Ground Truth)非常接近,即Y≈WX。

    测试的时候,我们对每个候选区域评分,并预测它的新检测窗口,这些只进行一次。原则上,我们应该多次迭代这个过程(也就是再次评估这个新预测窗口,然后预测一个新的窗口)。然而,我们发现迭代并不能改进结果。

    3.6定性结果

  • 相关阅读:
    ftp服务器架设
    samba服务器架设
    apache安装
    yum及prm安装
    redis安装与使用
    memcached安装与使用
    mysql主从服务器
    nginx负载均衡服务器搭建
    lnmp环境搭建
    linux笔记
  • 原文地址:https://www.cnblogs.com/mandalalala/p/6385906.html
Copyright © 2020-2023  润新知