单阶段目标检测器通过密集预测的方式进行分类、定位。分类一般使用 Focal Loss,而边框回归则通过 Dirac delta 分布来学习。近年来的改进方向是引入一个单独的分支,预测定位的质量,然后用该质量分数去辅助分类得分,提升检测的表现。但质量预测存在两个问题:
下图(a) 是一些背景区域,但它们的定位质量得分很高。图(b) 的蓝点说明预测的类别得分和质量得分之间的关系较弱,红圈包含了大量的负样本,但它们的预测定位质量得分都很高。
下图 (a) 展示了现有方法,有一个单独的质量预测分支(IoU 或 center-ness 得分),图 (b) 是本文方法,将类别得分和定位质量得分融合到一起使用。
对于定位质量表征,将质量预测融入类别预测的向量,得到定位质量和分类的联合表征,使用统一的向量表示边框定位的任意分布。在类别向量中,ground-truth 索引位置的值是其相应的定位质量得分(通常是预测框和 gt 框的 IoU)。这样,改进后的表征在训练和推理时就一致了,而且能准确描述真实数据的分布情况,但 IoU ( 0 ∼ 1 ) (0\sim 1) (0∼1)标签是连续的,Focal Loss 只能解决 { 0 , 1 } \lbrace0,1\rbrace {0,1}二值标签,于是提出了 Generalized Focal Loss,从离散形式扩展到连续形式。GFL 可以具化为 Quality Focal Loss 和 Distribution Focal Loss。QFL 关注于一组稀疏的难例样本,输出它们相应的类别在 0 ∼ 1 0\sim 1 0∼1之间的质量预测得分。DFL 让网络快速聚焦于学习目标框连续坐标的概率。
对于边框表征,在连续空间内学习离散的概率分布,表示边框坐标的任意分布。
原来的 Focal Loss 用于解决单阶段目标检测,前景和背景类别不均衡的问题。形式如下:
F L ( p ) = − ( 1 − p t ) γ log ( p t ) , p t = { p , y = 1 1 − p , y = 0 \mathbf{FL}(p)=-(1-p_t)^{\gamma}\log(p_t),\quad p_t=\left\{ \begin{array}{ll} \quad p \quad,y=1 \\ 1-p\quad, y=0 \end{array} \right. FL(p)=−(1−pt)γlog(pt),pt={p,y=11−p,y=0
y ∈ { 0 , 1 } y\in \lbrace0,1\rbrace y∈{0,1}是 gt 框的类别, p ∈ [ 0 , 1 ] p\in \left[0,1\right] p∈[0,1]是对于类别标签 y = 1 y=1 y=1预测的置信度。 γ \gamma γ是控制系数。FL 包含了一个标准的交叉熵 − log ( p t ) -\log(p_t) −log(pt),和一个动态缩放乘数 ( 1 − p t ) γ (1-p_t)^{\gamma} (1−pt)γ,自动降低容易样本的损失贡献,快速聚焦于困难样本。
将定位质量得分和类别得分联合起来表示,降低 one-hot 类别标签的约束,对应类别上的目标值是一个浮点数 y ∈ [ 0 , 1 ] y\in \left[0,1\right] y∈[0,1]。 y = 0 y=0 y=0表示负样本,定位质量得分是 0 0 0。 0 < y ≤ 1 0
所以,QFL 的表达式为:
Q F L ( σ ) = − ∣ y − σ ∣ β [ ( 1 − y ) log ( 1 − σ ) + y log ( σ ) ] \mathbf{QFL}(\sigma)=-|y-\sigma|^{\beta}\left[(1-y)\log(1-\sigma) + y\log(\sigma)\right] QFL(σ)=−∣y−σ∣β[(1−y)log(1−σ)+ylog(σ)]
当 σ = y \sigma=y σ=y时,QFL 全局最小。 ∣ y − σ ∣ β |y-\sigma|^{\beta} ∣y−σ∣β是调节系数,当某样本的质量预测 σ \sigma σ不够准确、偏离标签 y y y,调节系数就会增大,从而更关注于困难样本。当质量预测得准确时 σ → y \sigma\rightarrow y σ→y,该系数趋近于 0 0 0,损失就会降低。 β \beta β控制着权重的降低(QFL 实验时 β = 2 \beta=2 β=2)。
上图比较了传统方法和本文方法。GFL 包括了 QFL 和 DFL。QFL 学习类别得分和定位质量得分的联合表征,DFL 将边框的位置建模为 general distribution,驱使网络快速聚焦于目标位置相邻点的概率。
本文将坐标点距离目标框四条边的相对偏移量作为回归目标。传统的边框回归方法是将回归标签 y y y建模为 Dirac Delta 分布 δ ( x − y ) \delta(x-y) δ(x−y),满足 ∫ − ∞ + ∞ δ ( x − y ) d x = 1 \int_{-\infty}^{+\infty}\delta(x-y)\mathop{dx}=1 ∫−∞+∞δ(x−y)dx=1,通常用全连接层实现。Dirac Delta 分布可以认为在一个点的概率密度为无穷大,而其它点的概率密度都为 0。其还原 y y y的积分形式就是:
y = ∫ − ∞ + ∞ δ ( x − y ) x d x y=\int_{-\infty}^{+\infty}\delta(x-y)x \mathop{dx} y=∫−∞+∞δ(x−y)xdx
然而在真实场景,目标边界并非是十分清楚的,因此如下图(b) 学习一个宽范围的分布更加合理。给定标签 y y y ( y 0 ≤ y ≤ y n , n ∈ N + ) (y_0\leq y\leq y_n,n\in \mathbb{N}^+) (y0≤y≤yn,n∈N+),模型预测的值 y ^ \hat{y} y^就是( y 0 ≤ y ^ ≤ y n y_0 \leq\hat{y} \leq y_n y0≤y^≤yn):
y ^ = ∫ − ∞ + ∞ P ( x ) x d x = ∫ y 0 y n P ( x ) x d x \hat{y}=\int_{-\infty}^{+\infty} P(x)x \mathop{dx}=\int_{y_0}^{y_n} P(x)x \mathop{dx} y^=∫−∞+∞P(x)xdx=∫y0ynP(x)xdx
但 CNN 用的是离散表征,作者将值域 [ y 0 , y n ] \left[y_0,y_n\right] [y0,yn]离散为集合 { y 0 , y 1 , . . . , y i , y i + 1 , . . . , y n − 1 , y n } \lbrace y_0,y_1,...,y_i,y_{i+1},...,y_{n-1},y_n\rbrace {y0,y1,...,yi,yi+1,...,yn−1,yn},间隔是 Δ \Delta Δ,即从 y y y可能存在的区间 [ y 0 , y n ] \left[y_0, y_n\right] [y0,yn]中均匀采样,这样就从一个回归问题变成了多分类问题。给定离散分布性质 ∑ i = 1 n P ( y i ) = 1 \sum_{i=1}^n P(y_i)=1 ∑i=1nP(yi)=1,预测的回归值 y ^ \hat{y} y^表示为:
y ^ = ∑ i = 0 n P ( y i ) ⋅ y i \hat{y}=\sum_{i=0}^n P(y_i)\cdot y_i y^=i=0∑nP(yi)⋅yi
作者使用 Softmax 函数可以很容易地实现离散形式的任意分布。 P ( x ) P(x) P(x)用 softmax S ( ⋅ ) \mathcal{S}(\cdot) S(⋅)实现, P ( y i ) P(y_i) P(yi)记做 S i \mathcal{S}_i Si。 y ^ \hat{y} y^可以用 SmoothL1、IoU 损失和 GIoU 损失训练。但是如下图(b)所示, P ( x ) P(x) P(x)的值可能有无数种组合来让最终的积分结果为 y y y,这会降低学习的效率。与 (1) (2) 相比,(3) 更加紧凑、更加确信边框定位的准确性。如果存在最适合的位置,它一定不会离目标标签很远。因此作者提出了 DFL,通过增大 y i y_i yi和 y i + 1 y_{i+1} yi+1的概率( y i y_i yi和 y i + 1 y_{i+1} yi+1是最接近 y y y的两个点, y i ≤ y ≤ y i + 1 y_i\leq y\leq y_{i+1} yi≤y≤yi+1),让网络快速关注到标签 y y y附近的点。边框的学习只需关注正样本,不用担心正负类别
不均衡问题,于是 DFL 形式为:
D F L ( S i , S i + 1 ) = − [ ( y i + 1 − y ) log ( S i ) + ( y − y i ) log ( S i + 1 ) ] \mathbf{DFL}(\mathcal{S}_i,\mathcal{S}_{i+1})=-\left[(y_{i+1}-y)\log(\mathcal{S}_i) + (y-y_i)\log(\mathcal{S}_{i+1})\right] DFL(Si,Si+1)=−[(yi+1−y)log(Si)+(y−yi)log(Si+1)]
DFL 通过学习增大 y y y左右两个点的概率( S i \mathcal{S}_i Si和 S i + 1 \mathcal{S}_{i+1} Si+1),使网络分布聚焦到标签点的附近。当 DFL 达到全局最小点(即 S i = y i + 1 − y y i + 1 − y i \mathcal{S}_i=\frac{y_{i+1}-y}{y_{i+1}-y_i} Si=yi+1−yiyi+1−y, S i + 1 = y − y i y i + 1 − y i \mathcal{S}_{i+1}=\frac{y-y_{i}}{y_{i+1}-y_i} Si+1=yi+1−yiy−yi),可以保证预测值 y ^ \hat{y} y^无限地接近对应的标签 y y y,即 y ^ = ∑ j = 0 n P ( y j ) y j = S i y i + S i + 1 y i + 1 = y i + 1 − y y i + 1 − y i y i + y − y i y i + 1 − y i y i + 1 = y \hat{y}=\sum_{j=0}^n P(y_j)y_j = \mathcal{S}_iy_i + \mathcal{S}_{i+1}y_{i+1}=\frac{y_{i+1}-y}{y_{i+1}-y_i}y_i+\frac{y-y_{i}}{y_{i+1}-y_i}y_{i+1}=y y^=∑j=0nP(yj)yj=Siyi+Si+1yi+1=yi+1−yiyi+1−yyi+yi+1−yiy−yiyi+1=y。
QFL 和 DFL 可以整合为一个通用形式。假设一个模型预测两个变量 y l , y r ( y l < y r ) y_l,y_r(y_l
G F L ( p y l , p y r ) = − ∣ y − ( y l p y l + y r p y r ) ∣ β ( ( y r − y ) log ( p y l ) + ( y − y l ) log ( p y r ) ) \mathbf{GFL}(p_{y_l},p_{y_r})=-|y-(y_l p_{y_l}+y_r p_{y_r})|^{\beta} ((y_r-y)\log(p_{y_l}) +(y-y_l)\log(p_{y_r})) GFL(pyl,pyr)=−∣y−(ylpyl+yrpyr)∣β((yr−y)log(pyl)+(y−yl)log(pyr))
当 p y l ∗ = y r − y y r − y l p_{y_l}^*=\frac{y_r-y}{y_r-y_l} pyl∗=yr−ylyr−y, p y r ∗ = y − y l y r − y l p_{y_r}^*=\frac{y-y_l}{y_r-y_l} pyr∗=yr−yly−yl时, G F L ( p y l , p y r ) \mathbf{GFL}(p_{y_l},p_{y_r}) GFL(pyl,pyr)达到全局最小,也就是说 y ^ \hat{y} y^完美地匹配上了连续标签 y y y,即 y ^ = y l p y l ∗ + y r p y r ∗ = y \hat{y}=y_lp_{y_l}^*+y_rp_{y_r}^*=y y^=ylpyl∗+yrpyr∗=y。QFL、DFL 和原版 FL 都是 GFL 的特殊形式。GFL 可以用到任意的单阶段目标检测器上。推理时,直接将分类得分(质量预测的联合表征)作为 NMS 分数,而无需乘上质量预测得分。预测边框每个位置的回归分支的最后一层现在有 n + 1 n+1 n+1个输出,而不只是 1 1 1个输出。
L = 1 N p o s ∑ z L Q + 1 N p o s ∑ z I { c z ∗ > 0 } ( λ 0 L B + λ 1 L D ) \mathcal{L}=\frac{1}{N_{pos}}\sum_z \mathcal{L_Q}+\frac{1}{N_{pos}}\sum_z \mathbb{I}_{\lbrace c_z^*>0\rbrace}(\lambda_0\mathcal{L_B}+\lambda_1 \mathcal{L_D}) L=Npos1z∑LQ+Npos1z∑I{cz∗>0}(λ0LB+λ1LD)
L Q \mathcal{L_Q} LQ是 QFL, L D \mathcal{L_D} LD是 DFL。 L B \mathcal{L_B} LB是 GIoU 损失。 N p o s N_{pos} Npos是正样本个数。 λ 0 = 2 \lambda_0=2 λ0=2和 λ 1 = 1 4 \lambda_1=\frac{1}{4} λ1=41平衡 QFL 和 DFL。对特征金字塔上所有的位置 z z z计算求和。 I { c z ∗ > 0 } \mathbb{I}_{\lbrace c_z^*>0\rbrace} I{cz∗>0}是指标函数。