Generalized Focal Loss论文个人理解

论文地址:Generalized Focal Loss: Towards Efficient Representation Learning for Dense Object Detection

论文解决问题

研究人员最近更加关注边界框的表示(representation)及其定位质量估计(LQE,本论文中指的是IoU score),导致该领域取得了令人鼓舞的进展。具体来说,边界框表示被建模为简单的狄拉克δ分布,该分布在过去几年中被广泛使用。在 FCOS 中,当 LQE 与分类置信度相结合(通常是相乘)作为Non_max_suppression中排序的最终分数时,预测额外的定位质量(例如IoU score或Centerness score)会带来检测精度的持续提高。尽管取得了巨大的成功,但我们在密集检测器的现有实践中观察到这些表示(分类、定位和 LQE)存在以下三个问题:

  • 训练和推理之间 LQE 和分类分数的使用不一致

    图 1 图1 图1论文中阐述,如图1a所示,在最近的密集检测器中,LQE和分类分数通常是独立训练的,但在推理过程中综合利用(例如乘法)。目前,LQE 的监督仅分配给正样本 182042,这是不可靠的(只有正样本计算box_loss),因为负样本可能有机会获得无法控制的更高质量的预测(图 2)。 这两个因素导致训练和测试之间存在差距,并可能降低检测性能,例如,在 NMS 期间,具有随机高质量分数的负实例可能排在具有较低质量预测的正实例之前。
    图 2 图2 图2注意yolov8中的是NMS排序分数是conf,conf是cls中最大的那个,并不是conf * iou。

    python 复制代码
    conf, j = cls.max(1, keepdim=True)
    x = torch.cat((box, conf, j.float(), mask), 1)[conf.view(-1) > conf_thres]
    
    x = x[x[:, 4].argsort(descending=True)[:max_nms]]  # sort by confidence and remove excess boxes
    
    boxes, scores = x[:, :4] + c, x[:, 4]  # boxes (offset by class), scores
    i = torchvision.ops.nms(boxes, scores, iou_thres)  # NMS
  • 边界框的不灵活表示

    广泛使用的边界框表示可以看作目标框坐标的狄拉克δ分布。 然而,它没有考虑数据集中的模糊性和不确定性(见图3中图形边界不清晰)。 尽管最近的一些工作]将框建模为高斯分布,但捕获边界框位置的真实分布过于简单。 事实上,真实分布可以更加任意和灵活,而不需要像高斯函数那样对称。
    图 3 图3 图3

  • 缺乏可靠 LQE 的明确指导

    许多先前的作品探索了LQE。 例如,YOLO家族首先采用Objectness来描述定位质量,其定义为预测框和真实框之间的交并集(IoU)。 此后,IoU在IoU-Net、IoU-aware、PAA、GFL和VFNet中被进一步探索并证明是有效的。 最近,FCOS和ATSS引入了Centerness,即到物体中心的距离程度,以抑制低质量的检测结果。 一般来说,上述方法都有一个共同的特点,即它们都是基于普通的卷积特征,例如点、边界或区域的特征(见图4a、4b、4c、4d、4e、4f和4g)来估计定位质量。 不幸的是,这些抽象的卷积特征无法具有推断 LQE scores的明确含义,而只是由定位质量信号隐式监督,从而使其可靠 LQE 的效率较低。

    图 4 图4 图4

论文解决方案(因为yolov8中使用了DFL,会结合介绍一下)

