论文地址:Wise-IoU: Bounding Box Regression Loss with Dynamic Focusing Mechanism 这个是论文作者自己写的博客 论文的introduciton和related work可以细看作者的博客或者论文
论文代码: github代码
近年来的研究大多假设训练数据中的示例有较高的质量,致力于强化边界框损失的拟合能力。但我们注意到目标检测训练集中含有低质量示例,如果一味地强化边界框对低质量示例的回归,显然会危害模型检测性能的提升。
动态非单调聚焦机制使用“离群度”替代 IoU 对锚框进行质量评估,并提供了明智的梯度增益分配策略。该策略在降低高质量锚框的竞争力的同时,也减小了低质量示例产生的有害梯度。
在目标检测任务中,降低高质量锚框的竞争力通常是为了应对以下问题:
难例学习:在某些情况下,物体的形状、大小、姿态或者与背景的融合程度使得其难以精确检测。这些难例可能对应于IoU较低的锚框。如果过度强调高质量锚框,模型可能会过于依赖这些易于分类的样本,而忽视了对难例的学习。通过降低高质量锚框的竞争力,模型可以更好地关注和学习这些难例,从而提高整体检测性能。
过拟合:如果模型过于关注高质量锚框,它可能会过快地收敛到这些样本的局部最优解,导致在未见过的数据上的泛化性能下降。通过降低高质量锚框的竞争力,可以促使模型更全面地学习各种类型的锚框,从而提高泛化能力。
论文涉及的聚焦机制有如下:
论文贡献:
因为训练数据中难以避免地包含低质量示例,所以如距离、纵横比之类的几何度量都会加剧对低质量示例的惩罚从而使模型的泛化性能下降。好的损失函数应该在锚框与目标框较好地重合时削弱几何度量的惩罚,不过多地干预训练将使模型有更好的泛化能力。在此基础上,我们根据距离度量构建了距离注意力,得到了具有两层注意力机制的 WIoU v1:
L W I o U v 1 = R W I o U L I o U \mathcal{L}_{W I o U v 1}=\mathcal{R}_{W I o U} \mathcal{L}_{I o U} LWIoUv1=RWIoULIoU R W I o U = exp ( ( x − x g t ) 2 + ( y − y g t ) 2 ( W g 2 + H g 2 ) ∗ ) \mathcal{R}_{W I o U}=\exp \left(\frac{\left(x-x_{g t}\right)^2+\left(y-y_{g t}\right)^2}{\left(W_g^2 + H_g^2\right)^*}\right) RWIoU=exp((Wg2+Hg2)∗(x−xgt)2+(y−ygt)2)
为了防止 R W I o U \mathcal{R}_{W I o U} RWIoU产生阻碍收敛的梯度,将 W g , H g W_g, H_g Wg,Hg从计算图中分离 (上标 * 表示此操作)。因为它有效地消除了阻碍收敛的因素,所以我们没有引入新的度量指标,如纵横比。
DIoU 将惩罚项定义为中心点连接的归一化长度:
R D I o U = ( x − x g t ) 2 + ( y − y g t ) 2 W g 2 + H g 2 \mathcal{R}_{D I o U}=\frac{\left(x-x_{g t}\right)^2+\left(y-y_{g t}\right)^2}{W_g^2+H_g^2} RDIoU=Wg2+Hg2(x−xgt)2+(y−ygt)2
同时为最小包围框的尺寸 W g , H g W_g, H_g Wg,Hg提供了负梯度,这将使得 W g , H g W_g, H_g Wg,Hg增大而阻碍预测框与目标框重叠:
∂ R D I o U ∂ W g = − 2 W g ( x − x g t ) 2 + ( y − y g t ) 2 ( W g 2 + H g 2 ) 2 < 0 ∂ R D I o U ∂ H g = − 2 H g ( x − x g t ) 2 + ( y − y g t ) 2 ( W g 2 + H g 2 ) 2 < 0 \begin{aligned} & \frac{\partial \mathcal{R}_{D I o U}}{\partial W_g}=-2 W_g \frac{\left(x-x_{g t}\right)^2+\left(y-y_{g t}\right)^2}{\left(W_g^2+H_g^2\right)^2}<0 \\ & \frac{\partial \mathcal{R}_{D I o U}}{\partial H_g}=-2 H_g \frac{\left(x-x_{g t}\right)^2+\left(y-y_{g t}\right)^2}{\left(W_g^2+H_g^2\right)^2}<0\end{aligned} ∂Wg∂RDIoU=−2Wg(Wg2+Hg2)2(x−xgt)2+(y−ygt)2<0∂Hg∂RDIoU=−2Hg(Wg2+Hg2)2(x−xgt)2+(y−ygt)2<0
但不可否认的是,距离度量的确是一个极其有效的解决方案,成为高效边界框损失的必要因子。EIoU 在此基础上加大了对距离度量的惩罚力度,其惩罚项定义为:
R E I o U = R D I o U + ( x − x g t ) 2 W g 2 + ( y − y g t ) 2 H g 2 \mathcal{R}_{E I o U}=\mathcal{R}_{D I o U}+\frac{\left(x-x_{g t}\right)^2}{W_g^2}+\frac{\left(y-y_{g t}\right)^2}{H_g^2} REIoU=RDIoU+Wg2(x−xgt)2+Hg2(y−ygt)2
Focal Loss 设计了一种针对交叉熵的单调聚焦机制,有效降低了简单示例对损失值的贡献。这使得模型能够聚焦于困难示例,获得分类性能的提升。类似地,我们构造了 L W I o U v 1 \mathcal{L}_{W I o U v 1} LWIoUv1 的单调聚焦系数 L I o U γ ∗ \mathcal{L}_{I o U}^{\gamma *} LIoUγ∗( γ \gamma γ是指数幂, L I o U \mathcal{L}_{I o U} LIoU是底数,*表示从计算图中分离)
L W I o U v 2 = L I o U γ ∗ L W I o U v 1 , γ > 0 \mathcal{L}_{WIoUv2}=\mathcal{L}_{IoU}^{\gamma*}\mathcal{L}_{WIoUv1},\gamma>0 LWIoUv2=LIoUγ∗LWIoUv1,γ>0
由于增加了聚焦系数,WIoU v2 反向传播的梯度也发生了变化:
∂ L W I o U v 2 ∂ L I o U = L I o U γ ∗ ∂ L W I o U v 1 ∂ L I o U , γ > 0 \frac{\partial\mathcal{L}_{WIoUv2}}{\partial\mathcal{L}_{IoU}}=\mathcal{L}_{IoU}^{\gamma*}\frac{\partial\mathcal{L}_{WIoUv1}}{\partial\mathcal{L}_{IoU}},\gamma>0 ∂LIoU∂LWIoUv2=LIoUγ∗∂LIoU∂LWIoUv1,γ>0
在模型训练过程中,梯度增益 L I o U γ ∗ \mathcal{L}_{I o U}^{\gamma *} LIoUγ∗随着 L I o U \mathcal{L}_{I o U} LIoU的减小而减小,导致训练后期收敛速度较慢。因此,引入 L I o U \mathcal{L}_{I o U} LIoU的均值作为归一化因子:
L W I o U v 2 = ( L I o U ∗ L I o U ‾ ) γ L W I o U v 1 \mathcal{L}_{WIoUv2}=(\frac{\mathcal{L}_{IoU}^*}{\overline{\mathcal{L}_{IoU}}})^\gamma\mathcal{L}_{WIoUv1} LWIoUv2=(LIoULIoU∗)γLWIoUv1
其中的 L I o U ‾ \overline{\mathcal{L}_{IoU}} LIoU为动量 m \mathcal{m} m 的滑动平均值,动态更新归一化因子使梯度增益 r = ( L I o U ∗ L I o U ‾ ) γ r=(\frac{\mathcal{L}_{IoU}^{*}}{\overline{\mathcal{L}_{IoU}}})^{\gamma} r=(LIoULIoU∗)γ整体保持在较高水平,解决了训练后期收敛速度慢的问题(这里的 L I o U ‾ \overline{\mathcal{L}_{IoU}} LIoU类似于梯度优化中的动量, 源码中的计算公式为 L I o U ‾ n + 1 = ( 1 − m ) × L I o U ‾ n + m × L I o U ∗ n \overline{\mathcal{L}_{IoU}}_{n+1} =(1-m)\times\overline{\mathcal{L}_{IoU}}_{n} + m\times{\mathcal{L}_{IoU}^*}_{n} LIoUn+1=(1−m)×LIoUn+m×LIoU∗n,m是下文提到的动量)
定义离群度以描述锚框的质量,其定义为:
β = L I o U ∗ L I o U ‾ ∈ [ 0 , + ∞ ) \beta=\frac{\mathcal{L}_{IoU}^*}{\overline{\mathcal{L}_{IoU}}}\in[0,+\infty) β=LIoULIoU∗∈[0,+∞)
离群度小意味着锚框质量高,我们为其分配一个小的梯度增益,以便使边界框回归聚焦到普通质量的锚框上。对离群度较大的锚框分配较小的梯度增益,将有效防止低质量示例产生较大的有害梯度。(离群度小,意味着 L I o U ∗ {\mathcal{L}_{IoU}^*} LIoU∗比较小,由下面公式知,当 L I o U ∗ {\mathcal{L}_{IoU}^*} LIoU∗小,而 L I o U ‾ \overline{\mathcal{L}_{IoU}} LIoU近似于普通锚框的 L I o U ∗ {\mathcal{L}_{IoU}^*} LIoU∗比较大的时候,梯度增益就会很小;离群度大,意味着低质量锚框的 L I o U ∗ {\mathcal{L}_{IoU}^*} LIoU∗损失较大,远大于 L I o U ‾ \overline{\mathcal{L}_{IoU}} LIoU,因此,由下面的公式可知, β \beta β的值就会比较大,由图8可知,梯度增益比较低;但是普通质量的锚框的β就会近似等于1,梯度增益就比较大。因此整体来说,更关注于普通质量的锚框)(为什么说 L I o U ‾ \overline{\mathcal{L}_{IoU}} LIoU近似于普通质量锚框的 L I o U ∗ {\mathcal{L}_{IoU}^*} LIoU∗,因为:一、这个WIoU v3比较关注于普通质量锚框的;二、普通锚框相对于高质量锚框和低质量锚框来说都比较多)
β = L I o U ∗ L I o U ‾ = L I o U ∗ ( 1 − m ) × L I o U ‾ + m × L I o U ∗ \beta=\frac{\mathcal{L}_{IoU}^*}{\overline{\mathcal{L}_{IoU}}}=\frac{\mathcal{L}_{IoU}^*}{(1-m)\times\overline{\mathcal{L}_{IoU}} + m\times\mathcal{L}_{IoU}^*} β=LIoULIoU∗=(1−m)×LIoU+m×LIoU∗LIoU∗
论文利用 β \beta β 构造了一个非单调聚焦系数并将其应用于 WIoU v1:
L W I o U v 3 = r L W I o U v 1 , r = β δ α β − δ \mathcal{L}_{WIoUv3}=r\mathcal{L}_{WIoUv1},~r=\frac\beta{\delta\alpha^{\beta-\delta}} LWIoUv3=rLWIoUv1, r=δαβ−δβ
其中,当 β = δ \beta=\delta β=δ 。当锚框的离群程度满足 β = C \beta=C β=C ( C C C 为定值)时,锚框将获得最高的梯度增益。由于 L I o U ‾ \overline{\mathcal{L}_{IoU}} LIoU是动态的,锚框的质量划分标准也是动态的,这使得 WIoU v3 在每一时刻都能做出最符合当前情况的梯度增益分配策略(这个策略就是论文目的,就是上面的的变化带来的梯度增益的变化)。
为了防止低质量的锚框在训练的早期阶段被遗忘,我们初始化 L I o U ‾ = 1 \overline{\mathcal{L}_{IoU}}=1 LIoU=1,使得锚框的梯度增益最大。(这个是为了在早期的时候获得近似最大的增益,假设在早期的时候 I o U = 0 {I o U}=0 IoU=0, L I o U = 1 \mathcal{L}_{I o U}=1 LIoU=1, 由上图可以看出,当 L I o U ‾ = 1 \overline{\mathcal{L}_{IoU}}=1 LIoU=1的时候才会得到最大的增益,损失下降才快)。
为了在训练初期保持这种策略,有必要设置一个较小的动量 m,以延迟 L I o U ‾ \overline{\mathcal{L}_{IoU}} LIoU接近真实值 L I o U − r e a l ‾ \overline{\mathcal{L}_{IoU-real}} LIoU−real的时间。论文建议将动量设置为:(github代码中的m设置不一样,作者在v2版本设置的是1e-2,可以看源码中的设置)
m = 1 − 0.05 t n m=1-\sqrt[tn]{0.05} m=1−tn0.05
n为batchsize,t为当 AP 的提升速度在 t 个epoch显著减慢的值。
在训练的中后期,WIoU v3 会为低质量的锚框分配较小的梯度增益,以减少有害梯度。同时,它也会关注普通质量的锚点,以提高模型的定位性能。(本人理解,到了中后期, L I o U ‾ \overline{\mathcal{L}_{IoU}} LIoU可以近似的看错普通锚框产生的 L I o U \mathcal{L}_{I o U} LIoU,低质量锚框的 L I o U \mathcal{L}_{I o U} LIoU损失较大,远大于 L I o U ‾ \overline{\mathcal{L}_{IoU}} LIoU,因此,在除以 ( 1 − m ) × L I o U ‾ + m × L I o U (1-m)\times\overline{\mathcal{L}_{IoU}}+m\times\mathcal{L}_{I o U} (1−m)×LIoU+m×LIoU的时候值就会比较大,由图8可知,获得增益比较低。但是普通锚框的β就会近似等于1,获得增益就比较大)