【R-CNN】Regions with CNN features

为什么产生 R-CNN

  1. 近10年以来,以人工经验特征为主导的目标检测任务 mAP 提升缓慢;
  2. 随着 ReLu 激活函数、dropout 正则化手段和大规模图像样本集 ILSVRC 的出现,在 2012 年 ImageNet 大规模视觉识别挑战赛中,Hinton 及他的学生采用 CNN 特征获得了最高的图像识别精确度;
  3. 上述比赛后,引发了一股“是否可以采用CNN特征来提高当前一直停滞不前的物体检测准确率“的热潮。

R-CNN 创新点

  1. 采用 CNN 网络提取图像特征,从经验驱动的人造特征范式 HOG、SIFT 到数据驱动的表示学习范式,提高特征对样本的表示能力
  2. 采用大样本下有监督预训练 + 小样本微调的方式解决小样本难以训练甚至过拟合等问题。

R-CNN 贡献

  1. R-CNN 让目标检测在 PASCAL VOC 2012 数据集上取得了 mAP 53.3% 的成绩,相对于之前最好的结果整整提升了 30%;
  2. 证明了神经网络可以应用在自底向上候选区域,这样就可以进行目标分类和目标定位;
  3. 带来一个观点,即当你缺乏大量的标注数据以训练神经网络时,比较好的办法是进行神经网络的迁移学习。采用在其他大型数据集训练过后的神经网络,然后再小规模特定的数据集上进行 fine-tune。

R-CNN 缺点

  1. **CNN流程较多。**包括 region proposal 的选取,训练卷积神经网络(softmax classifier,log loss),训练 SVM(hinge loss)和训练 regressor(squared loss),这使得训练时间非常长(84小时),占用磁盘空间也大。
  2. 在训练卷积神经网络的过程中对每个 region proposal 都要计算卷积,这其中重复了太多不必要的计算。试想一张图像可以得到 2000 多个region proposal,大部分都有重叠,因此基于 region proposal 卷积的计算量太大,而这也正是之后 Fast R-CNN 主要解决的问题。

借鉴

AlexNet:2012 年 Krizhevsky 等人在 ImageNet 举办的 ILSVRC 目标识别挑战大赛(对图片进行分类的比赛)中一战成名,豪夺当年的第一名,Top5 错误率 15%,而他们团队提出来的网络结构以他们的导师名字命名,就是 AlexNet。
AlexNet 有5层卷积层,2层全连接层。

ImageNet:用于目标识别的数据集,比较大,有1000个类;
PASCAL VOC:用于目标检测的数据集,比较小,只有20个类;
使用识别库进行预训练,而后用检测库调优参数。最后在检测库上评测。
AlexNet
因为 AlexNet 的出现,世人的目光重回神经网络领域,以此为契机,不断涌出各种各样的网络比如 VGG、GoogleNet、ResNet 等等。
受 AlexNet 启发,论文作者尝试将 AlexNet 在 ImageNet 目标识别的能力泛化到 PASCAL VOC 目标检测上面来。
根据这一思路,作者需要解决两个主要的问题:
如何利用深度的神经网络去做目标的定位?
如何在一个小规模的数据集上训练能力强劲的网络模型?

  1. 如何利用深度的神经网络去做目标的定位?
    利用region proposal + CNN做目标定位
    流程:
    ① 给定一张输入图片,从图片中提取 2000 个类别独立的候选区域;
    ② 对于每个区域利用 CNN 抽取一个固定长度的特征向量;
    ③ 再对每个区域利用 SVM 进行目标分类。

  2. 如何在一个小规模的数据集上训练能力强劲的网络模型?
    利用预训练与微调解决标注数据缺乏的问题
    采用在 ImageNet 上已经训练好的模型,然后在 PASCAL VOC 数据集上进行 fine-tune。因为 ImageNet 的图像高达几百万张,利用卷积神经网络充分学习浅层的特征,然后在小规模数据集做规模化训练,从而可以达到好的效果。

R-CNN 总体思路

R-CNN 检测流程
生成候选区域;首先输入一张图片,先定位出 2000 个物体候选框。
利用CNN提取特征向量;采用CNN提取每个候选框中图片的特征向量,特征向量的维度为 4096 维。
利用SVM进行特征向量分类;用 svm 算法对各个候选框中的物体进行分类识别。
使用回归器修正候选框位置。

生成候选区域阶段

候选区域生成和后续步骤相对独立,实际可以使用任意算法进行。
实现:《search for object recognition》中的 selective search 算法
从一张图像生成约2000-3000个候选区域。基本思路如下:

  • 使用一种过分割手段,将图像分割成小区域 ;
  • 查看现有小区域,合并可能性最高的两个区域。重复直到整张图像合并成一个区域位置 ;
  • 输出所有曾经存在过的区域,所谓候选区域;

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

  • 颜色(颜色直方图)相近的
  • 纹理(梯度直方图)相近的
  • 合并后总面积小的。保证合并操作的尺度较为均匀,避免一个大区域陆续“吃掉”其他小区域。
  • 合并后,总面积在其BBOX中所占比例大的。保证合并后形状规则。
    例:设有区域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。
    例:左图适于合并,右图不适于合并。
    在这里插入图片描述

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

多样化与后处理:
为尽可能不遗漏候选区域,上述操作在多个颜色空间中同时进行(RGB,HSV,Lab等)。在一个颜色空间中,使用上述四条规则的不同组合进行合并。所有颜色空间与所有规则的全部结果,在去除重复后,都作为候选区域输出。
作者提供了Selective Search的源码,内含较多.p文件和.mex文件,难以细查具体实现。

细节:
生成的候选框都需要变换到固定大小(各向异性缩放、各向同性缩放)
用 IOU 为2000个候选框打标签,以便 CNN 训练使用
生成的 2000 个候选框图片用于继续训练 CNN、SVM

CNN 特征提取阶段

网络结构设计阶段

网络架构我们有两个可选方案:第一选择经典的Alexnet;第二选择VGG16。经过测试Alexnet精度为58.5%,VGG16精度为66%。VGG这个模型的特点是选择比较小的卷积核、选择较小的跨步,这个网络的精度高,不过计算量是Alexnet的7倍。后面为了简单起见,我们就直接选用Alexnet,并进行讲解;Alexnet特征提取部分包含了5个卷积层、2个全连接层,在Alexnet中p5层神经元个数为9216、 f6、f7的神经元个数都是4096,通过这个网络训练完毕后,最后提取特征每个输入候选框图片都能得到一个4096维的特征向量。

网络有监督预训练阶段

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

网络优化求解:采用随机梯度下降法,学习速率大小为0.001;

fine-tuning 阶段

我们接着采用selective search 搜索出来的候选框,然后处理到指定大小图片,继续对上面预训练的cnn模型进行fine-tuning训练。假设要检测的物体类别有N类,那么我们就需要把上面预训练阶段的CNN模型的最后一层给替换掉,替换成N+1个输出的神经元(加1,表示还有一个背景),然后这一层直接采用参数随机初始化的方法,其它网络层的参数不变;接着就可以开始继续SGD训练了。开始的时候,SGD学习率选择0.001,在每次训练的时候,我们batch size大小选择128,其中32个事正样本、96个事负样本(正负样本的定义前面已经提过,不再解释)。

测试过程

提取候选区域
输入一张多目标图像,采用 selective search 算法提取约2000个可能包括检测目标的 region proposal(候选框);

候选区域尺寸的修整变换;先在每个候选框周围加上 16 个像素值为候选框像素平均值的边框,再直接变形为 227×227 的大小;

送入神经网络提取特征;先将所有候选框像素减去该候选框像素平均值后【预处理操作】,再依次将每个227×227的候选框输入AlexNet CNN网络获取4096维的特征【比以前的人工经验特征低两个数量级】,2000个候选框的CNN特征组合成2000×4096维矩阵;

用SVM进行类别识别并产生分数;将2000×4096维特征与20个SVM组成的权值矩阵4096×20相乘【20种分类,SVM是二分类器,则有20个SVM】,获得2000×20维矩阵表示每个候选框是某个物体类别的得分;

