【YOLOv8改进- 损失函数】 NWD(Normalized Wasserstein Distance:归一化 Wasserstein 距离),助力微小目标检测。

YOLOv8目标检测创新改进与实战案例专栏

专栏目录: YOLOv8有效改进系列及项目实战目录 包含卷积,主干 注意力,检测头等创新机制 以及 各种目标检测分割项目实战案例

专栏链接: YOLOv8基础解析+创新改进+实战案例

介绍

image-20240830222028156

摘要

检测微小目标是一个非常具有挑战性的问题,因为微小目标的尺寸仅包含几个像素。我们证明了当前最先进的检测器在微小目标上的表现并不理想,原因在于缺乏足够的外观信息。我们的关键观察是,基于交并比(IoU)的度量方法(例如IoU本身及其扩展)对微小目标的位置偏差非常敏感,并且在使用基于锚点的检测器时会严重影响检测性能。为了解决这一问题,我们提出了一种新的评估度量方法,使用Wasserstein距离来检测微小目标。具体来说,我们首先将边界框建模为二维高斯分布,然后提出了一种新的度量方法,称为归一化Wasserstein距离(NWD),通过边界框对应的高斯分布来计算它们之间的相似性。所提出的NWD度量方法可以轻松嵌入到任何基于锚点的检测器的分配、非极大值抑制和损失函数中,以替代常用的IoU度量。我们在一个用于微小目标检测的新数据集(AI-TOD)上评估了我们的度量方法,该数据集的平均目标尺寸比现有的目标检测数据集要小得多。大量实验表明,采用NWD度量方法后,我们的方法性能比标准微调基线高出6.7个AP点,比最先进的竞争对手高出6.0个AP点。代码已发布在:https://github.com/jwwangchn/NWD。

文章链接

论文地址:论文地址

代码地址:代码地址

基本原理

Normalized Wasserstein Distance (NWD) 是一种专门为微小物体检测(Tiny Object Detection, TOD)设计的度量方法,旨在替代传统的 IoU(Intersection over Union)度量,用于衡量两个边界框(bounding boxes)之间的相似性。

1. NWD 的定义

NWD 基于 Wasserstein 距离,这是一种来自最优传输理论的度量方法。为了使用 Wasserstein 距离,作者首先将边界框建模为二维高斯分布,然后通过高斯分布之间的 Wasserstein 距离来计算边界框之间的相似性。

具体而言,给定两个 2D 高斯分布

### 使用NWD改进YOLOv8损失函数YOLOv8中引入归一化Wasserstein距离(NWD)作为损失函数的一部分可以显著提升模型对于微小目标位置偏差的鲁棒性[^2]。具体实现方式如下: #### 修改后的损失函数定义 传统上,YOLO系列模型采用基于IoU的距离度量来评估预测边界框与真实边界框之间的差异。然而,当面对尺度较小的目标时,这种简单的几何重叠测量可能不足以捕捉到细微的位置变化。 为此,在新的损失项设计中,除了保持原有的分类和回归分支外,还额外加入了一个由NWD构成的新组件。该组件能够更加精确地衡量两个分布间的统计相似程度,从而更好地适应复杂场景下的物体定位需求。 ```python import torch from scipy.stats import wasserstein_distance def nwd_loss(pred_boxes, gt_boxes): """ Calculate the Normalized Wasserstein Distance between predicted and ground truth boxes. Args: pred_boxes (Tensor): Predicted bounding boxes with shape [batch_size, num_boxes, 4]. gt_boxes (Tensor): Ground-truth bounding boxes with shape [batch_size, num_boxes, 4]. Returns: Tensor: Computed NWD loss value. """ batch_size = pred_boxes.size(0) losses = [] for i in range(batch_size): # Normalize coordinates to ensure comparability across different scales norm_pred = normalize_coordinates(pred_boxes[i]) norm_gt = normalize_coordinates(gt_boxes[i]) distances = [ wasserstein_distance(norm_pred[j].cpu().numpy(), norm_gt[j].cpu().numpy()) for j in range(len(norm_pred)) ] avg_dist = sum(distances)/len(distances) if len(distances)>0 else 0 losses.append(avg_dist) return torch.tensor(losses).mean() def normalize_coordinates(box_tensor): """Normalize coordinate values within each box.""" mins = box_tensor.min(dim=-1)[0] maxs = box_tensor.max(dim=-1)[0] normalized = ((box_tensor - mins.unsqueeze(-1)) / (maxs - mins + 1e-9).unsqueeze(-1)) return normalized ``` 上述代码展示了如何计算一对预测框和真值框之间的一维投影下标准化后的Wasserstein距离,并将其平均值作为最终的NWD损失输出。需要注意的是,这里假设输入张量已经过适当预处理,使得每个维度都对应于有效的空间坐标范围。 通过这种方式增强原有框架内的损失机制,可以在一定程度上缓解由于极端情况引起的学习困难问题,进而有助于整体性能指标的改善。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

YOLO大师

你的打赏,我的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值