R-CNN 论文学习笔记

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


R-CNN 模块设计

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

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

模型分析

  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)

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

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

  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 | 边界框回归

目的

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

原理

所要实现的算法:

输入是

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=Pwdx(P)

    Δ

    y

    =

    P

    h

    d

    y

    (

    P

    )

    \Delta y = P_h d_y(P)

    Δy=Phdy(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=Pwdx(P)+PxG^y=Phdy(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=Pwexp(dw(P))G^h=Phexp(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)=wTϕ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^argminiN(tiw^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=(GxPx)/Pwty=(GyPy)/Phtw=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 维的 ↩︎

版权声明:本文为CSDN博主「Orphea」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_43728353/article/details/122521215

Orphea

我还没有学会写个人说明!

暂无评论

发表评论

相关推荐