剔除重叠区域;分别对上述2000×20维矩阵中每一列即每一类进行非极大值抑制剔除重叠候选框,得到该列即该类中得分最高的一些候选框;

修正边框位置;分别用20个回归器对上述20个类别中剩余的候选框进行回归操作,修正候选框位置,最终得到每个类别的修正后的得分最高的bounding box。

解释分析

  1. 候选区域
    能够生成候选区域的方法很多,比如:
    objectness
    selective search
    category-independen object proposals
    constrained parametric min-cuts(CPMC)
    multi-scale combinatorial grouping
    Ciresan
    R-CNN 采用的是 Selective Search 算法。

  2. selective search
    采取过分割手段,将图像分割成小区域,再通过颜色直方图,梯度直方图相近等规则进行合并,最后生成约2000个建议框的操作,得到对应的坐标。
    遍历候选框:
    ① 对候选框进行筛选,去掉重复的、太小的方框等。假设剩余1500个候选框,截取这1500个候选框,就得到1500张图片;
    ② 由于CNN对输入图片的大小有要求,需要对这1500个图片进行缩放处理,目标是缩放到CNN要求的大小。(各向异性缩放、各向同性缩放)
    ③ 根据IOU对每一张图片进行标注,比如IOU > 0.5则标注为正样本(目标类别),否则为负样本(背景类别)。

  3. CNN提取特征
    可选网络结构:AlexNet,Vgg-16
    R-CNN 采用的是 AlexNet,基于 Caffe 进行代码开发。R-CNN 抽取了一个 4096 维的特征向量
    Alextnet 的输入图像大小是 227x227,而通过 Selective Search 产生的候选区域大小不一,为了与 Alexnet 兼容,R-CNN 采用了非常暴力的手段,那就是无视候选区域的大小和形状,统一变换到 227*227 的尺寸。
    有一个细节,在对 Region 进行变换的时候,首先对这些区域进行膨胀处理,在其 box 周围附加了 p 个像素,也就是人为添加了边框,在这里 p=16。

  4. 训练SVM
    CNN最后的softmax层可以做分类,在论文中为什么要把softmax层换成SVM进行分类?
    因为SVM和CNN分类时的正负样本定义不同,导致CNN+softmax输出比CNN+SVM的精度要低。由于CNN容易过拟合,需要大量的训练样本,所以CNN的样本标注比较宽松,IOU>0.5即标记为正样本。SVM适用于小样本训练,对样本的IOU要求较高,在训练时,IOU>0.7时标记为正样本。
    由于SVM是二分类器,因此对每一个类别都需要训练一个SVM。

  5. 为什么要将建议框变形为227×227?怎么做?
    本文采用AlexNet CNN网络进行CNN特征提取,为了适应AlexNet网络的输入图像大小:227×227,故将所有建议框变形为 227×227。
    那么如何进行变形操作呢?作者在补充材料中给出了四种变形方式:
    (1)各向同性缩放
    ① 考虑context的各向同性变形【图像中context指边框周边像素】。建议框像周围像素扩充到227×227,若遇到图像边界则用建议框像素均值填充,下图第二列;
    ② 不考虑context的各向同性变形,直接用建议框像素均值填充至227×227,下图第三列;
    (2)各向异性缩放,简单粗暴对图像直接缩放至227×227,不管是否扭曲。下图第四列;
    ④ 变形前先进行边界像素填充【padding】处理,即向外扩展建议框边界,以上三种方法中分别采用padding=0下图第一行,padding=16下图第二行进行处理;
    经过作者一系列实验表明采用 padding=16 的各向异性缩放即下图第二行第三列效果最好,能使mAP提升3-5%。
    在这里插入图片描述

  6. CNN特征如何可视化?
    文中采用了巧妙的方式将AlexNet CNN网络中Pool5层特征进行了可视化。该层的size是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】;
    文中将这些特征视为”物体检测器”,输入10million的Region Proposal集合,计算每种6×6特征即“物体检测器”的激活量,之后进行非极大值抑制,最后展示出每种6×6特征即“物体检测器”前几个得分最高的Region Proposal,从而给出了这种6×6的特征图表示了什么纹理、结构,很有意思。

  7. 为什么要进行非极大值抑制?非极大值抑制又如何操作?
    先解释什么叫IoU。如下图所示IoU即表示(A∩B)/(A∪B)

在这里插入图片描述
在测试过程完成到第4步之后,获得2000×20维矩阵表示每个建议框是某个物体类别的得分情况,此时会遇到下图所示情况,同一个车辆目标会被多个建议框包围,这时需要非极大值抑制操作去除得分较低的候选框以减少重叠框。

在这里插入图片描述
具体怎么做呢?
① 对2000×20维矩阵中每列按从大到小进行排序;
② 从每列最大的得分建议框开始,分别与该列后面的得分建议框进行IoU计算,若IoU>阈值,则剔除得分较小的建议框,否则认为图像中存在多个同一类物体;
③ 从每列次大的得分建议框开始,重复步骤②;
④ 重复步骤③直到遍历完该列所有建议框;
⑤ 遍历完2000×20维矩阵所有列,即所有物体种类都做一遍非极大值抑制;
⑥ 最后剔除各个类别中剩余建议框得分少于该类别阈值的建议框。

  1. 为什么要采用回归器?回归器是什么有什么用?如何进行操作?
    目标检测不仅是要对目标进行识别,还要完成定位任务,所以最终获得的bounding-box也决定了目标检测的精度。
    定位精度:定位精度可以用算法得出的物体检测框与实际标注的物体边界框的IoU值来近似表示。
    如下图所示,绿色框为实际标准的卡宴车辆框,即Ground Truth;黄色框为selective search算法得出的Region Proposal。即使黄色框中物体被分类器识别为卡宴车辆,但是由于绿色框和黄色框IoU值并不大,所以最后的目标检测精度并不高。采用回归器是为了对候选框进行校正,使得校正后的Region Proposal与Ground Truth更接近, 以提高最终的检测精度。论文中采用bounding-box回归使mAP提高了3~4%。
    在这里插入图片描述
    那么回归器如何设计呢?
    在这里插入图片描述
    边框P表示Region Proposal(网络计算得到),边框G表示Ground Truth(人为标注),边框G^表示Region Proposal进行回归后的预测窗口。
    目标:找到从P到G^ 的线性变换【当Region Proposal与Ground Truth的IoU>0.6时可以认为是线性变换】,使得P经过变换以后得到的G^与G更相近。
    这就相当于一个简单的可以用最小二乘法解决的线性回归问题。
    思路:平移 + 尺度缩放
    定义P窗口的数学表达式:Pi=(Pix,Piy,Piw,Pih),其中(Pix,Piy)表示第一个i窗口的中心点坐标,Piw,Pih分别为第i个窗口的宽和高;G窗口的数学表达式为:Gi=(Gix,Giy,Giw,Gih);G窗口的数学表达式为:Gi=(Gix,Giy,Giw,Gih)。(以下省去i上标)
    定义四种变换函数,dx§,dy§,dw§,dh§。dx§和dy§通过平移对x和y进行变化,dw§和dh§通过缩放对w和h进行变化,即下面四个式子所示:
    G^x=Pwdx§+Px(1)
    G^y=Phdy§+Py(2)
    G^w=Pwexp(dw§)(3)
    G^h=Phexp(dh§)(4)
    每一个d∗§【*表示x,y,w,h】都是一个AlexNet CNN网络Pool5层特征ϕ5§的线性函数,即d∗§=wT∗ϕ5§ ,这里wT∗就是所需要学习的回归参数。损失函数即为:Loss=argmin∑i=0N(ti∗−wT∗ϕ5(Pi))2+λ||w∗||2(5)
    损失函数中加入正则项λ||w^∗||2 是为了避免归回参数wT∗过大。其中,回归目标t∗由训练输入对(P,G)按下式计算得来:
    tx=(Gx−Px)/Pw(6)
    ty=(Gy−Py)/Ph(7)
    tw=log(Gw/Pw)(8)
    th=log(Gh/Ph)(9)
    ①构造样本对。为了提高每类样本框回归的有效性,对每类样本都仅仅采集与Ground Truth相交IoU最大的Region Proposal,并且IoU>0.6的Region Proposal作为样本对(Pi,Gi),一共产生20对样本对【20个类别】;
    ②每种类型的回归器单独训练,输入该类型样本对N个:{(Pi,Gi)}i=1⋯N以及Pii=1⋯N所对应的AlexNet CNN网络Pool5层特征ϕ5(Pi)i=1⋯N;
    ③利用(6)-(9)式和输入样本对{(Pi,Gi)}i=1⋯N计算ti∗i=1⋯N;
    ④利用ϕ5(Pi)i=1⋯N和ti∗i=1⋯N,根据损失函数(5)进行回归,得到使损失函数最小的参数wT∗。

  2. 运行时分析
    两个因素可以让目标识别变得高效:
    ① CNN 的参数是所有类别共享的。
    ② R-CNN 生成的特征向量维度较少。论文拿应用在 UVA 采用的空间金字塔技术相比,它们生成的特征维度是 360k,而 R-cnn 只有 4K 多。
    也就是运行过程中,参数变少了,所以比传统的高效。
    体现在提取特征的时间,如果用 GPU ,13s/张,用 CPU 53s/张。
    R-cnn 能够处理 100k 种类别,在一个多核的 CPU 上只要花费 10 多秒。
    与 UVA 相比,如果处理 100k 个预测,需要 134GB 内存空间,而 R-CNN 只要 1.5GB。

