【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


相关文章
|
4月前
|
PyTorch 算法框架/工具
【IOU实验】即插即用!对bubbliiiing的yolo系列代码替换iou计算函数做比对实验(G_C_D_S-IOU)
【IOU实验】即插即用!对bubbliiiing的yolo系列代码替换iou计算函数做比对实验(G_C_D_S-IOU)
82 0
【IOU实验】即插即用!对bubbliiiing的yolo系列代码替换iou计算函数做比对实验(G_C_D_S-IOU)
|
4月前
|
算法 固态存储 计算机视觉
Focaler-IoU开源 | 高于SIoU+关注困难样本,让YOLOv5再涨1.9%,YOLOv8再涨点0.3%
Focaler-IoU开源 | 高于SIoU+关注困难样本,让YOLOv5再涨1.9%,YOLOv8再涨点0.3%
224 0
|
人工智能 数据可视化 数据处理
快速在 PaddleLabel 标注的花朵分类数据集上展示如何应用 PaddleX 训练 MobileNetV3_ssld 网络
快速在 PaddleLabel 标注的花朵分类数据集上展示如何应用 PaddleX 训练 MobileNetV3_ssld 网络
746 0
快速在 PaddleLabel 标注的花朵分类数据集上展示如何应用 PaddleX 训练 MobileNetV3_ssld 网络
|
3月前
|
机器学习/深度学习 算法 数据可视化
【从零开始学习深度学习】46. 目标检测中锚框的概念、计算方法、样本锚框标注方式及如何选取预测边界框
【从零开始学习深度学习】46. 目标检测中锚框的概念、计算方法、样本锚框标注方式及如何选取预测边界框
|
1月前
|
计算机视觉
5.1.2.3 目标检测基本概念和YOLOv3设计思想——交并比 NMS
这篇文章详细解释了目标检测中的关键概念交并比(IoU)和非极大值抑制(NMS),包括它们的定义、计算方法和在目标检测中的应用,以及如何使用这些技术来优化预测结果和减少冗余预测框。
|
4月前
|
计算机视觉
【YOLOv8改进】Shape-IoU:考虑边框形状与尺度的指标(论文笔记+引入代码)
YOLO目标检测专栏探讨了边框回归损失的创新方法,强调了目标形状和尺度对结果的影响。提出的新方法Shape-IoU关注边框自身属性,通过聚焦形状和尺度提高回归精度。实验显示,该方法提升了检测效果,超越现有技术,在多个任务中达到SOTA。论文和代码已公开。
|
3月前
|
机器学习/深度学习 编解码 计算机视觉
【YOLOv8改进】D-LKA Attention:可变形大核注意力 (论文笔记+引入代码)
YOLO目标检测专栏探讨了Transformer在医学图像分割的进展,但计算需求限制了模型的深度和分辨率。为此,提出了可变形大核注意力(D-LKA Attention),它使用大卷积核捕捉上下文信息,通过可变形卷积适应数据模式变化。D-LKA Net结合2D和3D版本的D-LKA Attention,提升了医学分割性能。YOLOv8引入了可变形卷积层以增强目标检测的准确性。相关代码和任务配置可在作者博客找到。
|
4月前
|
机器学习/深度学习 计算机视觉
【YOLOv8改进】MPDIoU:有效和准确的边界框损失回归函数 (论文笔记+引入代码)
YOLO目标检测专栏介绍了YOLO的有效改进和实战案例,包括卷积、主干网络、注意力机制和检测头的创新。提出了一种新的边界框回归损失函数MPDIoU,它基于最小点距离,能更好地处理不同宽高比的预测框,包含重叠、中心点距离和尺寸偏差的全面考虑。MPDIoU损失函数在YOLACT和YOLOv7等模型上的实验显示了优于现有损失函数的性能。此外,还介绍了WIoU_Scale类用于计算加权IoU,以及bbox_iou函数实现不同IoU变体的计算。详细实现和配置可在相应链接中查阅。
|
4月前
|
编解码 计算机视觉 网络架构
【YOLOv8改进】BiFPN:加权双向特征金字塔网络 (论文笔记+引入代码)
该专栏深入研究了YOLO目标检测的神经网络架构优化,提出了加权双向特征金字塔网络(BiFPN)和复合缩放方法,以提升模型效率。BiFPN通过双向跨尺度连接和加权融合增强信息传递,同时具有自适应的网络拓扑结构。结合EfficientNet,构建了EfficientDet系列检测器,在效率和准确性上超越先前技术。此外,介绍了YOLOv8如何引入MPDIoU并应用BiFPN进行可学习权重的特征融合。更多详情可参考提供的专栏链接。
|
4月前
|
机器学习/深度学习 编解码 计算机视觉
【YOLOv8改进】 SPD-Conv空间深度转换卷积,处理低分辨率图像和小对象问题 (论文笔记+引入代码)
YOLO目标检测专栏探讨了CNN在低分辨率和小目标检测中的局限性,提出SPD-Conv新架构,替代步长卷积和池化层,通过空间到深度层和非步长卷积保持细粒度信息。创新点包括消除信息损失、通用设计和性能提升。YOLOv5和ResNet应用SPD-Conv后,在困难任务上表现优越。详情见YOLO有效改进系列及项目实战目录。