R-CNN 论文学习笔记

R-CNN 论文详解(学习笔记)


R-CNN 模块设计

R-CNN 论文学习笔记

R-CNN 目标检测系统包含以下模块。

  • Selective Search:生成区域建议 region proposals。
  • CNN(AlexNet):从每个区域提取固定长度的特征向量。
  • 一系列 class-specific 线性 SVM:对于每一类别,给出 CNN 提取的特征向量的得分。
  • Bounding Box Regression 边界框回归:提高定位精度。

模型分析

R-CNN 论文学习笔记

  1. 对输入图片应用 selective search 算法

    提取了大约 2000 个区域建议。所有实验均在 selective search 的 fast mode 下进行。

  2. 缩放转换每个区域建议的图像

    因为 CNN 要求输入为固定大小(227*227 pixels),因此需要对第一步得到的区域建议图片(A)进行缩放转换。

    评估了两种转换方式:

    • 各向异性缩放

      不管图片的长宽比,直接拉伸扭曲成 227*227 pixels,如图(D)。

    • 各向同性放缩

      • 将图片边界框扩展成正方形,裁剪后放缩到 227*227 pixels。若边界框延伸至图片外,则用图片均值填充,如图(B)。
      • 将图片裁剪出来,用图片均值填充背景形成正方形,然后放缩到 227*227 pixels,如图(C)。

    每种转换方式中,也考虑了加入原图周围语义背景()。在变换后的坐标系中, p p p 定义为围绕区域建议图片的边界尺寸。 如图中,1,3行是 p = 0 p=0 p=0 pixels,2,4行是 p = 16 p=16 p=16 pixels。

    最终选定的方式为:带有 context padding 操作( p = 16 p=16 p=16 pixels )的各向异性缩放表现最好。(高 3-5mAP points)

    R-CNN 论文学习笔记

  3. 卷积神经网络提取特征

    作者最早应用的是 AlexNet(后来采用了 VGGNet 有了更好的表现)。对第二步扭曲放缩后的图像应用卷积神经网络进行特征提取,得到长度为 4096 的特征向量。(这里的 CNN 去掉了最后的 softmax 层。)

    R-CNN 论文学习笔记

  4. 应用SVMs进行分类

    应用一系列 class-specific 的线性 SVM 对特征向量进行分类,给出该区域建议图片每一类的得分。

    当原始图像的所有区域建议都经过上述步骤,得到对应分数后,应用贪婪非极大值抑制(greedy non-maximum suppression,NMS)去除冗余的候选边界框。

  5. 边界框回归

    应用 SVMs 进行分类后,使用对应类别的边界框回归预测该区域建议的边界框偏移值,提高定位精度。


数据处理过程

输入图像为 3*227*227 的张量,经过 Selective Search 提取出 ~2000 个区域建议,针对每个区域建议,由 CNN 得到长度为 4096 的特征向量(saved to disk)。

于是,对于一张输入图片,假设有 2000 个候选区域,则有由 2000 个特征向量组成的 2000*4096 的“特征矩阵”,最后需要对这些特征向量使用二分类线性 SVM 进行分类。

假设一共有 20 类物体需要检测,那么共有 20 个 SVM 分别负责每一类的分类(每个 SVM 输出特征向量对应该类的得分),每个 SVM 对所有的 2000 个特征向量都判断一次,最终得到 2000*20 的得分(score)矩阵:每一行代表一个候选区域建议,每一列代表对应该类的得分。

然后分别对 2000*20 矩阵的每一列(每一类别)进行贪婪非极大值抑制(NMS),过滤去除冗余的重叠区域建议边界框,留下该列(该类别)中得分最高、且较少重叠的区域建议。