训练过程

提取在 ILSVRC 2012 的模型和权重,然后在 VOC 上进行 fine-tune。
需要注意的是,这里在 ImageNet 上训练的是模型识别物体类型的能力,而不是预测 bbox 位置的能力。
ImageNet 的训练当中需要预测 1000 个类别,而 R-CNN 在 VOC 上进行迁移学习时,神经网络只需要识别 21 个类别,包括 VOC 规定的 20 个类别加上背景类别。
R-CNN 将候选区域与 GroundTrue 中的 box 标签相比较,如果 IoU > 0.5,说明两个对象重叠的位置比较多,于是就可以认为这个候选区域是 Positive,否则就是 Negetive.
训练策略是:采用 SGD 训练,初始学习率为 0.001,mini-batch 大小为 128。

  1. 有监督预训练
    无监督预训练:预训练阶段不需要人工标注数据。栈式自编码、DBM都采用无监督预训练。
    有监督预训练:也叫迁移学习。
样本来源
正样本ILSVRC2012
负样本ILSVRC2012

ILSVRC样本集上仅有图像类别标签,没有图像物体位置标注;
采用AlexNet CNN网络进行有监督预训练,学习率=0.01;
该网络输入为227×227的ILSVRC训练集图像,输出最后一层为4096维特征 —>1000类的映射,训练的是网络参数。在这里插入图片描述
此网络提取的特征为4096维,之后送入一个4096->1000的全连接(fc)层进行分类。,学习率0.01。使用ILVCR 2012的全部数据进行训练,输入一张图片,输出1000维的类别标号。

  1. 特定样本下的微调
样本来源
正样本Ground Truth+与Ground Truth相交IoU>0.5的候选框【由于Ground Truth太少了】
负样本与Ground Truth相交IoU≤0.5的建议框

PASCAL VOC 2007样本集上既有图像中物体类别标签,也有图像中物体位置标签;
采用训练好的AlexNet CNN网络进行PASCAL VOC 2007样本集下的微调,学习率=0.001【0.01/10为了在学习新东西时不至于忘记之前的记忆】;
mini-batch为32个正样本和96个负样本【由于正样本太少】;
该网络输入为候选框【由selective search而来】变形后的227×227的图像,修改了原来的1000为类别输出,改为21维【20类+背景】输出,训练的是网络参数。

  1. SVM训练
    样本 来源
    正样本 Ground Truth
    负样本 与Ground Truth相交IoU<0.3的建议框
    由于SVM是二分类器,需要为每个类别训练单独的SVM;
    SVM训练时输入正负样本在AlexNet CNN网络计算下的4096维特征,输出为该类的得分,训练的是SVM权重向量;
    由于负样本太多,采用hard negative mining的方法在负样本中选取有代表性的负样本,该方法具体见。

  2. Bounding-box regression训练
    样本 来源
    正样本 与Ground Truth相交IoU最大的Region Proposal,并且IoU>0.6的Region Proposal
    输入数据为某类型样本对N个:{(Pi,Gi)}i=1⋯N以及Pii=1⋯N所对应的AlexNet CNN网络Pool5层特征ϕ5(Pi)i=1⋯N,输出回归后的建议框Bounding-box,训练的是dx§,dy§,dw§,dh§四种变换操作的权重向量。具体见前面分析。

解释分析

  1. 什么叫有监督预训练?为什么要进行有监督预训练?
    原因:物体检测的难点在于标注数据少,如果直接采用随即初始化的CNN参数,那么目前的训练数据量是远远不够的。
    解决:在这种情况下,最好先将参数初始化,然后再对参数进行微调。本文采用的是有监督的预训练。
    解释:有监督预训练可以称为迁移学习,比如你已经有了一大堆标注好的人脸年龄分类的图片数据,并训练了一个对应的CNN用于人脸的年龄识别。后来你又遇到一个新的任务:人脸性别识别,那么这个时候你可以利用已经训练好的年龄识别CNN模型,去掉最后一层,然后其他的网络层参数直接复制过来,继续进行训练。简单说,就是把一个任务训练好的参数拿到另一个任务作为神经网络的初始参数值,这样相对于直接采用随即初始化的方法精度会有很大的提高。
    本文应用:本文采用迁移学习的思想,先用图片分类训练数据库ILSVRC 2012进行网络的图片分类训练(因为图片分类标注好的训练数据非常多,但是物体检测的标注数据却很少)。这个训练数据库共包含1000类物体,因此预训练阶段CNN模型的输出是1000个神经元,然后将最后一层的输出层单元数修改为类别数+1(即1001),多出的一类为背景,该神经元参数随机初始化,其他参数不变,继续对网络进行训练。

