【YOLOv8改进】Inner-IoU: 基于辅助边框的IoU损失(论文笔记+引入代码)

简介: YOLO目标检测专栏探讨了IoU损失的局限性,并提出创新改进。分析发现,不同尺度的辅助边框对高IoU和低IoU样本的回归有不同影响。因此,提出了Inner-IoU Loss,利用尺度因子ratio控制辅助边框大小以优化损失计算。实验验证了该方法能提升检测效果,增强泛化能力。创新点包括根据样本特性选择辅助边框尺度和Inner-IoU Loss的设计。更多详情见YOLO目标检测创新改进与实战案例专栏。

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



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




专栏链接: YOLO目标检测创新改进与实战案例



摘要


随着检测器的迅速发展, 边框回归取得了巨大的进步。然而,现有的基于 IoU 的边框回归仍聚焦在通过加入新的损失项来加速收敛,忽视 IoU 损失项其自身的限制。尽管理论上 IoU 损失能够有效描述边框回归状态,在实际应用中,它无法根据不同检测器与检测任务进行自我调整,不具有很强的泛化性。基于以上,我们首先分析了 BBR 模式,得出结论在回归过程区分不同回归样本并且使用不同尺度的辅助边框计算损失能够有效加速边框回归过程。对于高 IoU 样本,使用较小的辅助边框计算损失能够加速收敛,而较大辅助边框适用于低 IoU 样本。接着,我们提出了 Inner-IoU Loss, 其通过辅助边框计算 IoU 损失。针对不同的数据集与检测器,我们引入尺度因子 ratio 控制辅助边框的尺度大小用于计算损失。最后,将 Inner-IoU 集成至现有的基于 IoU 损失函数中进行仿真实验与对比实验。实验结果表明在使用本文所提出方法后检测效果得到进一步提升,验证了本文方法的有效性以及泛化能力。


创新点


• 分析边框回归过程与模式,基于边框回归问题自身特性,提出在模型训练过程中使用较小的辅助边框计算损失对高IoU 样本的回归有增益效果,低IoU样本则与之相反。


• 提出了Inner-IoU Loss ,使用尺度因子ratio控制生成不同尺度的辅助边框用于计算损失。将其应用至现有IoU-based 损失函数中能够获得更快更为有效的回归结果。


方法:


1.边框回归模式分析


IoU 损失函数在计算机视觉任务中具有广泛的应用。在边框回归过程中不但能够评估回归状态的好坏,而且能够通过计算回归损失进行梯度传播从而加速收敛。在这我们讨论回归过程中IoU 变化与边框尺寸的关系,分析边框回归问题的自身特性,解释本文所提出方法的合理性。



图1(a)



图1(b)


如上图所示,其中图1.a 为IoU-Deviation 曲线图,其水平轴与竖直轴分别表示deviation与IoU 值,三种不同颜色曲线对应不同尺度边框的IoU 变化曲线。A,B,C,D,E 分别对应achors and GT 框5 种不同位置关系,其中红色边框代表长宽为10 的anchors, 其对应的GT 框用黑色边框表示。图1.b 为ABS(Grad)-Deviation 曲线图,与图1.a 所不同的是在图1.b 中纵轴表示IoU 梯度的绝对值。我们假设实际边框尺寸为10,尺寸为8 和12 的边框作为其辅助边框。在图a与图b 中A,E 对应低IoU 样本回归状态,B,D 对应高IoU 样本回归状态,由图1可以得到以下结论。


1. 由于辅助边框与实际边框之间仅存在尺度差异,在回归过程中其IoU 值的变化趋势与实际边框的IoU值变化趋势一致,能够反应实际边框回归结果的质量。


2. 对于高IoU 样本,较小尺度的辅助边框的IoU梯度的绝对值大于实际边框IoU 梯度的绝对值。


3. 对于低IoU 样本,较大尺度的辅助边框的IoU梯度的绝对值大于实际边框IoU 梯度的绝对值。基于以上分析,使用较小尺度的辅助边框计算IoU 损失将有助于高IoU 样本回归,达到加速收敛的效果。与之相反使用较大尺度的辅助边框计算IoU 损失能够加速低IoU 样本回归过程。


