文章目录[隐藏]
R-CNN 论文详解(学习笔记)
R-CNN 模块设计
R-CNN 目标检测系统包含以下模块。
- Selective Search:生成区域建议 region proposals。
- CNN(AlexNet):从每个区域提取固定长度的特征向量。
- 一系列 class-specific 线性 SVM:对于每一类别,给出 CNN 提取的特征向量的得分。
- Bounding Box Regression 边界框回归:提高定位精度。
模型分析
-
对输入图片应用 selective search 算法
提取了大约 2000 个区域建议。所有实验均在 selective search 的 fast mode 下进行。
-
缩放转换每个区域建议的图像
因为 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)
-
-
卷积神经网络提取特征
作者最早应用的是 AlexNet(后来采用了 VGGNet 有了更好的表现)。对第二步扭曲放缩后的图像应用卷积神经网络进行特征提取,得到长度为 4096 的特征向量。(这里的 CNN 去掉了最后的 softmax 层。)
-
应用SVMs进行分类
应用一系列 class-specific 的线性 SVM 对特征向量进行分类,给出该区域建议图片每一类的得分。
当原始图像的所有区域建议都经过上述步骤,得到对应分数后,应用贪婪非极大值抑制(greedy non-maximum suppression,NMS)去除冗余的候选边界框。
-
边界框回归
应用 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),过滤去除冗余的重叠区域建议边界框,留下该列(该类别)中得分最高、且较少重叠的区域建议。
训练过程
-
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)开始训练,能够实现网络的微调,同时不会对初始状态有太大改变和影响。
-
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 难负例挖掘 1和2:难负例挖掘很快收敛,一轮 epoch 之后 mAP 就停止上升了。
- 边界框回归器训练
原理与问题
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 的转换,作用是尺度缩放。
- 先做平移
(
Δ
x
,
Δ
y
)
(\Delta x, \Delta y)
Δ
x
=
P
w
d
x
(
P
)
\Delta x = P_w d_x(P)
Δ
y
=
P
h
d
y
(
P
)
\Delta y = P_h d_y(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\\
- 再做尺度缩放
(
S
w
,
S
h
)
(S_w, S_h)
S
w
=
e
x
p
(
d
w
(
P
)
)
S_w = \mathrm{exp}(d_w(P))
S
h
=
e
x
p
(
d
h
(
P
)
)
S_h = \mathrm{exp}(d_h(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))\\
学习到这些函数后,我们可以通过上述变换,将一个输入的提议
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^⋆argmini∑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)/Pwty=(Gy−Py)/Phtw=log(Gw/Pw)th=log(Gh/Ph)
对每一类的目标都训练一个 bouding-box 回归器,最后学习到一系列 class-specific 的 边界框回归器 (VOC 数据集下就是 20 个回归器)。
实现边界框回归时,有两个微妙的问题。
- 正则化很重要,这里,基于验证集设置
λ
=
1000
\lambda=1000
- 当选择使用哪个训练对
(
P
,
G
)
(P,G)
P
P
G
G
P
P
G
G
相关问题:相对坐标、对数变换、近似线性变换可参考这篇博客
测试时,只对每个区域建议框使用一次边界框回归,因为发现反复预测并不能改善结果。
为什么采用 SVM 进行分类,而不是简单应用网络最后一层 fc_8 的 softmax 回归分类器?
经过实验尝试,发现在 VOC2007 数据集上,简单应用网络最后一层的 softmax 回归进行分类,mAP 从 54.2降到 50.9。R-CNN 作者认为,精度下降是因为几个因素,包括微调网络时使用的正例并不强调精确位置,而且 softmax 分类器是被随机采样的负例训练的,而在训练 SVM 时用的则是 hard negatives 的子集。而该结果显示,如果微调后不另外训练 SVM 是有可能保持相同精度水平的,猜测可能需要在微调时加入更多调整来消除性能差距,如果真的可以,这将大大简化和加快 R-CNN 的训练。
版权声明:本文为CSDN博主「Orphea」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_43728353/article/details/122521215
暂无评论