有监督预训练也称之为迁移学习,举例说明:若有大量标注信息的人脸年龄分类的正负样本图片,利用样本训练了CNN网络用于人脸年龄识别;现在要通过人脸进行性别识别,那么就可以去掉已经训练好的人脸年龄识别网络CNN的最后一层或几层,换成所需要的分类层,前面层的网络参数直接使用为初始化参数,修改层的网络参数随机初始化,再利用人脸性别分类的正负样本图片进行训练,得到人脸性别识别网络,这种方法就叫做有监督预训练。这种方式可以很好地解决小样本数据无法训练深层CNN网络的问题,我们都知道小样本数据训练很容易造成网络过拟合,但是在大样本训练后利用其参数初始化网络可以很好地训练小样本,这解决了小样本训练的难题。
这篇文章最大的亮点就是采用了这种思想,ILSVRC样本集上用于图片分类的含标注类别的训练集有1millon之多,总共含有1000类;而PASCAL VOC 2007样本集上用于物体检测的含标注类别和位置信息的训练集只有10k,总共含有20类,直接用这部分数据训练容易造成过拟合,因此文中利用ILSVRC2012的训练集先进行有监督预训练。
2. ILSVRC 2012与PASCAL VOC 2007数据集有冗余吗?
即使图像分类与目标检测任务本质上是不同的,理论上应该不会出现数据集冗余问题,但是作者还是通过两种方式测试了PASCAL 2007测试集和ILSVRC 2012训练集、验证集的重合度:第一种方式是检查网络相册IDs,4952个PASCAL 2007测试集一共出现了31张重复图片,0.63%重复率;第二种方式是用GIST描述器匹配的方法,4952个PASCAL 2007测试集一共出现了38张重复图片【包含前面31张图片】,0.77%重复率,这说明PASCAL 2007测试集和ILSVRC 2012训练集、验证集基本上不重合,没有数据冗余问题存在。
3. 可以不进行特定样本下的微调吗?可以直接采用AlexNet CNN网络的特征进行SVM训练吗?
文中设计了没有进行微调的对比实验,分别就AlexNet CNN网络的pool5、fc6、fc7层进行特征提取,输入SVM进行训练,这相当于把AlexNet CNN网络当做万精油使用,类似HOG、SIFT等做特征提取一样,不针对特征任务。实验结果发现f6层提取的特征比f7层的mAP还高,pool5层提取的特征与f6、f7层相比mAP差不多;
在PASCAL VOC 2007数据集上采取了微调后fc6、fc7层特征较pool5层特征用于SVM训练提升mAP十分明显;
由此作者得出结论:不针对特定任务进行微调,而将CNN当成特征提取器,pool5层得到的特征是基础特征,类似于HOG、SIFT,类似于只学习到了人脸共性特征;从fc6和fc7等全连接层中所学习到的特征是针对特征任务特定样本的特征,类似于学习到了分类性别分类年龄的个性特征。
4. 为什么微调时和训练SVM时所采用的正负样本阈值【0.5和0.3】不一致?
微调阶段是由于CNN对小样本容易过拟合,需要大量训练数据,故对IoU限制宽松:Ground Truth+与Ground Truth相交IoU>0.5的建议框为正样本,否则为负样本;
SVM这种机制是由于其适用于小样本训练,故对样本IoU限制严格:Ground Truth为正样本,与Ground Truth相交IoU<0.3的建议框为负样本。
5. 为什么不直接采用微调后的AlexNet CNN网络最后一层SoftMax进行21分类【20类+背景】?
因为微调时和训练SVM时所采用的正负样本阈值不同,微调阶段正样本定义并不强调精准的位置,而SVM正样本只有Ground Truth;并且微调阶段的负样本是随机抽样的,而SVM的负样本是经过hard negative mining方法筛选的;导致在采用SoftMax会使PSACAL VOC 2007测试集上mAP从54.2%降低到50.9%。
6. 对象识别相关
通常对待一个二值化的分类器,它的结果只有两种,Positive 和 Negetive。
比如,有一个汽车分类器,它可以轻松地确认,一个方框里面包含了一辆汽车,那么它肯定就是 Positive。也可以很清楚地确认,如果一个背景方框中没有包含汽车,那么它就是 Negetive。
但是,比较难确认的是,如果一个方框只有一部分与汽车重叠,那么如何标注这个方框呢?
R-CNN 采用的是 IoU 的阈值,这个 threshold 取 0.3,如果一个区域与 Ground tureth 的 IoU 值低于设定的阈值,那么可以讲它看成是 Negetive.
IoU 的 threshold 它不是作者胡乱取值的,而是来自 {0,0.1,0.2,0.3,0.4,0.5} 的数值组合的。而且,这个数值至关重要,如果 threshold 取值为 0.5,mAP 指标直接下降 5 个点,如果取值为 0,mAP 下降 4 个点。
一旦特征抽取成功,R-CNN 会用 SVM 去识别每个区域的类别,但这需要优化。
因为训练的数据太大,不可能一下子填充到电脑内存当中,R-CNN 作者采取了一种叫做 Hard negetive mining 的手段。
7. 可视化
在卷积神经网络中,第一层可以直接用来显示,而且肉眼可视,通常他们是为了捕捉物体边缘,及突出的颜色信息,但越往后的卷积层越抽象,这个时候进行可视化就是一个挑战了。
Zeiler 和 Fergus 提出了一种基于反卷积手段的可视化研究,但 R-CNN 的作者直接提供了一个没有参数的方法,简单直接。
思路是挑选一个特征出来,把它直接当成一个物体分类器,然后计算它们处理不同的候选区域时,activation 的值,这个值代表了特征对这块区域的响应情况,然后将 activation 作为分数排名,取前几位,然后显示这些候选区域,自然也可以清楚明白,这个 feature 大概是什么。
R-CNN 作者将 pool5 作为可视化对象,它的 feature map 是 6x6x255 的规格,可以理解为有 256 个小方块,每个方块对应一个特征。
下面的图表中显示了这以可视化的效果,这里只显示了 256 个特征中的 6 个,每个特征取 activation 值最高的 16 个区域。
在这里插入图片描述
上图应该很明白了,对于同一类特征,activation 相差不大,这也是卷积神经网络能够准确识别物体的直观体现。
8. 框架精简
AlexNet 有 7 层,那么那些层是关键指标呢?哪些层可有可无呢?

pool5 在上一小节已经讨论过了,那么 fc6 和 f7 就成了研究的对象。
fc6 与 pool5 构成全连接,为了计算 feature 它会乘以一个 4096x9216 的权重矩阵,然后在与一组 bias 相加,所以它有 3700 多万的参数。
fc7 是最后一层,它的权重矩阵是 4096x409,它的参数有 1678 万多的参数。
但经过作者在 PASCAL 上不做 fine-tune 处理,直接测试,可以发现 fc7 的意义没有 fc6 大,甚至移除它之后,对于 mAP 结果指标没有影响。
移除 fc7 就表示可以减少将近 1800 万个参数。
更惊喜的事情是,同时移除 fc6 和 fc7 并没有多大的损失,甚至结果还要好一点点。
所以,神经网络最神奇的力量来自卷积层,而不是全连接层。
上面说的是没有 fine-tune 的情况,那么在 fine-tune 的情况是什么呢?
结果证明,fine-tune 后 fc6 与 fc7 提升的效果明显。
所以结论就是,pool5 从 ImageNet 训练集中学习了物体的泛化能力,而能力的提升则是通过特定领域的 fine-tune。
举个例子,神经网络在 ImageNet 数据集中学习到了 100 种猫的特征,而我自己的数据集只有两种猫,经过 fine-tune 训练后,这个神经网络可以更准确识别这两种猫了。
R-CNN 还与其他的特征方法进行了能力比较,作者选取了两种基于 DPM 的方法,DPM ST 和 DPM HSC,结果都证明,R-CNN 要好于它们。
9. 目标检测错误分析
R-CNN 作者采用了 Hoiem 提出的目标检测分析工具,能够直观地揭露错误的模型,作者通过这个工具针对性地进行 fine-tune。
10. bbox回归
bbox 的值其实就是物体方框的位置,预测它就是回归问题,而不是分类问题。
受 DPM 的启发,作者训练了一个线性的回归模型,这个模型能够针对候选区域的 pool5 数据预测一个新的 box 位置。具体细节,作者放在补充材料当中。
11. 反正CNN都是用于提取特征,那么我直接用Alexnet做特征提取,省去fine-tuning阶段可以吗?
这个是可以的,你可以不需重新训练CNN,直接采用Alexnet模型,提取出p5、或者f6、f7的特征,作为特征向量,然后进行训练svm,只不过这样精度会比较低。那么问题又来了,没有fine-tuning的时候,要选择哪一层的特征作为cnn提取到的特征呢?我们有可以选择p5、f6、f7,这三层的神经元个数分别是9216、4096、4096。从p5到p6这层的参数个数是:40969216 ,从f6到f7的参数是40964096。那么具体是选择p5、还是f6,又或者是f7呢?
文献paper给我们证明了一个理论,如果你不进行fine-tuning,也就是你直接把Alexnet模型当做万金油使用,类似于HOG、SIFT一样做特征提取,不针对特定的任务。然后把提取的特征用于分类,结果发现p5的精度竟然跟f6、f7差不多,而且f6提取到的特征还比f7的精度略高;如果你进行fine-tuning了,那么f7、f6的提取到的特征最会训练的svm分类器的精度就会飙涨。
据此我们明白了一个道理,如果不针对特定任务进行fine-tuning,而是把CNN当做特征提取器,卷积层所学到的特征其实就是基础的共享特征提取层,就类似于SIFT算法一样,可以用于提取各种图片的特征,而f6、f7所学习到的特征是用于针对特定任务的特征。打个比方:对于人脸性别识别来说,一个CNN模型前面的卷积层所学习到的特征就类似于学习人脸共性特征,然后全连接层所学习的特征就是针对性别分类的特征了。
12. CNN训练的时候,本来就是对bounding box的物体进行识别分类训练,是一个端到端的任务,在训练的时候最后一层softmax就是分类层,那么为什么作者闲着没事干要先用CNN做特征提取(提取fc7层数据),然后再把提取的特征用于训练svm分类器?
这个是因为svm训练和cnn训练过程的正负样本定义方式各有不同,导致最后采用CNN softmax输出比采用svm精度还低.
事情是这样的,cnn在训练的时候,对训练数据做了比较宽松的标注,比如一个bounding box可能只包含物体的一部分,那么我也把它标注为正样本,用于训练cnn;采用这个方法的主要原因在于因为CNN容易过拟合,所以需要大量的训练数据,所以在CNN训练阶段我们是对Bounding box的位置限制条件限制的比较松(IOU只要大于0.5都被标注为正样本了)。

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

