💡💡💡本文改进内容:LRM loss困难样本挖掘引入到YOLOv9,性能优于Focal Loss
💡💡💡 LRM loss应用到能够大幅提升小目标、红外小目标、大幅度提升遮挡物性能,性能如下图所示:
《YOLOv9魔术师专栏》将从以下各个方向进行创新:
【原创自研模块】【多组合点优化】【注意力机制】【卷积魔改】【block&多尺度融合结合】【损失&IOU优化】【上下采样优化 】【SPPELAN & RepNCSPELAN4优化】【小目标性能提升】【前沿论文分享】【训练实战篇】
订阅者通过添加WX: AI_CV_0624,入群沟通,提供改进结构图等一系列定制化服务。
订阅者可以申请发票,便于报销
YOLOv9魔术师专栏
💡💡💡为本专栏订阅者提供创新点改进代码,改进网络结构图,方便paper写作!!!
💡💡💡适用场景:红外、小目标检测、工业缺陷检测、医学影像、遥感目标检测、低对比度场景
💡💡💡适用任务:所有改进点适用【检测】、【分割】、【pose】、【分类】等
💡💡💡全网独家首发创新,【自研多个自研模块】,【多创新点组合适合paper 】!!!
☁️☁️☁️☁️☁️☁️☁️☁️☁️☁️☁️☁️☁️☁️☁️☁️☁️☁️ ☁️☁️☁️☁️☁️☁️☁️☁️☁️☁️☁️☁️☁️☁️
包含注意力机制魔改、卷积魔改、检测头创新、损失&IOU优化、block优化&多层特征融合、 轻量级网络设计、24年最新顶会改进思路、原创自研paper级创新等
🚀🚀🚀 本项目持续更新 | 更新完结保底≥80+ ,冲刺100+ 🚀🚀🚀
🍉🍉🍉 联系WX: AI_CV_0624 欢迎交流!🍉🍉🍉
⭐⭐⭐专栏涨价趋势 99 ->199->259->299,越早订阅越划算⭐⭐⭐
💡💡💡 2024年计算机视觉顶会创新点适用于Yolov5、Yolov7、Yolov8等各个Yolo系列,专栏文章提供每一步步骤和源码,轻松带你上手魔改网络 !!!
💡💡💡重点:通过本专栏的阅读,后续你也可以设计魔改网络,在网络不同位置(Backbone、head、detect、loss等)进行魔改,实现创新!!!
☁️☁️☁️☁️☁️☁️☁️☁️☁️☁️☁️☁️☁️☁️☁️☁️☁️☁️ ☁️☁️☁️☁️☁️☁️☁️☁️☁️☁️☁️☁️☁️☁️
1.YOLOv9原理介绍
论文: 2402.13616.pdf (arxiv.org)
代码:GitHub - WongKinYiu/yolov9: Implementation of paper - YOLOv9: Learning What You Want to Learn Using Programmable Gradient Information摘要: 如今的深度学习方法重点关注如何设计最合适的目标函数,从而使得模型的预测结果能够最接近真实情况。同时,必须设计一个适当的架构,可以帮助获取足够的信息进行预测。然而,现有方法忽略了一个事实,即当输入数据经过逐层特征提取和空间变换时,大量信息将会丢失。因此,YOLOv9 深入研究了数据通过深度网络传输时数据丢失的重要问题,即信息瓶颈和可逆函数。作者提出了可编程梯度信息(programmable gradient information,PGI)的概念,来应对深度网络实现多个目标所需要的各种变化。PGI 可以为目标任务计算目标函数提供完整的输入信息,从而获得可靠的梯度信息来更新网络权值。此外,研究者基于梯度路径规划设计了一种新的轻量级网络架构,即通用高效层聚合网络(Generalized Efficient Layer Aggregation Network,GELAN)。该架构证实了 PGI 可以在轻量级模型上取得优异的结果。研究者在基于 MS COCO 数据集的目标检测任务上验证所提出的 GELAN 和 PGI。结果表明,与其他 SOTA 方法相比,GELAN 仅使用传统卷积算子即可实现更好的参数利用率。对于 PGI 而言,它的适用性很强,可用于从轻型到大型的各种模型。我们可以用它来获取完整的信息,从而使从头开始训练的模型能够比使用大型数据集预训练的 SOTA 模型获得更好的结果。对比结果如图1所示。
YOLOv9框架图
1.1 YOLOv9框架介绍
YOLOv9各个模型介绍
1.hard example mining(困难样本挖掘)
困难例挖掘方法通常可以提高目标检测器的性能,因为它受到不平衡训练集的影响。为了通过RoI正确地挖掘困难例,引入了在线困难例挖掘(OHEM)方法[15]。该方法建议只考虑对反向传播最有利的RoI。给出最高损失值的RoI被认为是最难的例子,因此也是最有利的例子。因此,上述方法选择了B/N个最差的损失案例进行训练,并在训练中丢弃了其余的案例。尽管这种新方法是困难例挖掘中最有前途的方法之一,但它只适用于two-stage网络,因为它需要RoI来工作。
1.2 改进的one-shot目标检测的困难样本挖掘方法
论文:https://arxiv.org/pdf/2202.13080.pdf
提议的研究结合了两种不同的困难样本挖掘方法,并将产生的方法应用于YOLOv5,它是性能最好的单次shot目标检测器之一。为此,焦点损失被改编为YOLOv5,而LRM(最初被设计为适用于单一特征图)被修改为适用于多个特征图。接下来,这两种方法被结合起来,得到一个单一的损失函数,如图1所示。我们进行了定量实验,以验证这些方法在不操纵困难样本数量的情况下挖掘了困难样本。
图1: YOLOv5对象性损失(左)与提议的综合损失(右)。对于提议的损失,首先对每个单元应用平衡焦点损失,而不是BCE,然后对每个特征图,检测按其损失值进行排序。最后,选择具有最高损失值的前B级检测进行损失计算和反向传播。
1.3 Loss Rank Mining
在其原始论文[18]中,该方法与YOLOv2[9]一起使用,YOLOv2有一个特征图用于目标检测。由于YOLOv5对小、中、大目标使用了三个特征图,因此也对原方法进行了修改,使其能适用于所有三个特征图。
在原来的LRM结构中,首先选择损失量最大的K个检测结果。在我们的方法中,对于每个特征图,首先选择B(排名因子)检测结果。图1说明了所提出的组合物性损失结构与原始YOLOv5损失之间的比较,对于每个特征图,该方法可以总结如下:
- 通过每个小批次,平衡焦点损失被应用于细胞以获得检测的损失值。
- 通过扁平化三维单元结构,每个图像样本的损失值被分别串联成不同的向量。
- 每幅图像的损失值都按一个数值排序。
- 从排序的损失向量中,选择每个图像样本的细胞数量的前B比例。
- 每个选定的损失的平均值都是单独取的。
- 这些平均数相加,形成目标损失。
由于我们没有预定的困难例集,我们把困难例定义为替代方法的区别性失败。如图2所示,落在同一单元的检测和失误被分为TP-TP、TP-FN、TN-FP、FP-FP和FN-FN。由于所有这些方法都已经是最先进的,所以这些算法都失败的帧被算作是困难例。因此,这些实验的目的是为了检查TP-FN和TNFP对。原因是,如果方法A对方法B的一些FN和FP有正确的输出(TP和TN),而且方法A对方法B的TP和TN有较少的错误输出,那么就有理由认为方法A对困难例更好。这是一种无监督的性能评估方法,因为困难例子的数量是未知的。
默认损失与Focal损失: 原始YOLOv5损失函数和原始Focal Loss的比较是在γ: 1.5和α: 0.25. 根据表1中的结果,基线焦点损失函数将8.06%被评估为TP的测试集错误地转换为FN,从而降低了算法的性能。虽然它也将一些FN转化为TP,FP转化为TN,但通过在YOLOv5中实施原始焦点损失,困难例的整体性能在测试集上下降了6%。因此,在其余的实验中没有使用基线焦点损失。
默认损失与平衡焦点损失: 原有的YOLOv5损失函数和提议的平衡焦点损失在测试集的帧数(#)和百分比(%)方面对方法对进行了对比。
3.LRM loss加入到YOLOv9
3.1 utils/loss_tal_dual.py
训练方法为 train_dual,因此本博客以此展开
1)首先进行LRM loss实现
后续开源
2)修改class ComputeLoss:
加入以下代码
3.2 修改data/hyps/hyp.scratch-high.yaml
加入以下代码
fl_gamma: 0.0 # focal loss gamma (efficientDet default gamma=1.5)
LRM_ignore: 0.65 # Loss Rank Mining ignore ratio