YOLOv9改进策略:block优化 | SEAM提升小目标遮挡物性能

news/2024/7/9 23:55:07 标签: YOLO, 算法, 目标检测, 人工智能, 计算机视觉

💡💡💡本文改进内容:SEAM提升小目标遮挡物性能,在多个数据集得到很好的验证

 改进结构图如下:

YOLOv9魔术师专栏

☁️☁️☁️☁️☁️☁️☁️☁️☁️☁️☁️☁️☁️☁️☁️☁️☁️☁️ ☁️☁️☁️☁️☁️☁️☁️☁️☁️☁️☁️☁️☁️☁️

包含注意力机制魔改、卷积魔改、检测头创新、损失&IOU优化、block优化&多层特征融合、 轻量级网络设计、24年最新顶会改进思路、原创自研paper级创新等

☁️☁️☁️☁️☁️☁️☁️☁️☁️☁️☁️☁️☁️☁️☁️☁️☁️☁️☁️☁️☁️☁️☁️☁️☁️☁️☁️☁️☁️☁️☁️☁️☁️

✨✨✨ 新开专栏暂定免费限时开放,后续每月调价一次✨✨✨

🚀🚀🚀 本项目持续更新 | 更新完结保底≥50+ ,冲刺100+🚀🚀🚀

🍉🍉🍉 联系WX: AI_CV_0624 欢迎交流!🍉🍉🍉

YOLOv9魔改:注意力机制、检测头、blcok魔改、自研原创等

 YOLOv9魔术师

💡💡💡全网独家首发创新(原创),适合paper !!!

💡💡💡 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各个模型介绍

​​

2.遮挡物检测简介 

不同的目标检测应用场景有不同的检测难点,小目标、多尺度以及背景复杂等问题,被遮挡的物体仍然是最先进的物体检测器面临的挑战。本文尝试解决待测目标相互遮挡带来的检测困难,对于人脸遮挡提出了一个名为 SEAM 的注意力模块并引入了排斥损失来解决它,引入了分离和增强注意力模块来增强Neck层输出部分后被遮挡人脸的响应能力。

2.1 Separated and Enhancement Attention Module (SEAM)

即不同人脸之间的遮挡,以及其他物体对人脸的遮挡。前者使得检测精度对 NMS 阈值非常敏感,从而导致漏检。作者使用排斥损失进行人脸检测,它惩罚预测框转移到其他真实目标,并要求每个预测框远离具有不同指定目标的其他预测框,以使检测结果对 NMS 不太敏感。后者导致特征消失导致定位不准确,设计了注意力模块 SEAM 来增强人脸特征的学习。

  SEAM的第一部分是带有残差连接的深度可分离卷积。深度可分离卷积是逐个深度操作的,即逐个通道分离卷积。深度可分离卷积虽然可以学习不同通道的重要性并减少参数量,但它忽略了通道之间的信息关系。

     为了弥补这种损失,不同深度卷积的输出随后通过逐点卷积进行组合。然后用一个两层的全连接网络来融合每个通道的信息,这样网络就可以加强所有通道之间的连接。

  

3.SEAM加入到YOLOv9

3.1新建py文件,路径为models/block/SEAM.py

后续开放

3.2修改yolo.py

1)首先进行引用

from models.block.SEAM import SEAM

2)修改def parse_model(d, ch):  # model_dict, input_channels(3)

在源码基础上加入SEAM

        n = n_ = max(round(n * gd), 1) if n > 1 else n  # depth gain
        if m in {
            Conv, AConv, ConvTranspose, 
            Bottleneck, SPP, SPPF, DWConv, BottleneckCSP, nn.ConvTranspose2d, DWConvTranspose2d, SPPCSPC, ADown,
            RepNCSPELAN4, SPPELAN,SEAM}:
            c1, c2 = ch[f], args[0]
            if c2 != no:  # if not output
                c2 = make_divisible(c2 * gw, 8)

            args = [c1, c2, *args[1:]]
            if m in {BottleneckCSP, SPPCSPC}:
                args.insert(2, n)  # number of repeats
                n = 1
        elif m is nn.BatchNorm2d:
            args = [ch[f]]

3.3 yolov9-c-SEAM.yaml

实验中,后续更新


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

相关文章

IntelliJ中的非JVM技术

Markdown:https://www.jetbrains.com/help/idea/markdown.html 支持CommonMark(定制Markdown标准),IntelliJ默认捆绑了Markdown插件,所以可以学学这个文章, 以便可以更好的在IntelliJ中使用Markdown。JSON&…

LeetCode第五天(442. 数组中重复的数据)

给你一个长度为 n 的整数数组 nums ,其中 nums 的所有整数都在范围 [1, n] 内,且每个整数出现 一次 或 两次 。请你找出所有出现 两次 的整数,并以数组形式返回。 你必须设计并实现一个时间复杂度为 O(n) 且仅使用常量额外空间的算法解决此问…

leetcode169-Majority Element

这道题目要求数组中最多的那个元素,这道题目的解法比较直观,直接遍历元素也可以有一个很好的时间复杂度。注意这里的遍历要求技巧,我们可以建立一个哨兵元素,并且记录哨兵元素出现的次数,如果遍历到的元素和哨兵元素一…

【物联网开源平台】tingsboard安装与编译

别看这篇了,这篇就当我的一个记录,我有空我再写过一篇,编译的时候出现了一个错误,然后我针对那一个错误执行了一个命令,出现了绿色的succes,我就以为整个tingsboard项目编译成功了,后面发现的时候&#xff…

企业出海很难打?那是因为一直走海上而忘记了空军(线上能力)和陆军(当地市场)...

中国企业开展跨境业务,是一项需经过精密策划和全方位布局的战略性举措。在此过程中,构建一套完整且高效的打法尤为关键,很多企业出海难恰恰因为把精力都放在了怎么尽快完成出海业绩目标上,然后发现国内模式与资源往往很难在国外成…

Redis中的事件(三)

时间事件 事件的调度与执行 因为服务器中同时存在文件事件和时间事件两种事件类型,所以服务器必须对这两种事件进行调度,决定何时应该处理文件事件,何时有应该处理时间事件,以及花多少事件来处理它们等等。事件的调度和执行由ae…

3d放上模型为什么渲染不出来---模大狮模型网

如果在3D软件中放置模型后无法正确渲染出来,可能有几个常见的原因导致这种情况发生: 材质设置问题:确保所放置的模型具有正确的材质和纹理,并且材质设置正确。如果材质设置有误,可能会导致模型无法正确显示。 光照设置…

python笔记(5)Numbers(数字)

目录 Python 支持四种不同的数值类型 Python 数字类型转换 Python 数字运算 数学函数 随机数函数 三角函数 数学常量 数值类型是不允许改变的,如果改变数字类型的值,将重新分配内存空间 一下实例在变量赋值时Numbers对象将被创建,可以…