语义分割

区域分类技术是语义分割的标准做法,所以 R-CNN 也可以做语义分割,并且作者拿它跟 O2P 来比较。
在这里插入图片描述
R-CNN 进行语义分割分为三个阶段:
①利用 CPMC 生成候选区域,然后将这些区域调整大小为 227x227,送到神经网络当中,这是 full 阶段,区域中有背景也有前景;
②这个阶段只处理候选区域的前景,将背景用输入的平均值代替,然后背景就变成了 0 ,这个阶段称为 fg;
③full + fg 阶段,将背景和前景简单拼接。

结果怎么样

  1. PASCAL VOC 2010测试集上实现了53.7%的mAP;
  2. PASCAL VOC 2012测试集上实现了53.3%的mAP;
  3. 计算 Region Proposals 和 features 平均所花时间:
    13s / image on a GPU;53s / image on a CPU
  4. R-CNN 在PASCAL VOC 2010-12的表现
    在这里插入图片描述
    上面表格中 UVA 检测系统也采取了相同的候选区域算法,但 R-CNN 的表现要好于它。

还存在什么问题

  1. 很明显,最大的缺点是对一张图片的处理速度慢,这是由于一张图片中由selective search算法得出的约2k个建议框都需要经过变形处理后由CNN前向网络计算一次特征,这其中涵盖了对一张图片中多个重复区域的重复计算,很累赘;
  2. 知乎上有人说R-CNN网络需要两次CNN前向计算,第一次得到建议框特征给SVM分类识别,第二次对非极大值抑制后的建议框再次进行CNN前向计算获得Pool5特征,以便对建议框进行回归得到更精确的bounding-box,这里文中并没有说是怎么做的,博主认为也可能在计算2k个建议框的CNN特征时,在硬盘上保留了2k个建议框的Pool5特征,虽然这样做只需要一次CNN前向网络运算,但是耗费大量磁盘空间;
  3. 训练时间长,虽然文中没有明确指出具体训练时间,但由于采用RoI-centric sampling【从所有图片的所有建议框中均匀取样】进行训练,那么每次都需要计算不同图片中不同建议框CNN特征,无法共享同一张图的CNN特征,训练速度很慢;
  4. 整个测试过程很复杂,要先提取建议框,之后提取每个建议框CNN特征,再用SVM分类,做非极大值抑制,最后做bounding-box回归才能得到图片中物体的种类以及位置信息;同样训练过程也很复杂,ILSVRC 2012上预训练CNN,PASCAL VOC 2007上微调CNN,做20类SVM分类器的训练和20类bounding-box回归器的训练;这些不连续过程必然涉及到特征存储、浪费磁盘空间等问题。
    再补充自己几点总结:(1)数据总共有三个训练用途:CNN fine-tune、SVM training、bounding-box regression training;(2)文中作者还分析了几种可能会对实验结果产生影响的因素,建议看一看,对以后自己想问题很有帮助:三种训练集数量、数据集选择、BB、RP这几种影响因素;(3)文中作者还考虑了R-CNN和Overfeat算法的关系,并留下了如何提速R-CNN这一悬念;(4)用R-CNN来做语义分割,计算features的两种策略:fg和full以及它们如何选择;(5)附录中对于resized操作、Bounding-box regression、数据冗余等有详细介绍,可以看一看;

论文翻译

用于精确物体定位和语义分割的丰富特征层次结构

目录
1.Introduction
2.Object detection with R-CNN
2.1.Module design
2.2.Test-time detection
2.3.Training
2.4.Results on PASCAL VOC 2010-12
2.5.Results on ILSVRC2013 detection
3.Visualization, ablation, and modes of error
3.1.Visualizing learned features

摘要
过去几年,在权威数据集PASCAL上,物体检测的效果已经达到一个稳定水平。效果最好的方法是融合了多种低维图像特征和高维上下文环境的复杂融合系统。在这篇论文里,我们提出了一种简单并且可扩展的检测算法,可以将mAP在VOC2012最好结果的基础上提高30%以上——达到了53.3%。我们的方法结合了两个关键的因素:(1)在候选区域中自下而上使用大型卷积神经网络(CNNs),用以定位和分割物体;(2)当带标签的训练数据不足时,先针对辅助任务进行有监督预训练,再进行特定任务的调优,就可以将性能明显地提升。因为我们把region proposal和CNNs结合起来,所以该方法被称为R-CNN:Regions with CNN features。我们也把R-CNN效果跟OverFeat进行了比较(OverFeat是最近提出的在与我们相似的CNN特征下采用滑动窗口进行目标检测的一种方法),结果发现R-CNN在200个类的ILSVRC2013检测数据集上的性能明显优于OVerFeat。

【Overfeat:改进了Alex-net,并用图像缩放和滑窗方法在test数据集上测试网络;提出了一种图像定位的方法;最后通过一个卷积网络来同时进行分类,定位和检测三个计算机视觉任务,并在ILSVRC2013中获得了很好的结果。】

  1. 介绍
    特征很重要。在过去十年,各类视觉识别任务基本都建立在对SIFT和HOG特征的使用。但如果我们关注一下PASCAL VOC对象检测这个经典的视觉识别任务,就会发现,2010-2012年进展缓慢,取得的微小进步都是通过构建一些集成系统和采用一些成功方法的变种才达到的。
    SIFT和HOG是块方向直方图(blockwise orientation histograms),一种类似大脑初级皮层V1层复杂细胞的表示方法。但我们知道识别发生在多个下游阶段(我们是先看到了一些特征,然后才意识到这是什么东西),也就是说对于视觉识别来说,更有价值的信息,是层次化的,多个阶段的特征。
    Fukushima的“neocognitron”,一种受生物学启发用于模式识别的层次化、移动不变性模型,算是这方面最早的尝试。然而neocognitron缺乏监督学习算法。Lecun等人的工作表明基于反向传播的随机梯度下降(SGD)对训练卷积神经网络(CNNs)非常有效,CNNs被认为是继承自neocognitron的一类模型。
    CNNs在1990年代被广泛使用,但随即便因为SVM的崛起而淡出研究主流。2012年,Krizhevsky等人在ImageNet大规模视觉识别挑战赛(ILSVRC)上的出色表现重新燃起了世界对CNNs的兴趣(AlexNet)。他们的成功在于在120万的标签图像上使用了一个大型的CNN,并且对LeCUN的CNN进行了一些改造(比如ReLU和Dropout Regularization)。
    这个ImangeNet的结果的重要性在ILSVRC2012 workshop上得到了热烈的讨论。提炼出来的核心问题是:ImageNet上的CNN分类结果在何种程度上能够应用到PASCAL VOC挑战的物体检测任务上?
    我们通过连接图像分类和目标检测,回答了这个问题。本论文是第一个说明在PASCAL VOC的物体检测任务上CNN比基于简单类HOG特征的系统有大幅的性能提升。我们主要关注了两个问题:使用深度网络定位物体和在小规模的标注数据集上进行大型网络模型的训练。
    与图像分类不同的是检测需要定位一个图像内的许多物体。一个方法是将框定位看做是回归问题。但Szegedy等人的工作说明这种策略并不work(在VOC2007上他们的mAP是30.5%,而我们的达到了58.5%)。(也就是说将定位问题单纯作为回归解决效果并不好)。另一个可替代的方法是使用滑动窗口探测器,通过这种方法使用CNNs至少已经有20年的时间了,通常用于一些特定的种类如人脸,行人等。为了获得较高的空间分辨率,这些CNNs都采用了两个卷积层和两个池化层。我们本来也考虑过使用滑动窗口的方法,但是由于网络层次更深,输入图片有非常大的感受野(195×195)以及步长(32×32),这使得采用滑动窗口的方法充满挑战。
    我们是通过操作“recognition using regions”范式来解决CNN定位问题的,利用这种方法,在物体检测和语义分割方面都取得了成功。在测试阶段,我们的方法对每张图片都产生大约2000个与类别无关的region proposal,再利用CNN从每个候选区域中提取一个固定长度的特征向量,然后借助专门针对特定类别数据的线性SVM对每个区域进行分类。我们不考虑region的大小,而是使用了一种简单的技术(放射图像变形)将每一个region proposal转换为固定大小的CNN输入。我们不考虑区域(region)的大小,使用放射图像变形的方法来对每个不同形状的region proposal产生一个固定长度的作为CNN输入的特征向量(也就是把不同大小的proposal放到同一个大小)。图1展示了我们方法的全貌并突出展示了一些实验结果。由于我们的系统结合了基于CNNs的region proposals,所以起名为R-CNN:Regions with CNN features。

