关于边界框回归有个理论细节所有人都没有提到,问了好多人都觉得我问的问题太简单了根本就不算个问题,我甚至解释了好几遍才找到能准确描述出我的疑惑的问法,可当我提问清楚后大家又表示没想过这个问题,建议我去问原作者,我现在想明白了便在此解释一下。
附一个网上介绍的比较详细的博客边框回归(Bounding Box Regression)详解以及DIOU和CIOU论文Distance-IoU Loss: Faster and Better Learning for Bounding Box Regression这篇论文附带了浅明易懂的MATLAB仿真,正是这篇论文和仿真让我迷惑不已。有人建议我去原作者issue里问问,我没问但若干天后我突发奇想想明白了这个问题。
博客中提出,
对于窗口一般使用四维向量(x,y,w,h)来表示,分别表示窗口的中心点坐标和宽高。图中,红色的框P代表原始的Proposal,绿色的框G代表目标的GroundTruth,我们的目标是寻找一种关系使得输入原始的窗口P经过映射得到一个跟真实窗口G更接近的回归窗口G^G^。
边框回归的目的即是:给定(Px,Py,Pw,Ph)寻找一种映射f,使得f(Px,Py,Pw,Ph)=(Gx^,Gy^,Gw^,Gh^)并且(Gx^,Gy^,Gw^,Gh^)≈(Gx,Gy,Gw,Gh)
里面最关键的一句是 寻找一种映射f,使得
f
(
P
x
,
P
y
,
P
w
,
P
h
)
=
(
G
x
^
,
G
y
^
,
G
w
^
,
G
h
^
)
f(P_x,P_y,P_w,P_h)=(\hat{G_x},\hat{G_y},\hat{G_w},\hat{G_h})
f(Px,Py,Pw,Ph)=(Gx^,Gy^,Gw^,Gh^),但实际上文中的真正意思是寻找4个梯度
δ
1
,
δ
2
,
δ
3
,
δ
4
\delta_1,\delta_2,\delta_3,\delta_4
δ1,δ2,δ3,δ4使得
P
x
+
k
δ
1
,
P
y
+
k
δ
2
,
P
w
+
k
δ
3
,
P
h
+
k
δ
4
P_x+k\delta_1,P_y+k\delta_2,P_w+k\delta_3,P_h+k\delta_4
Px+kδ1,Py+kδ2,Pw+kδ3,Ph+kδ4能又快又准地收敛到
G
x
^
,
G
y
^
,
G
w
^
,
G
h
^
\hat{G_x},\hat{G_y},\hat{G_w},\hat{G_h}
Gx^,Gy^,Gw^,Gh^而这很明显可以看出来不是寻找一种映射。说白了就是,用神经网络拟合这一映射的话,在每一步使用梯度下降法更新的不应该是网络的权重么,为什么他更新的是边框的4个参数
P
x
,
P
y
,
P
w
,
P
h
P_x,P_y,P_w,P_h
Px,Py,Pw,Ph?
论文里也是这么写的
作者给的代码里也是这么更新的
因为登不上github而省略的图片.jpg
有人说“这应该是实验验证iou的可行性,实际训练中不使用这个公式”,这也算是看出来问题了,但这很明显不具备说服力,为什么这么做就能验证?
最后我终于想到了这个问题的核心:既然是训练那总得有数据集吧,那么边框回归的数据集是什么?为什么那篇博客和论文里都没有使用数据集?没有数据集凭什么说这是在“训练”边框回归?
这个问题其实很简单。从神经网络方向传播的更新公式中,
∂
E
∂
θ
=
∂
E
∂
y
^
∂
y
^
∂
θ
\frac{\partial E}{\partial\theta}=\frac{\partial E}{\partial\hat{y}}\frac{\partial\hat{y}}{\partial\theta}
∂θ∂E=∂y^∂E∂θ∂y^
其中E是边界框回归损失,
θ
\theta
θ是神经网络的参数,
y
^
\hat{y}
y^是神经网络输出的4个边界框参数,因此你会发现论文和博客中都没有告诉你他们研究的前提是
∂
y
^
∂
θ
\frac{\partial\hat{y}}{\partial\theta}
∂θ∂y^固定,研究的只是
∂
E
∂
y
^
\frac{\partial E}{\partial\hat{y}}
∂y^∂E的收敛性,该式中并没有出现
θ
\theta
θ,因此也就不需要数据集。
至于输出的4个参数能够拟合边界框的原因,其实还是归功于神经网络的惊人拟合能力。我们可以假设边界框回归的问题可近似看作(这个例子可能不太合适),在xoy平面内有一些点,这些点作为数据集,让神经网络能够找出一个能够把所有点都框起来的最小的框(有点支持向量机的意思),然后可以再次简化为,找到2个或多个数的最小值。西瓜书中讲2个隐层神经元可以实现异或,但最小值看上去很简单但直接设计神经元并不容易,还是靠简单粗暴的训练和拟合。单隐层前馈网络求最小值