yoloy融合Inner-IoU


def innerciou(box1, box2, ratio = 1.0, xywh=True, eps=1e-7): 
    (x1, y1, w1, h1), (x2, y2, w2, h2) = box1.chunk(4, -1), box2.chunk(4, -1)
    w1
, h1, w2, h2_ = w1 / 2, h1 / 2, w2 / 2, h2 / 2
    b1_x1, b1_x2, b1_y1, b1y2 = x1 - w1, x1 + w1, y1 - h1, y1 + h1_
    b2_x1, b2_x2, b2_y1, b2y2 = x2 - w2, x2 + w2, y2 - h2, y2 + h2_
    #IoU       #IoU       #IoU       #IoU       #IoU       #IoU       #IoU       #IoU       #IoU       #IoU      #IoU    
    inter = (torch.min(b1_x2, b2_x2) - torch.max(b1_x1, b2_x1)).clamp(0)  \
    (torch.min(b1_y2, b2_y2) - torch.max(b1_y1, b2_y1)).clamp(0)
    union = w1 
 h1 + w2  h2 - inter + eps
    iou = inter / union
   #Inner-IoU      #Inner-IoU#Inner-IoU#Inner-IoU#Inner-IoU#Inner-IoU#Inner-IoU       
    inner_b1_x1, inner_b1_x2, inner_b1_y1, inner_b1y2 = x1 - w1
ratio, x1 + w1*ratio,\
     y1 - h1
ratio, y1 + h1_ratio
    inner_b2_x1,inner_b2_x2, inner_b2_y1, inner_b2y2 = x2 - w2ratio, x2 + w2_ratio,\
     y2 - h2*ratio, y2 + h2ratio
    inner_inter = (torch.min(inner_b1_x2, inner_b2_x2) - torch.max(inner_b1_x1, inner_b2_x1)).clamp(0) 
 \
   (torch.min(inner_b1_y2, inner_b2_y2) - torch.max(inner_b1_y1, inner_b2_y1)).clamp(0)
    inner_union = w1ratio  h1ratio + w2ratio  h2ratio - inner_inter + eps
    inner_iou = inner_inter/inner_union

    cw = torch.max(b1_x2, b2_x2) - torch.min(b1_x1, b2_x1)  # convex  width
    ch = torch.max(b1_y2, b2_y2) - torch.min(b1_y1, b2_y1)  # convex height
    c2 = cw  2 + ch  2 + eps  # convex diagonal squared
    rho2 = ((b2_x1 + b2_x2 - b1_x1 - b1_x2)  2 + (b2_y1 + b2_y2 - b1_y1 - b1_y2)  2) / 4  # center dist  2
    v = (4 / math.pi 
 2)  torch.pow(torch.atan(w2 / h2) - torch.atan(w1 / h1), 2)
    with torch.no_grad():
alpha = v / (v - iou + (1 + eps))
    return inner_iou - (rho2 / c2 + v 
 alpha)  

task.py使用与yaml配置


详见: https://blog.csdn.net/shangyanaf/article/details/135904930