图1:物体检测系统全貌。(1)向该系统中输入一张图片,(2)系统会自底向上抽取大约2000个候选区域,(3)用大型卷积神经网络(CNN)为每一个proposal都提取一些特征,(4)最后用一些针对特定类的线性SVM对每个region进行分类。R-CNN在PASCAL VOC 2010数据集上获得了53.7%的mAP。作为比较,使用相同的region proposal但结合了空间金字塔和视觉词汇的方法仅有35.1%的mAP。最流行的…mAP为33.4%。

在本文的升级版本中,我们将R-CNN使用在包含200个类的ILSVRC2013检测数据集上,并提供了R-CNN和最近提出的OverFeat检测系统的详细比较。OverFeat使用基于CNN的滑动窗口来执行检测,并且其目前是在ILSVRC203数据集上表现最好的检测方法。我们展示了R-CNN的性能(mAP 31.4%)要远远高于OverFeat(mAP 24.3%)。
检测中面对的第二个挑战是标签数据太少,现在可获得的数据远远不够用来训练一个大型卷积网络。传统方法多是采用无监督预训练,再进行有监督调优。本文的第二个核心贡献是在辅助数据集(ILSVRC)上进行有监督预训练,再在小数据集(PASCAL)上针对特定问题进行调优,这是在训练数据稀少的情况下一个非常有效的训练大型卷积神经网络的方法。我们的实验中,针对检测的调优将mAP提高了8个百分点。调优后,我们的系统在VOC2010上达到了54%的mAP,远远超过mAP为33%的高度优化的基于HOG的可变性部件模型(deformable part model,DPM)。我们也向读者指出,同时期Donahue等人工作说明了Krizhhevsky的CNN(不包含微调)可以被用于黑盒特征提取器,其在包括场景分类、fine-grained sub-categorization和domain adapataion等的一些识别任务中都取得了出色的表现。

【DPM:多尺度形变部件模型,连续获得07-09的检测冠军,2010年其作者Felzenszwalb Pedro被VOC授予”终身成就奖”。DPM把物体看成了多个组成的部件(比如人脸的鼻子、嘴巴等),用部件间的关系来描述物体,这个特性非常符合自然界很多物体的非刚体特征。DPM可以看做是HOG+SVM的扩展,很好的继承了两者的优点,在人脸检测、行人检测等任务上取得了不错的效果,但是DPM相对复杂,检测速度也较慢,从而也出现了很多改进的方法。】

我们的系统也很高效。都是小型矩阵向量相乘和贪婪非极大值抑制这些特定类别的计算。这个计算特性源自于特征在不同类别之间的共享(对于不同类别,CNNC提取到的特征是一样的),这比之前使用的区域特征少了两个数量级的维度。
分析我们方法中的一些失败的案例,对于进一步提高也有着关键作用,所以我们借助Hoiem等人的定位分析工具做实验结果的报告和分析。分析结果是我们发现主要的错误是因为误定位,而使用了bounding box回归后,可以有效降低这个错误。作为该分析的一个立即寻猎,我们证明了一个简单的bounding-box回归方法很大程度上减少了误定位(误定位是区域错误模型)。
介绍技术细节之前,我们要说明,由于R-CNN是在region上进行操作,所以自然能够扩展到语义分割任务上。经过一些小调整,我们也可以在PASCAL VOC数据集上为分割任务得到一个好结果(在VOC 2011测试集上的平均语义分割精确率为47.9%)。

【HOG-like特征的一个优点是简单性:能够很容易明白提取到的特征是什么,那我们能可视化出CNNC提取到的特征吗?全连接层有超过5千4百万的参数值,这是关键吗?这些都不是,我们将CNN切断,会发现,移除掉其中94%的参数,精度只会下降一点点。相反,通过网络中的探测单元我们可以看到卷积层学习了一组丰富的特性。(图3)】

  1. 用RCNN做物体检测
    我们的物体检测系统有三个模块构成。第一个,产生与类别无关的region proposal。这些region proposal定义了一个候选检测区域的集合;第二个是一个大型卷积神经网络,用于从每个区域抽取特定大小的特征向量;第三个是一些指定类别的线性SVM。本部分,将展示每个模块的设计,并介绍他们的测试阶段的用法,以及参数是如何学习的细节,最后给出在PASCAL VOC 2010-12和ILSVRC2013上的检测结果。

2.1模块设计
区域推荐(region proposal) 。近来有很多研究都提出了产生类别无关区域推荐的方法。比如: objectness(物体性),selective search(选择性搜索),category-independent object proposals(类别无关物体推荐),constrained parametric min-cuts(受限参最小剪切, CPMC),multi-scal combinatorial grouping(多尺度联合分组),以及Ciresan等人的方法,将CNN用在规律空间块裁剪上以检测有丝分裂细胞,也算是一种特殊的区域推荐类型。由于R-CNN对特定区域算法是不关心的,所以我们采用了选择性搜索以方便和前面的工作进行可控的比较。

特征提取(Feature extraction) 。我们使用Krizhevsky等人所描述的CNN的一个Caffe实现版本对每个region proposal抽取一个4096维度的特征向量。把一个输入为277277大小的图片,通过五个卷积层和两个全连接层进行前向传播,最终得到特征向量。读者可以参考AlexNet获得更多的网络架构细节。
为了计算region proposal的特征,我们首先要对图像进行转换,使得它符合CNNC的输入(架构中的CNNC只能接受固定大小:277
277)。这个变换有很多办法,我们使用了最简单的一种。无论候选区域是什么尺寸和宽高比,我们都把候选框变形成想要的尺寸。在变形之前,我们现在候选框周围加上16的padding,再进行各向异性缩放。 这种形变使得mAp提高了3到5个百分点。在补充材料中,作者对比了各向异性和各向同性缩放缩放方法。图2显示了…

