目标检测-回归损失函数

目录

1 IoU

1.1 论文

1.2 概念及公式

1.3 不足

2 GIoU

2.1 论文

2.2 概念及公式

2.3 不足

3 DIoU

3.1 论文

3.2 概念及公式

3.3 不足

4 CIoU

4.1 论文

4.2 概念及公式

4.3 不足

5 EIoU

5.1 论文

5.2 概念及公式

5.3 代码(包含IoU、GIoU、DIoU、CIoU、EIoU等)

6 MPDIoU

6.1 论文

6.2 概念及公式

6.3 代码

7 NWDIoU

7.1 论文

7.2 概念及公式

7.3 代码


最近在对损失函数进行改进,对经典的损失函数以及最近学习的损失函数进行梳理

1 IoU

1.1 论文

UnitBox: An Advanced Object Detection Network

1.2 概念及公式

图1 IoU示意图

IoU:交并比,指的是gt(真实框)与预测框交集和并集的比值,示意图见图1,计算公式如下:

IoU=\frac{\left | A\cap B \right |}{\left | A\cup B \right |}

其中,A为真实框,B为预测框。

1.3 不足
  • 如果两个框不相交,则|A∩B|=0,得到IoU=0,不能反映两者的距离大小

2 GIoU

2.1 论文

Generalized Intersection over Union: A Metric and A Loss for Bounding Box Regression

2.2 概念及公式

图2 GIoU示意图

GIoU示意图如图2所示,公式如下:

GIoU=IoU-\frac{\left | C-A\cup B \right |}{\left | C \right |}

其中,A为真实框,B为预测框,C为A和B的最小封闭框。加入后面这一惩罚项,当A和B无交集时,可以反映两个框的距离。

2.3 不足
  • 当一个框被另一个框包围时,退化为IoU(|C|=|A∪B|)

3 DIoU

3.1 论文

Distance-IoU Loss: Faster and Better Learning for Bounding Box Regression

3.2 概念及公式

图3 DIoU示意图

DIoU示意图如图3所示,公式如下:

DIoU=IoU-\frac{\rho ^{2}\left ( A,B \right )}{c^{2}}

其中,A为真实框,B为预测框,C为A和B的最小封闭框。ρ²(A,B)为A、B中心点的距离,c为最小封闭框C的对角线长度。

3.3 不足
  • 当中心点重合时,退化为IoU

  • 没有考虑对宽高的收敛(这一问题前面也有,在这里提一下是因为后面的CIoU和EIoU主要针对这一点提出改进)

4 CIoU

4.1 论文

提出损失函数应考虑三个几何因素,即:1)重叠面积;2)距离;3)纵横比(宽高比)。

Enhancing Geometric Factors in Model Learning and Inference for Object Detection and Instance Segmentation

4.2 概念及公式

图4 CIoU示意图

CIoU示意图如图4所

### Alpha-IoU 损失函数概述 Alpha-IoU (Intersection over Union) 是一种用于提高目标检测精度的损失函数,在传统 IoU 基础上进行了改进。该损失函数旨在解决标准 CIOU 和 GIOU 存在的一些局限性,特别是在处理不同尺度的目标时表现更优[^2]。 ### Alpha-IoU 的特点 Alpha-IoU 主要具有以下几个特性: - **自适应调整**:通过引入参数 α 来动态调节边界框回归的方向和力度。 - **多尺度鲁棒性**:对于大小不同的物体都能保持良好的收敛性和稳定性。 - **增强泛化能力**:不仅提高了模型对训练集的学习效率,也增强了其对外部数据集的预测准确性[^3]。 ### 实现细节 为了实现 Alpha-IoU 损失函数,通常会在现有的框架基础上进行扩展。以下是 Python 中的一个简单示例代码片段展示如何计算两个矩形之间的 Alpha-IoU: ```python import torch def alpha_iou(pred_boxes, target_boxes, alpha=0.5): """ 计算 pred_boxes 与 target_boxes 之间 Alpha-IoU 参数: pred_boxes: 预测边框 Tensor 形状为 [N, 4], 其中 N 表示样本数量. 边框格式应为 [cx, cy, w, h]. target_boxes: 目标边框 Tensor 同样形状为 [N, 4]. 边框格式同样为 [cx, cy, w, h]. alpha: 调节因子,默认值设为 0.5 返回: ious: 所有配对间的 Alpha-IoU 结果 Tensor 形状为 [N] """ # 获取中心坐标差绝对值 |c_x1 - c_x2| 及宽度高度之和 s_w = w1 + w2, s_h = h1 + h2 center_diffs = torch.abs(pred_boxes[:, :2] - target_boxes[:, :2]) sum_sizes = pred_boxes[:, 2:] + target_boxes[:, 2:] # 计算交并比IoU以及额外项E(alpha) inter_wh = torch.max(sum_sizes / 2 - center_diffs, torch.zeros_like(center_diffs)) intersection_area = inter_wh.prod(dim=-1) union_areas = pred_boxes[:, 2:].prod(-1) + \ target_boxes[:, 2:].prod(-1) - intersection_area ious = intersection_area / union_areas.clamp(min=1e-7) e_alpha = ((center_diffs.pow(2).sum(-1)) / (((pred_boxes[:, 2:] * target_boxes[:, 2:]).sqrt().sum(-1)).pow(2))).pow(alpha) return ious - e_alpha ``` 此段代码展示了如何定义 `alpha_iou` 函数来衡量预测框 (`pred_boxes`) 和真实标签框 (`target_boxes`) 间的关系,并返回它们各自的 Alpha-IoU 得分。注意这里使用了 PyTorch 库来进行张量运算操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值