Improved Representations

  • For object classification representation,我们建议将其与 LQE 分数合并为单个统一的表示:
    Classification -> Classification-IoU Joint Representation

    下面的 J \mathbf{J} J就是预测框标签的分类分数, y \mathbf{y} y就是真实框标签的分类分数

    为了解决上述训练和测试阶段之间的不一致问题,我们提出了联合表示 J = J 1 , J 2 , ... , J m \mathbf{J}=J_1,J_2,\\ldots,J_m J=J1,J2,...,Jm(m 表示类别总数)的定位质量(即 IoU 分数)和分类分数(称为"Classification-IoU Joint Representation"),其supervision软化了标准的one-hot类别标签,并且导致可能的浮点向量 y = y 1 , y 2 , ... , y m \mathbf{y}=y_1,y_2,\\ldots,y_m y=y1,y2,...,ym。 给定一个对象类别标签 c ∈ { 1 , 2 , ... , m } c\in\{1,2,\ldots,m\} c∈{1,2,...,m}, y 满足
    y i = { I o U ( B p r e d , B g t ) , if i = c ; 0 , otherwise , \left.y_i=\left\{\begin{array}{ll}\mathrm{IoU}(B_{pred},B_{gt}),&\text{if }i=c;\\0,&\text{otherwise},\end{array}\right.\right. yi={IoU(Bpred,Bgt),0,if i=c;otherwise,其中 I o U ( B p r e d , B g t ) \mathrm{IoU}(B_{pred},B_{gt}) IoU(Bpred,Bgt)表示预测边界框 B p r e d B_{pred} Bpred和真实框 B g t B_{gt} Bgt之间的 IoU。 具体来说, y = 0 y=0 y=0表示负样本的质量分数为0, 0 < y ≤ 1 0<y\leq1 0<y≤1表示正样本的质量分数为IoU分数 y y y。(原先的真实标签的分类分数一般是{0, 1}, 现在将正样本的对应的真实标签的分类分数变为 I o U ( B p r e d , B g t ) \mathrm{IoU}(B_{pred},B_{gt}) IoU(Bpred,Bgt),负样本的对应的真实标签的分类分数变为0。这个yolov8介绍的跟这个差不多,yolov8中的在经过TAA正负样本标签分配后,原始的target_scores正样本的真实标签的分类分数乘以weights,负样本的真实标签的分类分数是0(可以见yolov8下面截取代码)) 。对于多类别,作者采用带有 sigmoid 运算符 σ ( ⋅ ) \sigma(\cdot) σ(⋅)的多重二元分类。 为了简单起见,将 sigmoid 的输出标记为 σ \sigma σ。 请注意,如图1b所示,训练时,J 受到质量焦点损失(QFL)的监督,推理时,直接作为NMS 分数,这大大减少了训练和推理之间的 LQE 和对象分类的不一致。

    python 复制代码
    # Normalize
    # 设定一个动态权重,更加关注那些与真实目标对齐良好且重叠程度较高的预测框
    # 这个动态权重由overlaps和align_metric决定,那些align_metric和overlaps小的预测框,它们对应的target_scores也小
    # 这样求解bce_loss(分类损失)的时候相对来说会变小,这样模型在训练过程中就不会过多关注那些align_metric和overlaps小的预测框了
    # 注意align_metric是跟预测分类分数和ciou都有关,这样模型在预测的时候,分类分数和iou会保持一致性,尽可能的不会存在分类分数低,而iou高的情况。
    align_metric *= mask_pos
    pos_align_metrics = align_metric.amax(axis=-1, keepdim=True)  # b, max_num_obj
    pos_overlaps = (overlaps * mask_pos).amax(axis=-1, keepdim=True)  # b, max_num_obj
    norm_align_metric = (align_metric * pos_overlaps / (pos_align_metrics + self.eps)).amax(-2).unsqueeze(-1)
    target_scores = target_scores * norm_align_metric
  • For bounding box representation,我们建议通过直接学习连续空间上的离散概率分布来表示框位置的任意分布(在本文中表示为"一般分布"),而不引入任何其他更强的先验(例如,高斯):学习到的任意分布提供了对真实数据本质的复杂性进行建模的灵活性,不仅可以预测精确的边界框回归,还可以反映信息丰富的潜在不确定性估计
    Dirac delta -> General Distribution Representation

    作者采用该位置(在yolov8中是anchor points)到边界框四个边的相对偏移量(anchor points到bbox的距离)作为回归目标。 边界框回归的传统操作将回归标签 y y y建模为 δ ( x − y ) \delta(x-y) δ(x−y)狄拉克分布,其中满足 ∫ − ∞ + ∞ δ ( x − y ) d x = 1 \int_{-\infty}^{+\infty}\delta(x-y)\mathrm{d}x=1 ∫−∞+∞δ(x−y)dx=1,并且通常通过全连接层实现。更正式地说,恢复 y y y 的积分形式如下(不好意思,高数还给老师了,忘记怎么推的):
    y = ∫ − ∞ + ∞ δ ( x − y ) x d x y=\int_{-\infty}^{+\infty}\delta(x-y)x\mathrm{d}x y=∫−∞+∞δ(x−y)xdx作者提出直接学习没有先验知识的基础一般分布 P ( x ) P(x) P(x)。给定标签 y y y 的范围,其中最小 y 0 y_0 y0 和最大 y n y_n yn ( 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 ^ \hat{y} y^。(这个 P ( x ) P(x) P(x)就是 y 0 y_0 y0~ y n y_n yn之间的概率分布)。
    y ^ = ∫ − ∞ + ∞ P ( x ) x d x = ∫ y 0 y n P ( x ) x d x . \hat{y}=\int_{-\infty}^{+\infty}P(x)x\mathrm{d}x=\int_{y_0}^{y_n}P(x)x\mathrm{d}x. y^=∫−∞+∞P(x)xdx=∫y0ynP(x)xdx.为了与卷积神经网络保持一致,作者将连续域上的积分转换为离散表示,通过将范围 y 0 , y n y_0,y_n y0,yn离散化为间隔 Δ \Delta Δ的集合 { y 0 , y 1 , ... , y i , y i + 1 , ... , y n − 1 , y n } \{y_0,y_1,\ldots,y_i,y_{i+1},\ldots,y_{n-1},y_n\} {y0,y1,...,yi,yi+1,...,yn−1,yn}, Δ = y i + 1 − y i , ∀ i ∈ 0 , n − 1 \Delta=y_{i+1}-y_i,\forall i\in0,n-1 Δ=yi+1−yi,∀i∈0,n−1(为了简单,作者在后续的实验直接使用 Δ = 1 \Delta=1 Δ=1)。因此,给定离散分布特性 ∑ i = 0 n P ( y i ) = 1 \sum_{i=0}^nP(y_i)=1 ∑i=0nP(yi)=1,估计回归值 y ^ \hat{y} y^可以表示为
    y ^ = ∑ i = 0 n P ( y i ) y i \hat{y}=\sum_{i=0}^nP(y_i)y_i y^=i=0∑nP(yi)yi P ( y i ) P(y_i) P(yi)可以通过由n + 1个单元组成的 softmax S ( ⋅ ) \mathcal{S}(\cdot) S(⋅)层轻松实现。 请注意, y ^ \hat{y} y^可以使用任何传统损失目标(例如 SmoothL1、IoU Loss或 GIoU Loss)以端到端方式进行训练。 为了促进其有效优化,我们进一步引入分布焦点损失(DFL)。
    为了方便理解,现举例yolov8使用的方法

    yolov8中bbox分支回归的是 4 ∗ r e g _ m a x = 4 ∗ 16 = 64 4 * reg\{max} = 4 * 16=64 4∗reg_max=4∗16=64(bbox分支最终结果: bs, num_anchor, 64),也就是 { y 0 , y 1 , ... , y i , y i + 1 , ... , y n − 1 , y n } = { 0 , 1 , . . . , 7 , 8 , . . . , 14 , 15 } \{y_0,y_1,\ldots,y_i,y{i+1},\ldots,y_{n-1},y_n\}=\{0, 1, ...,7,8,...,14, 15\} {y0,y1,...,yi,yi+1,...,yn−1,yn}={0,1,...,7,8,...,14,15},因为有上、下、左、右四条边,所以是 4 ∗ 16 4 * 16 4∗16。这个 { 0 , 1 , . . . , 7 , 8 , . . . , 14 , 15 } \{0, 1, ...,7,8,...,14, 15\} {0,1,...,7,8,...,14,15}的value是softmax输出,因此是一个概率分布,这个anchor points对于边界框四条边偏移量 y ^ \hat{y} y^由下面公式可得出:( ( P ( y 0 ) , P ( y 1 ) , ... , P ( y 7 ) , P ( y 8 ) , ... , P ( y 15 ) ) ({P(y_0)}, {P(y_1)}, \dots, {P(y_7)}, {P(y_8)}, \dots,{P(y_{15})}) (P(y0),P(y1),...,P(y7),P(y8),...,P(y15))分别是 ( 0 , 1 , ... , 7 , 8 , ... , 15 ) 一一对应处的概率 (0, 1, \dots, 7, 8, \dots,15)一一对应处的概率 (0,1,...,7,8,...,15)一一对应处的概率)(其实 { 0 , 1 , . . . , 7 , 8 , . . . , 14 , 15 } \{0, 1, ...,7,8,...,14, 15\} {0,1,...,7,8,...,14,15}就是anchor points到bbox边的距离,模型输出的就是这些距离对应的概率,最终得到 y ^ \hat{y} y^就是求距离离散概率分布的期望,即最终的anchor points到bbox边的距离,这个期望最大是15,也就是说模型预测出的anchor points到bbox边的距离最大是15)
    y ^ = ∑ i = 0 n P ( y i ) y i = ∑ i = 0 15 P ( y i ) y i = 0 × P ( y 0 ) + 1 × P ( y 1 ) + ⋯ + 7 × P ( y 7 ) + 8 × P ( y 8 ) + ⋯ + 15 × P ( y 15 ) \hat{y}=\sum_{i=0}^nP(y_i)y_i=\sum_{i=0}^{15}P(y_i)y_i=0\times{P(y_0)}+1\times{P(y_1)+\dots +7\times{P(y_7)}+8\times{P(y_8)}+\dots+15\times{P(y_{15})}} y^=i=0∑nP(yi)yi=i=0∑15P(yi)yi=0×P(y0)+1×P(y1)+⋯+7×P(y7)+8×P(y8)+⋯+15×P(y15)然后yolov8会使用dist2box函数将偏移量(anchor points到bbox四条边的距离)转化为xywh

  • For localization quality representation
    图 5 图5 图5

    如图5b所示,一般分布的统计量往往与其真实的定位质量有很强的相关性。更具体地来说,图5c和5d所示,边界框分布的形状(平坦度)可以清晰地反映预测结果的定位质量:分布越尖锐,预测的边界框越准确,反之亦然。 最后,由于输入(边界框的分布统计)和输出(LQE 分数)潜在地高度相关,因此通过分布信息的指导可能会更容易且非常有效地进行更好的 LQE。
    Convolution -> Distribution-Guided Quality Predictor.

    受分布统计和 LQE 分数之间可能存在的强相关性的启发,作者提出了一个非常轻量级的子网络,它只有几十个(例如 64 个)隐藏单元,在这些分布统计的基础上产生可靠的 LQE 分数,而不是隐式卷积特征。作者将这种轻量级子网络称为分布引导质量预测器(DGQP)。它将学习到的一般分布 P 的统计数据传送到一个微小的子网络中(见图6中的红色虚线框),从而获得预测的 LQE 分数。
    图 6 图6 图6

    首先会从bbox分支中的分布中选择Top-k个values和它们的mean,图中的k=4,将Top-K和m进行concat,并且bbox有上、下、左、右四条边,这样就由 H × W × 4 n H\times W\times4n H×W×4n变为 H × W × 20 H\times W\times20 H×W×20( 20 = 4 × 5 20 = 4 \times 5 20=4×5)。
    F = C o n c a t ( { T o p k m ( P w ) ∣ w ∈ { l , r , t , b } } ) , \mathbf{F}=\mathrm{Concat}(\{\mathrm{Topkm}(\mathbf{P}^w)\mid w\in\{l,r,t,b\}\}), F=Concat({Topkm(Pw)∣w∈{l,r,t,b}}),选择Top-k个values和它们的mean有一下两个好处:

    1、 因为 P w \mathbf{P}^{w} Pw的和是固定值1(softmax的输出,概率和为1),Top-k个values和它们的mean可以基本的反映分布的平坦程度:值越大,分布越尖锐,IoU越大;值越小,分布越扁平,IoU越小。

    2、 Top-k values和mean可以使统计特征对其在分布域中的相对偏移不敏感(见图7),从而产生不受对象尺度影响的稳健表示。(就是不管gt的尺度大小,Top-k values和mean的大小都反映的是1中的平坦程度) 图 7 图7 图7

    然后就是下面的公式,因为全连接层就相当于乘上一个矩阵, W 1 ∈ R d × 4 ( k + 1 ) \mathbf{W}1\in\mathbb{R}^{d\times4(k+1)} W1∈Rd×4(k+1), W 2 ∈ R 1 × d \mathbf{W}{2}\in\mathbb{R}^{1\times d} W2∈R1×d, σ \sigma σ和 δ \delta δ分别是sigmoid和relu。
    I = F ( F ) = σ ( W 2 δ ( W 1 F ) ) , I=\mathcal{F}(\mathbf{F})=\sigma(\mathbf{W}_2\delta(\mathbf{W}_1\mathbf{F})), I=F(F)=σ(W2δ(W1F)),最终的 J \mathbf{J} J通过下面的公式得出
    J = C × I \mathbf{J}=\mathbf{C}\times I J=C×I其中的 C = C 1 , C 2 , ... , C m , C i ∈ 0 , 1 \mathbf{C}=C_1,C_2,\\ldots,C_m,C_i\in0,1 C=C1,C2,...,Cm,Ci∈0,1就是分类分支的输出,m个类别的最初的分类表示。

Generalized Focal Loss

  • 原始的Focal Loss (FL)
    F L ( p ) = − ( 1 − p ι ) γ log ⁡ ( p ι ) , p ι = { p , w h e n y = 1 1 − p , w h e n y = 0 \left.\mathbf{FL}(p)=-(1-p_{\iota})^{\gamma}{\log{(p_{\iota})},p_{\iota}}=\left\{\begin{array}{cc}p,&\mathrm{when~}y=1\\1-p,&\mathrm{when~}y=0\end{array}\right.\right. FL(p)=−(1−pι)γlog(pι),pι={p,1−p,when y=1when y=0缩放因子 ( 1 − p t ) γ (1-p_{t})^{\gamma} (1−pt)γ在训练期间自动降低简单示例的贡献,并快速将模型集中在困难示例上。

  • Quality Focal Loss (QFL)
    然而目前的FL形式仅支持 { 1 , 0 } \{1,0\} {1,0}离散标签,但我们的新标签 y y y 包含小数。 因此,作者扩展 FL 的两个部分,以实现分类-IoU 联合表示情况下的成功训练:
    1、 交叉熵部分 ( 1 − p t ) γ (1-p_{t})^{\gamma} (1−pt)γ扩展为其完整版本 − ( ( 1 − y ) l o g ( 1 − σ ) + y l o g ( σ ) ) -((1-y)\mathrm{log}\left(1-\sigma\right)+y\mathrm{log}\left(\sigma\right)) −((1−y)log(1−σ)+ylog(σ))
    2、 缩放因子部分 ( 1 − p t ) γ (1-p_{t})^{\gamma} (1−pt)γ被推广为估计 σ \sigma σ与其连续标签 y y y之间的绝对距离,即 ∣ y − σ ∣ β ( β ≥ 0 ) |y-\sigma|^{\beta}\left(\beta\geq0\right) ∣y−σ∣β(β≥0),这里 ∣ ⋅ ∣ \left|\cdot\right| ∣⋅∣保证非负性。
    Q F L ( σ ) = − ∣ y − σ ∣ β ( ( 1 − y ) l o g ( 1 − σ ) + y l o g ( σ ) ) \mathbf{QFL}(\sigma)=-|y-\sigma|^{\beta}((1-y)\mathrm{log}\left(1-\sigma\right)+y\mathrm{log}\left(\sigma\right)) QFL(σ)=−∣y−σ∣β((1−y)log(1−σ)+ylog(σ)) σ = y \sigma=y σ=y是 QFL 的全局最小解。图8是当label y = 0.5 y=0.5 y=0.5时,几种 β \beta β值得QFL可视化。可以看到当一个例子的质量估计不准确并且偏离标签 y y y时,调制因子相对较大,因此模型将更关注于学习难学习得样本;随着质量估计变得准确,即 σ → y \sigma\rightarrow y σ→y,该调制因子趋于0,并且对经过良好估计的示例的损失进行降权变小。实验中 β = 2 \beta=2 β=2的QFL效果最好。
    图 8 : l a b e l y = 0.5 图8:label y=0.5 图8:labely=0.5

  • Distribution Focal Loss (DFL)
    虽然 y ^ = ∑ i = 0 n P ( y i ) y i \hat{y}=\sum_{i=0}^nP(y_i)y_i y^=∑i=0nP(yi)yi已经可以使用传统损失目标以端到端的方式进行训练,例如 GIoU Loss,但 P ( y i ) P(y_i) P(yi)的值有无限种组合可以得到最终的积分结果 y ^ \hat{y} y^,可能会存在扁平 P ( y i ) P(y_i) P(yi)分布(LQE小),可能会降低学习效率。作者提出了Distribution Focal Loss (DFL)让网络迅速关注标签 y y y附近的值,主要是通过扩大 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 = 1.2 y=1.2 y=1.2,则 y i = 1 y_{i}=1 yi=1, y i + 1 = 2 y_{i+1}=2 yi+1=2)。
    D F L ( P i , P i + 1 ) = − ( ( y i + 1 − y ) l o g ( P i ) + ( y − y i ) l o g ( P i + 1 ) ) \mathbf{DFL}(P_i,P_{i+1})=-((y_{i+1}-y)\mathrm{log}(P_i)+(y-y_i)\mathrm{log}(P_{i+1})) DFL(Pi,Pi+1)=−((yi+1−y)log(Pi)+(y−yi)log(Pi+1))DFL的全局最小解,即 i . e , P i = y i + 1 − y y i + 1 − y i , P i + 1 = y − y i y i + 1 − y i \mathrm{i.e},P_i=\frac{y_{i+1}-y}{y_{i+1}-y_i},P_{i+1}=\frac{y-y_i}{y_{i+1}-y_i} i.e,Pi=yi+1−yiyi+1−y,Pi+1=yi+1−yiy−yi,可以保证估计的回归目标 y ^ \hat{y} y^无限接近对应的标签 y y y,即 y ^ = ∑ j = 0 n P ( y j ) y j = P i y i + P 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}^nP(y_j)y_j=P_iy_i+P_{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=Piyi+Pi+1yi+1=yi+1−yiyi+1−yyi+yi+1−yiy−yiyi+1=y
    yolov8中的DFL loss代码

    python 复制代码
    '''
    target相当于y=1.2
    tl = 1 = y(i)
    tr = 2 = y(i+1)
    wl = y(i+1) - y = 2 - 1.2 = 0.8
    wr = y - y(i) =1.2 - 1 = 0.2 = 1 - wl = 1 - 0.8
    # F.cross_entropy的详细介绍可参考https://blog.csdn.net/wuliBob/article/details/104119616
    # pred_dist: [bs*n*4, reg_max](n是正样本对应的数量,reg_max一般为16)
    # tl.view(-1): [bs*n*4, ]
    F.cross_entropy(pred_dist, tl.view(-1), reduction='none').view(tl.shape): log(P(i))
    F.cross_entropy(pred_dist, tr.view(-1), reduction='none').view(tl.shape): log(P(i+1))
    '''
    tl = target.long()  # target left
    tr = tl + 1  # target right
    wl = tr - target  # weight left
    wr = 1 - wl  # weight right
    return (F.cross_entropy(pred_dist, tl.view(-1), reduction='none').view(tl.shape) * wl +
            F.cross_entropy(pred_dist, tr.view(-1), reduction='none').view(tl.shape) * wr).mean(-1, keepdim=True)
  • Generalized Focal Loss (GFocal)
    注意,QFL和DFL可以统一为通用形式,论文中将其称为Generalized Focal Loss (GFocal)。假设模型将两个变量 y l , y r ( y l ≤ y r ) y_{l},y_{r}\left ( y_l\leq y_r \right ) yl,yr(yl≤yr)的概率估计为 p y l , p y r ( p y l ≥ 0 , p y r ≥ 0 , p y l + p y r = 1 ) p_{y_l},p_{y_r}\text{(}p_{y_l}\geq0,p_{y_r}\geq0,p_{y_l}+p_{y_r}=1) pyl,pyr(pyl≥0,pyr≥0,pyl+pyr=1),其线性组合的最终预测为 y ^ = y l p y l + y r p y r ( y l ≤ y ^ ≤ y r ) \hat{y}=y_lp_{y_l}+y_{r}p_{y_{r}}(y_{l}\leq\hat{y}\leq y_{r}) y^=ylpyl+yrpyr(yl≤y^≤yr)。 预测 y ^ \hat{y} y^对应的连续标签 y y y也满足 y l ≤ y ≤ y r y_{l}\leq y\leq y_{r} yl≤y≤yr。 以绝对距离 ∣ y − y ^ ∣ β ( β ≥ 0 ) |y-\hat{y}|^{\boldsymbol{\beta}}(\beta\geq0) ∣y−y^∣β(β≥0)作为调制因子,GFocal 的具体公式可写为
    G F o c a l ( p y l , p y r ) = − ∣ y − ( y l p y l + y r p y r ) ∣ β ( ( y r − y ) l o g ( p y l ) ) + ( y − y l ) l o g ( p y r ) ) \begin{gathered} \mathbf{GFocal}(p_{y_{l}},p_{y_{r}}) =-\big|y-(y_{l}p_{y_{l}}+y_{r}p_{y_{r}})\big|^{\beta}\big((y_{r}-y)\mathrm{log}(p_{y_{l}})\big) +(y-y_{l})\mathrm{log}\left(p_{y_{r}}\right)) \end{gathered} GFocal(pyl,pyr)=− y−(ylpyl+yrpyr) β((yr−y)log(pyl))+(y−yl)log(pyr))

Training Dense Detectors With GFocal

  1. 在推理过程中,我们直接将Classification-IoU Joint Representation作为 NMS 分数,而不需要乘以任何单独的质量预测(如果存在)。
  2. 用于预测边界框每个位置的回归分支的最后一层现在有n + 1个输出,而不是1个输出,其中最终位置是通过对这n + 1个单元进行简单离散积分获得的,这带来的额外计算可以忽略不计。
    训练损失定义如下:
    L = 1 N p o s ∑ z L Q + 1 N p o s ∑ z 1 { c z ∗ > 0 } ( λ 0 L B + λ 1 L D ) \mathcal{L}=\frac1{N_{pos}}\sum_{z}\mathcal{L}{Q}+\frac1{N{pos}}\sum_{z}\mathbb{1}{\{c{z}^{*}>0\}}(\lambda_{0}\mathcal{L}{\mathcal{B}}+\lambda{1}\mathcal{L}{\mathcal{D}}) L=Npos1z∑LQ+Npos1z∑1{cz∗>0}(λ0LB+λ1LD)其中 L Q {L}{Q} LQ是 QFL, L D {L}{D} LD是 DFL。 通常, L B {L}{B} LB表示GIoU Loss。 N p o s {N}{pos} Npos代表正样本数量。 λ 0 {\lambda}{0} λ0(通常默认为 2)和 λ 1 {\lambda}{1} λ1(实际上是 1 4 \frac{1}{4} 41 ,在四个方向上平均)分别是 L Q {L}{Q} LQ和 L D {L}{D} LD的平衡权重。 总和是在金字塔特征图上的所有位置 z z z上计算的。 1 { c z ∗ > 0 } 1{\{c_{z}^{*}>0\}} 1{cz∗>0}是指示函数,如果 c z ∗ > 0 c_{z}^{*}>0 cz∗>0则为1,否则为0(这个应该是正样本为1,负样本为0,计算bbox回归损失只有正样本参与)。
相关推荐
糖果店的幽灵2 分钟前
大模型测评DeepEval快速入门-安全与通用指标详解
人工智能·安全·langgraph·大模型测评·deepeval
江畔柳前堤6 小时前
roLabelImg 详细安装教程
开发语言·人工智能·后端·云原生
阿里云大数据AI技术6 小时前
分链路差异化设计的DSP准实时数仓|钛动科技基于阿里云实时计算 Flink 版 + DLF Paimon + EMR Serverless StarRocks 的实践
人工智能·flink
陕西企来客6 小时前
2026年7月AI智能搜索曝光趋势研判
大数据·人工智能·机器学习·ai智能搜索曝光
阿里云大数据AI技术7 小时前
从算力到智能体,面向 Agentic AI 的基础设施演进
人工智能·agent
hangyuekejiGEO7 小时前
GEO技术服务选型指南
大数据·人工智能·python
阿里云大数据AI技术8 小时前
EMR Serverless Spark AI Function 的双维降本实践
人工智能·sql·spark
维基框架8 小时前
GitHub源码处理提速 一趟扫描反而更慢
人工智能·github
冬奇Lab8 小时前
代码库知识库系列(05):向量检索 vs 知识图谱——加了调用图并没有变更好
人工智能
AKAMAI8 小时前
你的源服务器可能是你做出的最昂贵决定
运维·人工智能·云计算