2.2测试阶段的物体检测
测试阶段,在测试图像上使用selective search抽取2000个推荐区域(实验中,我们使用了选择性搜索的快速模式)。然后变形每一个proposal,再通过CNN前向传播计算出特征。然后我们使用对每个类别训练出的SVM给整个特征向量中的每个类别单独打分。然后给出一张图像中所有的打分区域,然后使用NMS(每个类别是独立进行的),过滤掉一些和高分区域的IOU大于阈值的候选框。(对每一个框使用每个类别的SVM进行打分)
运行时分析。两个特性让检测变得很高效。首先,所有的CNN参数都是跨类别共享的。其次,通过CNN计算的特征向量相比其他通用方法得出的维度较低。(比如spatial pyramids with bag-of-visual-word encodings)。还有UVA检测系统得出的特征比我们的要多两个数量级(360k vs 4k)。
这种共享的结果就是计算region proposal特征的耗时可以分摊到所有类别的头上(GPU:每张图13s,CPU:每张图53s)。唯一的和具体类别有关的计算是特征、SVM权重以及NMS之间的点积。实践中,所有的点积都可以批量化成一个单独矩阵间运算。特征矩阵的典型大小是2000×4096,SVM权重的矩阵是4096xN,其中N是类别的数量。
分析表明R-CNN不需要借用近似技术(如hashing)就可以扩展到上千个类别。即使有10万个类别,矩阵乘法在现代多核CPU上运算只需要10s而已。但这种高效不仅仅是因为使用了region proposal和shared features。由于较高维度的特征,UVA系统存储100k linear predictors需要134GB的内存,而我们只要1.5GB,比我们高了两个数量级。
有趣的是R-CCN和最近Dean等人使用DPMs和hashing做检测的工作相比,他们用了1万个干扰类, 每五分钟可以处理一张图片,在VOC2007上的mAP能达到16%。我们的方法1万个检测器由于没有做近似,可以在CPU上一分钟跑完,达到59%的mAP(3.2节)。

2.3训练
有监督的预训练 。我们在大型辅助训练集ILSVRC2012分类数据集(没有约束框数据)上分别预训练了CNN。预训练采用了Caffe的CNN库。总体来说,我们的CNN十分接近krizhevsky等人的网络的性能,在ILSVRC2012分类验证集在top-1错误率上比他们高2.2%。差异主要来自于训练过程的简化。
特定领域的参数调优 。为了让我们的CNN适应新的任务(即检测任务)和新的领域(变形后的推荐窗口)。我们只使用变形后的region proposal对CNN参数进行SGD训练。我们替换掉了ImageNet专用的1000-way分类层,换成了一个随机初始化的2(N+1)-way分类层,(其中N是物体类别数,1代表背景),而卷积部分都没有改变。在VOC和ILSVRC2013数据集上,N分别等于20和200。我们对待所有的region proposal,如果它和真实标注的框的IoU>= 0.5就认为是正例,否则就是负例。SGD开始的learning rate为0.001(是初始化预训练时的十分之一),这使得调优得以有效进行而不会破坏初始化的成果。每轮SGD迭代,我们统一使用32个正例窗口(跨所有类别)和96个背景窗口,即每个mini-batch的大小是128。另外我们倾向于采样正例窗口,因为和背景相比他们很稀少。
目标种类分类器 。思考一下检测汽车的二分类器。很显然,一个图像区域紧紧包裹着一辆汽车应该就是正例。同样的,没有汽车的就是背景区域,也就是负例。较为不明确的是怎样标注哪些只和汽车部分重叠的区域。我们使用IoU重叠阈值来解决这个问题,低于这个阈值的就是负例。这个阈值我们选择了0.3,它是在验证集上基于{0, 0.1, … 0.5}通过网格搜索得到的。我们发现认真选择这个阈值很重要。如果设置为0.5,mAP会降低5个点。设置为0,就会降低4个点。正例的严格定义就是每个类的真实边框。
  一旦特征提取出来,并应用标签数据,我们优化了每个类的线性SVM。由于训练数据太大,难以装进内存,我们选择了标准的hard negative mining method。高难负例挖掘算法收敛很快,实践中只要在所有图像上经过一轮训练,mAP就可以基本停止增加了。
附录B中,我们讨论了,为什么在fine-tunning和SVM训练这两个阶段,我们定义的正负样例是不同的。我们也会讨论为什么训练一个分类器是必要的,而不只是简单地使用来自调优后的CNN的最终fc8层的输出。

【难负例挖掘算法,用途就是正负例数量不均衡,而负例分散代表性又不够的问题,hard negative就是每次把那些顽固的棘手的错误,再送回去继续练,练到你的成绩不再提升为止.这一个过程就叫做’hard negative mining‘】
【fine-tunning阶段是由于CNN对小样本容易过拟合,需要大量训练数据,故对IoU限制宽松: IoU>0.5的建议框为正样本,否则为负样本; SVM这种机制是由于其适用于小样本训练,故对样本IoU限制严格:Ground Truth为正样本,与Ground Truth相交IoU<0.3的建议框为负样本。】
【为什么单独训练了一个SVM而不是直接用softmax,作者提到,刚开始时只是用了ImageNet预训练了CNN,并用提取的特征训练了SVMs,此时用正负样本标记方法就是前面所述的0.3,后来刚开始使用fine-tuning时,也使用了这个方法,但是发现结果很差,于是通过调试选择了0.5这个方法,作者认为这样可以加大样本的数量,从而避免过拟合。然而,IoU大于0.5就作为正样本会导致网络定位准确度的下降,故使用了SVM来做检测,全部使用ground-truth样本作为正样本,且使用非正样本的,且IoU大于0.3的“hard negatives”,提高了定位的准确度】

2.4 在PASCAL VOC 2010-12上的结果
按照PASCAL VOC的最佳实践步骤,我们在VOC2007的数据集上验证了我们所有的设计思想和参数处理,我们在VOC2012上训练和优化了SVMs,最终结果在VOC 2010-12的数据库,我们在评估服务器上提交了两个结果(一个是有bunding box regression,一个没有)。
表1展示了在VOC2010的结果,我们将自己的方法同四种先进基准方法作对比,其中包括SegDPM,这种方法将DPM检测子与语义分割系统相结合并且使用附加的inter-detector的环境和图片检测器。更加恰当的比较是同Uijling的UVA系统比较,因为我们的方法同样基于候选框算法。对于候选区域的分类,他们通过构建一个四层的金字塔,并且将之与SIFT模板结合,SIFT为扩展的OpponentSIFT和RGB-SIFT描述子,每一个向量被量化为4000-word的codebook。分类任务由一个交叉核的SVM承担,对比这种方法的多特征方法,非线性内核的SVM方法,我们在mAP达到一个更大的提升,从35.1%提升至53.7%,而且速度更快。我们的方法在VOC2011/2012测试集上达到了相似的检测效果mAP53.3%。

  1. 可视化、消融、模型的错误
    3.1 可视化学习到的特征
    直接可视化第一层filters非常容易理解,它们主要捕获方向性边缘和对比色。难以理解的是后面的层。Zeiler and Fergus提出了一种可视化的很棒的反卷积办法。我们则使用了一种简单的非参数化方法,直接展示网络学到的东西。这个想法是单一输出网络中一个特定单元(特征),然后把它当做一个正确类别的物体检测器来使用。
    方法是这样的,先计算所有抽取出来的推荐区域(大约1000万),计算每个区域所导致的对应单元的激活值,然后按激活值对这些区域进行排序,然后进行最大值抑制,最后展示分值最高的若干个区域。这个方法让被选中的单元在遇到他想激活的输入时“自己说话”。我们避免平均化是为了看到不同的视觉模式和深入观察单元计算出来的不变性。
    我们可视化了第五层的池化层pool5,是卷积网络的最后一层,feature_map(卷积核和特征数的总称)的大小是6 x 6 x 256 = 9216维。忽略边界效应,每个pool5单元拥有195×195的感受野,输入是227×227。pool5中间的单元,几乎是一个全局视角,而边缘的单元有较小的带裁切的支持。
    图4的每一行显示了对于一个pool5单元的最高16个激活区域情况,这个实例来自于VOC 2007上我们调优的CNN,这里只展示了256个单元中的6个(附录D包含更多)。我们看看这些单元都学到了什么。第二行,有一个单元看到狗和斑点的时候就会激活,第三行对应红斑点,还有人脸,当然还有一些抽象的模式,比如文字和带窗户的三角结构。这个网络似乎学到了一些类别调优相关的特征,这些特征都是形状、纹理、颜色和材质特性的分布式表示。而后续的fc6层则对这些丰富的特征建立大量的组合来表达各种不同的事物。

