VarifocalNe:全面提升密集目标的检测

作者针对密集目标,提出了一种可同时表示对象存在置信度和定位精度的 IACS,用于预测密集的物体检测器,并设计了一个新的损失函数,称为 Varifocal损失,用于训练密集的物体检测器来预测 IACS。同时,设计了一种新的高效星形边界框特征表示,用于估算 IACS和改进粗略边界框。结合这两个新组件和边界框优化分支,在 FCOS架构上构建了一个新的密集目标检测器 VarifocalNet。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

相关代码如下:

class VFLoss(nn.Module):
    def __init__(self, loss_fcn, gamma=1.5, alpha=0.25):
        super(VFLoss, self).__init__()
        # transmit nn.BCEWithLogitsLoss() 
        self.loss_fcn = loss_fcn  #
        self.gamma = gamma
        self.alpha = alpha
        self.reduction = loss_fcn.reduction
        self.loss_fcn.reduction = 'mean'  # required to apply VFL to each element

    def forward(self, pred, true):
        loss = self.loss_fcn(pred, true)
        pred_prob = torch.sigmoid(pred)  # prob from logits
        focal_weight = true * (true > 0.0).float() + self.alpha * (pred_prob - true).abs().pow(self.gamma) * (
                    true <= 0.0).float()
        loss *= focal_weight
        if self.reduction == 'mean':
            return loss.mean()
        elif self.reduction == 'sum':
            return loss.sum()
        else:
            return loss

使用方法:在loss.py相关位置替换Focal loss改写即可

在这里插入图片描述



版权声明:本文为qq_33589446原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/qq_33589446/article/details/129581576