训练过程

  1. CNN 微调(迁移学习)

    • 网络架构:采用在 ImageNet 上训练过的 AlexNet 作为预训练卷积神经网络,有 5 层卷积层,2 层全连接层,将该网络最后的 1000-way 分类输出层替换成随机初始化的 21-way 分类输出层(VOC 数据集:20 类物体 + 背景类)。
    • 数据集:将从 Selective Search 生成的区域建议图像,通过放缩变换成 227*227 尺寸的图片送入 CNN。
    样本 描述
    正例 和某个 ground-truth 边界框的交并比重叠最大的区域建议 region proposal ,若该重叠 IoU >= 0.5,则将此区域建议作为这个 ground-truth 类别的正样本。
    负例 某个区域建议 region proposal 和所有 ground-truth 边界框的交并比重叠最大都 IoU < 0.5 的,作为这个 ground-truth 类别的正样本。
    • 训练设置
      • 优化算法:随机梯度下降 SGD
      • 批量大小:每一轮 SGD 迭代,都在数据集上均匀抽样 32 个正例(覆盖所有类别) + 96 个负例(背景),构建 128 大小的 mini-batch。因为比起背景负例,正例实在是太少了(占比远小于 1:3),所以更偏向于正例采样(1:3),来防止训练的模型偏向预测为负例(Hard Negative Mining method)。
      • 学习率:从 0.001 (初始预训练学习率的 1/10)开始训练,能够实现网络的微调,同时不会对初始状态有太大改变和影响。
  2. SVM 分类器

    • 针对每一个类别,分别训练一个线性 SVM 分类器,对于 VOC 数据集,总共需要训练 20 个 SVM。
    • 数据集:紧包物体的区域是正例,与物体无关的背景是负例,那么如何标记一个只有部分覆盖目标物体的区域是正例还是负例?为解决该问题,设定一个 IoU overlap threshold 交并重叠阈值,某区域和 ground-truth 的 IoU 低于此阈值的就是负例。通过在验证集上的网格搜索{0,0.1,…,0.5},选取 overlap threshold 为 0.3 最佳。(要小心选取 threshold,将其设为 0.5 时, mAP 下降了 5 个点。类似的,设成 0 下降了 4 个点。)
    • Hard Negative Mining method 难负例挖掘 12:难负例挖掘很快收敛,一轮 epoch 之后 mAP 就停止上升了。
  1. 边界框回归器训练

原理与问题

Bounding-Box Regression | 边界框回归

R-CNN 论文学习笔记

目的

红色框为 Selective Search 提取的Region Proposal,即便红色的框被分类器识别为飞机,但由于红色的框定位不准(IoU<0.5),那么这张图相当于没有正确的检测出飞机。于是需要对红框进行调整,使之与 ground truth 更接近,提高定位精度。

R-CNN 论文学习笔记

原理

所要实现的算法:

输入是 N N N 对训练组合 { ( P i , G i ) } i = 1 , ⋯   , N \{(P^i,G^i)\}_{i=1,\cdots,N} {(Pi,Gi)}i=1,⋯,N​,其中 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 i P^i Pi 边界框的中心像素坐标、宽度、高度。除非特殊强调,省略上标 i i i。

G G G 代表 ground-truth 边界框,以相同的方式定义: G = ( G x , G y , G w , G h ) G=(G_x,G_y,G_w,G_h) G=(Gx​,Gy​,Gw​,Gh​)。

算法目标是学习一种转换,能够将区域建议的 P P P 框映射到 G G G 框,即 f ( P ) = G ^ ≈ G f(P)= \hat{G}\approx G f(P)=G^≈G.

使用四个函数来参数化该变换, 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 边界框中心的尺度不变的转换,作用是位置平移,而后两个是对 P P P 边界框宽度和高度 log-space 的转换,作用是尺度缩放。

  1. 先做平移 ( Δ x , Δ y ) (\Delta x, \Delta y) (Δx,Δy), Δ x = P w d x ( P ) \Delta x = P_w d_x(P) Δx=Pw​dx​(P), Δ y = P h d y ( P ) \Delta y = P_h d_y(P) Δy=Ph​dy​(P) :
    G ^ x = P w d x ( P ) + P x G ^ y = P h d y ( P ) + P y \hat{G}_x = P_w d_x(P)+P_x\\ \hat{G}_y = P_h d_y(P)+P_y\\ G^x​=Pw​dx​(P)+Px​G^y​=Ph​dy​(P)+Py​
  2. 再做尺度缩放 ( S w , S h ) (S_w, S_h) (Sw​,Sh​), S w = e x p ( d w ( P ) ) S_w = \mathrm{exp}(d_w(P)) Sw​=exp(dw​(P)), S h = e x p ( d h ( P ) ) S_h = \mathrm{exp}(d_h(P)) Sh​=exp(dh​(P)):
    G ^ w = P w e x p ( d w ( P ) ) G ^ h = P h e x p ( d h ( P ) ) \hat{G}_w = P_w \mathrm{exp}(d_w(P))\\ \hat{G}_h = P_h \mathrm{exp}(d_h(P))\\ G^w​=Pw​exp(dw​(P))G^h​=Ph​exp(dh​(P))

学习到这些函数后,我们可以通过上述变换,将一个输入的提议 P P P 框,转换为预测的 ground-truth box G ^ \hat{G} G^ 框。

只有当输入的 region proposal 与 ground truth 偏离较小时(RCNN设置是 IOU>0.6 ),可以认为这种变换是一种线性变换,那么我们就可以使用线性回归来建模对窗口进行微调;当 region proposal 与 ground truth 偏离较大时,该问题变为了复杂的非线性问题,无法用线性回归建模。

于是,每个 d ⋆ ( P ) d_\star(P) d⋆​(P)都是区域建议 P P P 的 pool_53 输出特征向量 ϕ 5 ( P ) \phi_5(P) ϕ5​(P) 的线性函数。( ⋆ \star ⋆ 表示 x , y , w , h x, y, w, h x,y,w,h,即每个变换对应一个函数。)

