YOLOv9改进策略:loss优化 | LRM loss困难样本挖掘,提升难样本、遮挡物、低对比度等检测精度

news/2024/7/10 2:38:24 标签: YOLO, 目标检测, 人工智能, 深度学习, 网络

   💡💡💡本文改进内容: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损失之间的比较,对于每个特征图,该方法可以总结如下:

  1. 通过每个小批次,平衡焦点损失被应用于细胞以获得检测的损失值。
  2. 通过扁平化三维单元结构,每个图像样本的损失值被分别串联成不同的向量。
  3. 每幅图像的损失值都按一个数值排序。
  4. 从排序的损失向量中,选择每个图像样本的细胞数量的前B比例。
  5. 每个选定的损失的平均值都是单独取的。
  6. 这些平均数相加,形成目标损失。

由于我们没有预定的困难例集,我们把困难例定义为替代方法的区别性失败。如图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


http://www.niftyadmin.cn/n/5458267.html

相关文章

Docker命令及部署Java项目

文章目录 简介Docker镜像镜像列表查找镜像拉取镜像删除镜像镜像标签 Docker容器容器启动容器查看容器停止和重启后台模式和进入强制停止容器清理停止的容器容器错误日志容器别名及操作 Docker部署Java项目 简介 Docker是一种容器化技术,可以帮助开发者轻松打包应用…

【问题分析】InputDispatcher无焦点窗口ANR问题【Android 14】

1 问题描述 Monkey跑出的无焦点窗口的ANR问题。 特点: 1)、上层WMS有焦点窗口,为Launcher。 2)、native层InputDispacher无焦点窗口,上层为”recents_animation_input_consumer“请求了焦点,但是”rece…

LeetCode 150:逆波兰表达式

题目描述 给你一个字符串数组 tokens ,表示一个根据 逆波兰表示法 表示的算术表达式。 请你计算该表达式。返回一个表示表达式值的整数。 注意: 有效的算符为 ‘’、‘-’、‘*’ 和 ‘/’ 。 每个操作数(运算对象)都可以是一个…

前端发版上线出现白屏问题

目录 路由配置问题资源缓存问题首屏加载过慢 :喂,你的页面白啦! 出现上线白屏的问题有很多,如:配置错误、缓存问题、浏览器兼容问题,根据不同情况去解决。 路由配置问题 问题描述: 在vue开发…

产品说明书二维码生成的优势:数字化时代的智能选择

随着二维码技术的不断发展,越来越多的企业开始选择使用二维码来展示产品使用说明,以取代传统的纸质说明书。这一趋势不仅符合数字化时代的潮流,更为消费者提供了更便捷、更智能的产品使用体验。以下是产品说明书二维码生成的优势:…

卷积神经网络层结构概述

一、卷积神经网络基本的层结构 (一)卷积层 1.可参考此文章:https://blog.csdn.net/tjlakewalker/article/details/83275322 2.实现代码: import torch.nn as nn conv nn.Conv2d(in_channels3, #输入通道out_channels64, #输出通道kerne…

MySQL学习笔记------函数

目录 函数 字符串函数 数值函数 函数 指一段可以直接被另一段程序调用的程序或代码 字符串函数 MySQL中内置了很多字符串函数,常用如下:select 函数 concat(s1,s2,s3,...,sn) 字符串拼接,将s1,s2,...,sn拼接成一个字符串 #字符串拼…

固件签名解决方案-安当CAS密码应用系统

什么是固件签名 固件签名是在固件代码中添加数字签名以验证其真实性和完整性的过程。数字签名是一种加密机制,它可以确保固件没有以任何方式被篡改、损坏或修改。作为一个物联网设备或嵌入式开发人员,固件签名很重要,因为它提供了一种方法来…