3.2 消融研究(Ablation studies)
【ablation study 就是为了研究模型中所提出的一些结构是否有效而设计的实验。如你提出了某某结构,但是要想确定这个结构是否有利于最终的效果,那就要将去掉该结构的网络与加上该结构的网络所得到的结果进行对比,这就是ablation study。也就是(控制变量法)】

没有调优的各层性能。
为了理解哪一层对于检测的性能十分重要,我们分析了CNN最后三层的每一层在VOC2007上面的结果。Pool5在3.1中做过剪短的表述。最后两层下面来总结一下。
  fc6是一个与pool5连接的全连接层。为了计算特征,它和pool5的feature map(reshape成一个9216维度的向量)做了一个4096×9216的矩阵乘法,并添加了一个bias向量。中间的向量是逐个组件的半波整流(component-wise half-wave rectified)【Relu(x<- max(0,x))】
fc7是网络的最后一层。跟fc6之间通过一个4096×4096的矩阵相乘。也是添加了bias向量和应用了ReLU。
  我们先来看看没有调优的CNN在PASCAL上的表现,没有调优是指所有的CNN参数就是在ILSVRC2012上训练后的状态。分析每一层的性能显示来自fc7的特征泛化能力不如fc6的特征。这意味29%的CNN参数,也就是1680万的参数可以移除掉,而且不影响mAP。更多的惊喜是即使同时移除fc6和fc7,仅仅使用pool5的特征,只使用CNN参数的6%也能有非常好的结果。可见CNN的主要表达力来自于卷积层,而不是全连接层。这个发现提醒我们也许可以在计算一个任意尺寸的图片的稠密特征图(dense feature map)时使仅仅使用CNN的卷积层。这种表示可以直接在pool5的特征上进行滑动窗口检测的实验。
  
调优后的各层性能。
我们来看看调优后在VOC2007上的结果表现。提升非常明显,mAP提升了8个百分点,达到了54.2%。fc6和fc7的提升明显优于pool5,这说明pool5从ImageNet学习的特征通用性很强,在它之上层的大部分提升主要是在学习领域相关的非线性分类器。

对比其他特征学习方法。相当少的特征学习方法应用与VOC数据集。我们找到的两个最近的方法都是基于固定探测模型。为了参照的需要,我们也将基于基本HOG的DFM方法的结果加入比较
  第一个DPM的特征学习方法,DPM ST,将HOG中加入略图表征的概率直方图。直观的,一个略图就是通过图片中心轮廓的狭小分布。略图表征概率通过一个被训练出来的分类35*35像素路径为一个150略图表征的的随机森林方法计算
  第二个方法,DPM HSC,将HOG特征替换成一个稀疏编码的直方图。为了计算HSC,在每个像素上使用一个学习到的1007 * 7 像素(灰度空间)原子求解稀疏码激活,(原文是atoms,应该是这么翻译吧)由此产生的激活以三种方式(全波和半波)整流,空间池化,l2标准化,然后进行幂运算。
  所有的RCNN变种算法都要强于这三个 DPM方法(表2, 8-10行),包括两种特征学习的方法与最新版本的DPM方法比较,我们的mAP要多大约20个百分点,61%的相对提升。略图表征与HOG现结合的方法比单纯HOG的性能高出2.5%,而HSC的方法相对于HOG提升四个百分点(当内在的与他们自己的DPM基准比价,全都是用的非公共DPM执行,这低于开源版本)。这些方法分别达到了29.1%和34.3%。

3.3 检测错误分析
为了揭示出我们方法的错误之处, 我们使用Hoiem提出的优秀的检测分析工具,来理解调参是怎样改变他们,并且观察相对于DPM方法,我们的错误形式。这个分析方法全部的介绍超出了本篇文章的范围,我们建议读者查阅文献21来了解更加详细的介绍(例如“normalized AP”的介绍),由于这些分析是不太有关联性,所以我们放在图4和图5的题注中讨论。

3.4 Bounding-box回归
基于错误分析,我们使用了一种简单的方法减小定位误差。受到DPM[17]中使用的约束框回归训练启发,我们训练了一个线性回归模型在给定一个选择区域的pool5特征时去预测一个新的检测窗口。详细的细节参考附录C。表1、表2和图4的结果说明这个简单的方法,修复了大量的错位检测,提升了3-4个百分点。

Bounding-Box的具体内容可以参考我的另一篇文章,那里写的比较详细。
链接:边框回归:BoundingBox-Regression

  1. 语义分割
    区域分类是语义分割的标准技术,这使得我们很容易将R-CNN应用到PASCAL VOC分割任务的挑战。为了和当前主流的语义分割系统(称为O2P,second-order pooling[4])做对比,我们使用了一个开源的框架。O2P使用CPMC针对每张图片产生150个区域推荐,并预测每个区域的品质,对于每个类别,进行支撑向量回归(support vector regression,SVR)。他们的方法很高效,主要得益于CPMC区域的品质和多特征类型的强大二阶池化(second-second pooling,SIFT和LBP的增强变种)。我们也注意到Farabet等人[16]将CNN用作多尺度逐像素分类器,在几个高密度场景标注数据集(不包括PASCAL)上取得了不错的成绩。
    我们学习[2,4],将Hariharan等人提供的额外标注信息补充到PASCAL分割训练集中。设计选择和超参数都在VOC 2011验证集上进行交叉验证。最后的测试结果只执行了一次。
      
    用于分割的CNN特征。
    为了计算CPMC区域上的特征,我们执行了三个策略,每个策略都先将矩形窗口变形到227×227大小。第一个策略完全忽略区域的形状(full ignore),直接在变形后的窗口上计算CNN特征,就和我们检测时做的一样。但是,这些特征忽略了区域的非矩形形状。两个区域也许包含相似的约束框却几乎没有重叠。因此,第二个策略(fg,foreground)只计算前景遮罩(foreground mask)的CNN特征,我们将所有的背景像素替换成平均输入,这样减除平均值后他们就会变成0。第三个策略(full+fg),简单的并联全部(full)特征和前景(fg)特征;我们的实验验证了他们的互补性。

在VOC 2011上的结果。
表3显示了与O2P相比较的VOC 2011验证集的结果(每个类别的计算结果见补充材料)。在每个特征计算策略中,FC6总是优于FC7,下面就针对fc6进行讨论。fg策略略优于full,表明掩蔽区域形状提供了更强的信号,匹配我们的直觉。然而,full+fg的平均精度为47.9%,比fg优4.2%(也稍优于O2P),这表明即使提供了FG特征,由full特征提供的上下文也是有很多信息。值得注意的是,训练20个SVR,在我们的full+fg特征在单核上需要1小时,而在O2P特征则需要10个小时。
在表4中,我们给出了VOC 2011测试集上的结果。比较我们的最佳执行方法,fc6(full+fg),对抗两个强大的baselines。我们的方法在21个类别中的11个达到最高的分割精度,最高的总体分割精度为47.9%,平均跨类别(但可能与O2P结果在任何合理的误差范围内)。通过微调可能会取得更好的成绩。

  1. 结论
    最近几年,物体检测陷入停滞,表现最好的检测系统是复杂的将多低层级的图像特征与高层级的物体检测器环境与场景识别相结合。本文提出了一种简单并且可扩展的物体检测方法,达到了VOC 2012数据集相对之前最好性能的30%的提升。
    我们取得这个性能主要通过两个方面:第一是应用了自底向上的候选框训练的高容量的卷积神经网络进行定位和分割物体。另外一个是使用在标签数据匮乏的情况下训练大规模神经网络的一个方法。我们展示了在有监督的情况下使用丰富的数据集(图片分类)预训练一个网络作为辅助性的工作是很有效的,然后采用稀少数据(检测)去调优定位任务的网络。我们猜测“有监督的预训练+特定领域的调优”这一范式对于数据稀少的视觉问题是很有效的。
    最后,我们注意到能得到这些结果,将计算机视觉中经典的工具和深度学习(自底向上的区域候选框和卷积神经网络)组合是非常重要的。而不是违背科学探索的主线,这两个部分是自然而且必然的结合。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不吃饭就会放大招

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值