相关文章
|
机器学习/深度学习
YOLOv5改进 | DAttention (DAT)注意力机制实现极限涨点
YOLOv5改进 | DAttention (DAT)注意力机制实现极限涨点
633 0
|
算法 计算机视觉
YOLOv8改进 | 损失函数篇 | 最新ShapeIoU、InnerShapeIoU损失助力细节涨点
YOLOv8改进 | 损失函数篇 | 最新ShapeIoU、InnerShapeIoU损失助力细节涨点
799 2
|
机器学习/深度学习 计算机视觉
YOLOv5改进 | 2023 | InnerIoU、InnerSIoU、InnerWIoU、FocusIoU等损失函数
YOLOv5改进 | 2023 | InnerIoU、InnerSIoU、InnerWIoU、FocusIoU等损失函数
592 0
|
8月前
YOLOv11改进策略【损失函数篇】| 通过辅助边界框计算IoU提升检测效果(Inner_GIoU、Inner_DIoU、Inner_CIoU、Inner_EIoU、Inner_SIoU)
YOLOv11改进策略【损失函数篇】| 通过辅助边界框计算IoU提升检测效果(Inner_GIoU、Inner_DIoU、Inner_CIoU、Inner_EIoU、Inner_SIoU)
883 4
YOLOv11改进策略【损失函数篇】| 通过辅助边界框计算IoU提升检测效果(Inner_GIoU、Inner_DIoU、Inner_CIoU、Inner_EIoU、Inner_SIoU)
|
机器学习/深度学习 计算机视觉 异构计算
【YOLOv8改进 - Backbone主干】FasterNet:基于PConv(部分卷积)的神经网络,提升精度与速度,降低参数量。
【YOLOv8改进 - Backbone主干】FasterNet:基于PConv(部分卷积)的神经网络,提升精度与速度,降低参数量。
|
机器学习/深度学习 人工智能 文字识别
ultralytics YOLO11 全新发布!(原理介绍+代码详见+结构框图)
本文详细介绍YOLO11,包括其全新特性、代码实现及结构框图,并提供如何使用NEU-DET数据集进行训练的指南。YOLO11在前代基础上引入了新功能和改进,如C3k2、C2PSA模块和更轻量级的分类检测头,显著提升了模型的性能和灵活性。文中还对比了YOLO11与YOLOv8的区别,并展示了训练过程和结果的可视化
18506 0
|
机器学习/深度学习 计算机视觉
YOLOv8改进 | EIoU、SIoU、WIoU、DIoU、FocusIoU等二十余种损失函数
YOLOv8改进 | EIoU、SIoU、WIoU、DIoU、FocusIoU等二十余种损失函数
1308 1
|
机器学习/深度学习 编解码 计算机视觉
【YOLOv8改进 - 特征融合NECK】 GIRAFFEDET之GFPN :广义特征金字塔网络,高效地融合多尺度特征
YOLOv8专栏探讨了目标检测的创新改进,提出了GiraffeDet,一种轻量级主干和深度颈部模块结合的高效检测网络。GiraffeDet使用S2D-chain和GFPN,优化多尺度信息交换,提升检测性能。代码和论文可在相关链接找到。GFPN通过跳跃和跨尺度连接增强信息融合。文章还展示了核心组件如SPPV4、Focus和CSPStage的代码实现。
|
机器学习/深度学习 编解码 算法
YOLOv8改进 | 主干网络 | 增加网络结构增强小目标检测能力【独家创新——附结构图】
YOLOv8在小目标检测上存在挑战,因卷积导致信息丢失。本文教程将原网络结构替换为更适合小目标检测的backbone,并提供结构图。通过讲解原理和手把手教学,指导如何修改代码,提供完整代码实现,适合新手实践。文章探讨了大特征图对小目标检测的重要性,如细节保留、定位精度、特征丰富度和上下文信息,并介绍了FPN等方法。YOLOv8流程包括预处理、特征提取、融合和检测。修改后的网络结构增加了上采样和concatenate步骤,以利用更大特征图检测小目标。完整代码和修改后的结构图可在文中链接获取。
|
边缘计算 计算机视觉 异构计算
【YOLOv8改进 - 特征融合NECK】Slim-neck:目标检测新范式,既轻量又涨点
YOLO目标检测专栏探讨了模型优化,提出GSConv和Slim-Neck设计,以实现轻量级模型的高效检测。GSConv减小计算复杂度,保持准确性,适合实时任务。Slim-Neck结合GSConv优化架构,提高计算成本效益。在Tesla T4上,改进后的检测器以100FPS处理SODA10M数据集,mAP0.5达70.9%。论文和代码可在提供的链接中获取。文章还介绍了YOLOv8中GSConv的实现细节。更多配置信息见相关链接。