目标检测之 RCNN-Bounding-box 回归分析
RCNN进行目标检测时,采取候选区域算法,得到2000个候选区域,并依次放入CNN中进行特征提取预测类别与位置。
初步理解
下图中的红色框即为候选框,绿色框为人工标注真实框。(为了便于初步分析与理解,此过程将预测框与真实框重合)
原理上,从候选框不准确位置到预测框的真实位置,可通过下列公式得到:
G
x
=
Δ
x
+
P
x
G
y
=
Δ
y
+
P
y
G
w
=
Δ
w
∗
P
y
G
h
=
Δ
h
∗
P
h
G_x = Delta x + P_x\ G_y = Delta y + P_y\ G_w = Delta w * P_y\ G_h = Delta h * P_h
Gx=Δx+PxGy=Δy+PyGw=Δw∗PyGh=Δh∗Ph
其中
Δ
w
Delta w
Δw和
Δ
h
Delta h
Δh是红色框的宽、高与绿色框的宽、高的比例系数,目的在于使红色框的宽、高通过比例放缩接近于真实框的宽、高。
Δ
x
,
Δ
y
,
Δ
w
,
Δ
h
Delta x,Delta y,Delta w,Delta h
Δx,Δy,Δw,Δh是候选区域通过CNN提取特征向量并将特征向量输入到SVM模型得到。
进一步理解
考虑到通过SVM模型得到的
Δ
Delta
Δ值存在负值。为了避免该情况,不能直接使用SVM预测
Δ
Delta
Δ值,而采取预测
d
x
,
d
y
,
d
w
,
d
h
d_x,d_y,d_w,d_h
dx,dy,dw,dh。其中
d
x
=
Δ
x
P
x
,
d
y
=
Δ
y
P
y
,
l
n
Δ
w
=
d
w
,
l
n
Δ
h
=
d
h
d_x = frac{Delta x} {P_x}, d_y = frac{Delta y} {P_y}, ln{Delta w} = d_w, ln{Delta h }= d_h
dx=PxΔx,dy=PyΔy,lnΔw=dw,lnΔh=dh.
使用
d
x
=
Δ
x
p
x
,
d
y
=
Δ
y
p
y
d_x=frac{Delta x}{p_x},d_y=frac{Delta y}{p_y}
dx=pxΔx,dy=pyΔy的原因在于如下例子所示:
- 假设这是4张内容一样的图片,只有大小不同。其中红框为候选框,黄框为预测框,绿框为真实标注框。图1和图2是内容一样的图片,图片大小不同;图3和图1一样,图4和图2一样。
- 预测框的坐标用
(
G
预测
x
,
G
预测
y
,
G
预测
w
,
G
预测
h
)
(G_{预测x},G_{预测y},G_{预测w},G_{预测h})
- 在图1中得到
Δ
x
1
=
G
x
−
P
x
,
Δ
y
1
=
G
y
−
P
y
Delta x_1=G_x-P_x,Delta y_1=G_y-P_y
Δ
x
2
=
G
x
−
P
x
,
Δ
y
2
=
G
y
−
P
y
Delta x_2=G_x-P_x,Delta y_2=G_y-P_y
在图3中得到Δ
x
3
=
G
预测
x
−
P
x
,
Δ
y
3
=
G
预测
y
−
P
y
Delta x_3=G_{预测x}-P_x,Delta y_3=G_{预测y}-P_y
Δ
x
4
=
G
预测
x
−
P
x
,
Δ
y
4
=
G
预测
y
−
P
y
Delta x_4=G_{预测x}-P_x,Delta y_4=G_{预测y}-P_y
回归的目的在于使得Δ
x
1
与
Δ
x
3
Delta x_1与Delta x_3
Δ
y
1
与
Δ
y
3
Delta y_1与Delta y_3
使用具体数值更容易理解:
令图一和图三中
红框坐标(20,20)
绿框坐标(30,30)
黄框坐标(28,28);
使用Δ
Delta
Δ求解:
Δ
x
Delta x
Δx真实偏移量:30-20=10
Δ
x
Delta x
Δx预测框偏移量:28-20=8
Δ
x
Delta x
Δx损失回归函数值:(10-8)^ 2 = 4
使用d求解
d
x
d_x
dx真实偏移量:
30
−
20
20
=
0.5
frac{30-20}{20}=0.5
2030−20=0.5
d
x
d_x
dx预测框偏移量:
28
−
20
20
=
0.4
frac{28-20}{20}=0.4
2028−20=0.4
d
x
d_x
dx损失回归函数值:(0.5-0.4)^ 2 = 0.01
令图二和图四中
红框坐标(10,10)
绿框坐标(15,15)
黄框坐标(14,14);
使用Δ
Delta
Δ求解:
Δ
x
Delta x
Δx真实偏移量:15-10=5
Δ
x
Delta x
Δx预测框偏移量:14-10=4
Δ
x
Delta x
Δx损失回归函数值:(5-4)^ 2 = 1
使用d求解
d
x
d_x
dx真实偏移量:
15
−
10
10
=
0.5
frac{15-10}{10}=0.5
1015−10=0.5
d
x
d_x
dx预测框偏移量:
14
−
10
10
=
0.4
frac{14-10}{10}=0.4
1014−10=0.4
d
x
d_x
dx损失回归函数值:(0.5-0.4)^ 2 = 0.01
由以上可知,使用
Δ
Delta
Δ求解对于同一张图不同大小,计算出来的回归函数损失值不同,不利于模型训练,而使用
d
d
d求解时,是一致的。
部分问题
- 对于Rcnn进行目标检测,如何获得预测的
d
x
,
d
y
,
d
w
,
d
h
d_x,d_y,d_w,d_h
Rcnn进行网络训练时,先选出2000
个候选区域,并resize成相同大小(227x227)
,然后分别送入CNN网络中提取特征,得到2000个4096维的特征向量,也即2000x4096
的矩阵。
分类:将该矩阵输入到SVM分类中,得到2000x21
矩阵,其中21表示21个类别,包含背景。
定位:将该矩阵输入到4096x4
的回归矩阵中,输出2000x4
的偏移矩阵,即得到d
x
,
d
y
,
d
w
,
d
h
d_x,d_y,d_w,d_h
- 候选框(有时又称为边界框),真实框,预测框存在的作用?
候选框是Rcnn经过SR算法得到;真实框为人工标注框,是正确的位置;预测框的存在是因为框的回归目标在于找到使得候选框经过偏移和放缩操作后得到一个与真实框比较接近的框,这个框就是预测框。
为何不采取直接将候选框训练成真实框而没必要使用预测框呢?
个人认为,预测框是目标检测模型计算输出的框,我们目的在于使模型预测输出框接近于真实框,而不是最开始得到的候选框接近于真实框,因为最开始得到的候选框,并非是我们训练的模型得到的,如在RCNN中,该候选框的位置是基于SR算法得到的,我们不旨在改变SR算法。