注:这里隐含假定了 ϕ 5 ( P ) \phi_5(P) ϕ5​(P) 依赖于图像数据,个人理解, ϕ 5 ( P ) \phi_5(P) ϕ5​(P) 是该区域建议的 pool_5 的特征图,只与图像本身有关,与 ( P x , P y , P w , P h ) (P_x,P_y,P_w,P_h) (Px​,Py​,Pw​,Ph​) 的值是无关的。

注意,这里边界框回归的输入并非 P = ( P x , P y , P w , P h ) P=(P_x,P_y,P_w,P_h) P=(Px​,Py​,Pw​,Ph​),而是区域建议图片对应的 pool_5 输出特征向量。

因此我们有 d ⋆ ( P ) = w ⋆ T ϕ 5 ( P ) d_\star(P)=\boldsymbol{\mathrm{w}}^\mathrm{T}_\star\phi_5(P) d⋆​(P)=w⋆T​ϕ5​(P),这里 w ⋆ \boldsymbol{\mathrm{w}_\star} w⋆​ 是一个可学习的模型参数向量。通过正则最小二乘目标(岭回归)优化学习 w ⋆ \boldsymbol{\mathrm{w}_\star} w⋆​ :

w ⋆ = arg ⁡ min ⁡ w ^ ⋆ ∑ i N ( t ⋆ i − w ^ ⋆ T ϕ 5 ( P i ) ) 2 + λ ∥ w ^ ⋆ ∥ 2 \mathbf{w}_{\star}=\underset{\hat{\mathbf{w}} \star}{\arg \min } \sum_{i}^{N}\left(t_{\star}^{i}-\hat{\mathbf{w}}_{\star}^{\mathrm{T}} \phi_{5}\left(P^{i}\right)\right)^{2}+\lambda\left\|\hat{\mathbf{w}}_{\star}\right\|^{2} w⋆​=w^⋆argmin​i∑N​(t⋆i​−w^⋆T​ϕ5​(Pi))2+λ∥w^⋆​∥2

训练该回归时,对于训练组合 ( P , G ) (P, G) (P,G) 的回归目标为平移变换和尺度缩放 ( t x , t y , t w , t h ) (t_x,t_y,t_w,t_h) (tx​,ty​,tw​,th​)。

t x = ( G x − P x ) / P w t y = ( G y − P y ) / P h t w = l o g ( G w / P w ) t h = l o g ( G h / P h ) t_x = (G_x-P_x)/P_w\\ t_y = (G_y-P_y)/P_h\\ t_w = \mathrm{log}(G_w/P_w)\\ t_h = \mathrm{log}(G_h/P_h)\\ tx​=(Gx​−Px​)/Pw​ty​=(Gy​−Py​)/Ph​tw​=log(Gw​/Pw​)th​=log(Gh​/Ph​)

对每一类的目标都训练一个 bouding-box 回归器,最后学习到一系列 class-specific 的 边界框回归器 (VOC 数据集下就是 20 个回归器)。

实现边界框回归时,有两个微妙的问题。

  • 正则化很重要,这里,基于验证集设置 λ = 1000 \lambda=1000 λ=1000。
  • 当选择使用哪个训练对 ( P , G ) (P,G) (P,G) 时一定要小心,要挑选靠近 ground-truth box 的区域建议,当一个 P P P 与 G G G 有最大的 IoU 重叠且该 IoU 大于某一个阈值时 (文中设为 0.6),我们才指定这个 P P P “靠近” G G G (近似该回归问题为线性回归),而未指定的区域建议都被丢弃。

相关问题:相对坐标、对数变换、近似线性变换可参考这篇博客

测试时,只对每个区域建议框使用一次边界框回归,因为发现反复预测并不能改善结果。

为什么采用 SVM 进行分类,而不是简单应用网络最后一层 fc_8 的 softmax 回归分类器?

经过实验尝试,发现在 VOC2007 数据集上,简单应用网络最后一层的 softmax 回归进行分类,mAP 从 54.2降到 50.9。R-CNN 作者认为,精度下降是因为几个因素,包括微调网络时使用的正例并不强调精确位置,而且 softmax 分类器是被随机采样的负例训练的,而在训练 SVM 时用的则是 hard negatives 的子集。而该结果显示,如果微调后不另外训练 SVM 是有可能保持相同精度水平的,猜测可能需要在微调时加入更多调整来消除性能差距,如果真的可以,这将大大简化和加快 R-CNN 的训练。


  1. Object detection with discriminatively trained part based models ↩︎

  2. Example-based learning for viewbased human face detection. ↩︎

  3. pool_5 是 AlexNet 最后一个卷积层之后的最大池化层 max-pool layer,pool_5 输出的特征图是 6*6*256=9216 维的 ↩︎

上一篇:支持向量机(SVM)


下一篇:[論文筆記] Partial Convolution (未完成)