YOLOv9改进策略:注意力机制 | FocalNet焦点调制注意力取代自注意力

2024-03-29 15:52

本文主要是介绍YOLOv9改进策略:注意力机制 | FocalNet焦点调制注意力取代自注意力,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

  💡💡💡本文改进内容:由于自注意力二次的计算复杂度效率较低,尤其是对于高分辨率输入。因此,作者提出了focal modulation network(FocalNet)使用焦点调制模块来取代自注意力

 改进结构图如下:

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

 2.Focal modulation networks介绍

论文:https://arxiv.org/pdf/2203.11926.pdf

        在Transformers中,自注意力(SA)可以说是其成功的关键,它支持依赖于输入的全局交互。但尽管有这些优势,由于自注意力二次的计算复杂度效率较低,尤其是对于高分辨率输入。因此,作者提出了focal modulation network(FocalNet)使用焦点调制模块来取代自注意力。

作者认为,该工作主要的贡献有以下三点:

  1. 分层语境化使用一组depth-wise的卷积实现以不同粒度水平对短程到长程视觉语境进行编码。
  2. 门控聚合,根据每个token的内容有选择地聚合其上下文特征。
  3. 调制或元素级仿射变换,将聚合的特征融合到query中。

          其中,Window-wise SA从其周围的token中捕获空间上下文信息;为了扩大感受野,Focal Attention使用更远的summarized tokens以捕获粗粒度、长距离的视觉依赖性。Focal Modulation首先将不同粒度级别的空间上下文编码为summarized tokens,然后根据查询内容选择性地融合到查询中。其中,绿色和紫色箭头分别表示注意力交互和依赖查询的聚合。Window-wise SA和Focal Attention都涉及大量的交互和聚合操作。而作者提出的模块通过将聚合与单个查询解耦大大简化了计算过程。

         如下图所示:在前两者中,绿色和紫色箭头分别代表注意力交互和基于查询的聚合,但是都存在一个缺陷,即:均需要涉及大量的交互和聚合操作。而Focal Modulation计算过程得到大量简化。

从下图可以看到,基于FocalNet的检测算法模型相对较小,训练数据也比较少,性能却有提高。 

自注意力中,key和qury是密集的矩阵相乘,Attention也是和value的密集矩阵乘积。而FocalNet中分别采用Depth-Wise Conv和Point-Wise Conv,计算更轻量化。 

 算法流程图:

 不同level的特征可以注意到图像中不同的区域,包括图像局部特征区域和全局空间信息:

实验

作者将本文的方法分别与基于ConvNet、Transformers和MLP的三组方法在ImageNet-1K和ImageNet-22K数据集上进行了比较。作者还在目标检测及语义分割数据集上达到了良好的效果。

3.FocalNetBlock加入到YOLOv9

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

后续开源

3.2修改yolo.py

1)首先进行引用

from models.attention.attention import *

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

在源码基础上加入FocalModulationBlock

        elif m is nn.BatchNorm2d:args = [ch[f]]###attention #####elif m in {FocalModulationBlock}:c2 = ch[f]args = [c2, *args]###attention #####

3.3 yolov9-c-FocalModulationBlock.yaml

# YOLOv9# parameters
nc: 80  # number of classes
depth_multiple: 1.0  # model depth multiple
width_multiple: 1.0  # layer channel multiple
#activation: nn.LeakyReLU(0.1)
#activation: nn.ReLU()# anchors
anchors: 3# YOLOv9 backbone
backbone:[[-1, 1, Silence, []],  # conv down[-1, 1, Conv, [64, 3, 2]],  # 1-P1/2# conv down[-1, 1, Conv, [128, 3, 2]],  # 2-P2/4# elan-1 block[-1, 1, RepNCSPELAN4, [256, 128, 64, 1]],  # 3# avg-conv down[-1, 1, ADown, [256]],  # 4-P3/8# elan-2 block[-1, 1, RepNCSPELAN4, [512, 256, 128, 1]],  # 5# avg-conv down[-1, 1, ADown, [512]],  # 6-P4/16# elan-2 block[-1, 1, RepNCSPELAN4, [512, 512, 256, 1]],  # 7# avg-conv down[-1, 1, ADown, [512]],  # 8-P5/32# elan-2 block[-1, 1, RepNCSPELAN4, [512, 512, 256, 1]],  # 9[-1, 1, FocalModulationBlock, [512]],  # 10]# YOLOv9 head
head:[# elan-spp block[-1, 1, SPPELAN, [512, 256]],  # 11# up-concat merge[-1, 1, nn.Upsample, [None, 2, 'nearest']],[[-1, 7], 1, Concat, [1]],  # cat backbone P4# elan-2 block[-1, 1, RepNCSPELAN4, [512, 512, 256, 1]],  # 14# up-concat merge[-1, 1, nn.Upsample, [None, 2, 'nearest']],[[-1, 5], 1, Concat, [1]],  # cat backbone P3# elan-2 block[-1, 1, RepNCSPELAN4, [256, 256, 128, 1]],  # 17 (P3/8-small)# avg-conv-down merge[-1, 1, ADown, [256]],[[-1, 14], 1, Concat, [1]],  # cat head P4# elan-2 block[-1, 1, RepNCSPELAN4, [512, 512, 256, 1]],  # 20 (P4/16-medium)# avg-conv-down merge[-1, 1, ADown, [512]],[[-1, 11], 1, Concat, [1]],  # cat head P5# elan-2 block[-1, 1, RepNCSPELAN4, [512, 512, 256, 1]],  # 23 (P5/32-large)# multi-level reversible auxiliary branch# routing[5, 1, CBLinear, [[256]]], # 24[7, 1, CBLinear, [[256, 512]]], # 25[9, 1, CBLinear, [[256, 512, 512]]], # 26# conv down[0, 1, Conv, [64, 3, 2]],  # 27-P1/2# conv down[-1, 1, Conv, [128, 3, 2]],  # 28-P2/4# elan-1 block[-1, 1, RepNCSPELAN4, [256, 128, 64, 1]],  # 29# avg-conv down fuse[-1, 1, ADown, [256]],  # 30-P3/8[[24, 25, 26, -1], 1, CBFuse, [[0, 0, 0]]], # 31  # elan-2 block[-1, 1, RepNCSPELAN4, [512, 256, 128, 1]],  # 32# avg-conv down fuse[-1, 1, ADown, [512]],  # 33-P4/16[[25, 26, -1], 1, CBFuse, [[1, 1]]], # 34 # elan-2 block[-1, 1, RepNCSPELAN4, [512, 512, 256, 1]],  # 35# avg-conv down fuse[-1, 1, ADown, [512]],  # 36-P5/32[[26, -1], 1, CBFuse, [[2]]], # 37# elan-2 block[-1, 1, RepNCSPELAN4, [512, 512, 256, 1]],  # 38# detection head# detect[[32, 35, 38, 17, 20, 23], 1, DualDDetect, [nc]],  # DualDDetect(A3, A4, A5, P3, P4, P5)]

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

⭐⭐⭐专栏涨价趋势 99 ->199->259->299,越早订阅越划算⭐⭐⭐

这篇关于YOLOv9改进策略:注意力机制 | FocalNet焦点调制注意力取代自注意力的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/859004

相关文章

goroutine调度策略

Golang的调度器采用M:N调度模型,其中M代表用户级别的线程(也就是goroutine),而N代表的事内核级别的线程。Go调度器的主要任务就是N个OS线程上调度M个goroutine。这种模型允许在少量的OS线程上运行大量的goroutine。 Go调度器使用了三种队列来管理goroutine 全局队列(Global Queue):此队列中包含了所有刚创建的goroutine。本地队列(L

【35分钟掌握金融风控策略27】贷中风控策略与客户运营体系

目录 贷中风控策略与客户运营体系 贷中风控日标 贷中风控数据源 贷中风控策略与客户运营体系 贷中是风控的第二道防线,贷中阶段风控的重点工作就是存量客户风控及运营。在当下,新客市场趋于饱和且获客成本越来越高,所以,在做好存量客户风控的同时,对存量客户进行运营,可以更大程度地增加客户黏性、挖掘存量客户的价值。 相较贷前,除要继续做好风控,贷中还多了存量客户运营的工作。贷中风控在

16 | 缓存策略:如何使用缓存来减少磁盘IO?

使用内存作为缓存来加速应用程序的访问速度,是几乎所有高性能系统都会采用的方法 选择只读缓存还是读写缓存? 使用缓存,首先你就会面临选择读缓存还是读写缓存的问题。他们唯一的区别就是,在更新数据的时候,是否经过缓存。 Kafka 使用的 PageCache,它就是一个非常典型的读写缓存。操作系统会利用系统空闲的物理内存来给文件读写做缓存,这个缓存叫做 PageCache。应用程序在写文件的时候,

System V IPC(进程间通信)机制详解

文章目录 一、引言二、System V IPC的基本概念1、IPC结构的引入2、IPC标识符(IPC ID)3、S ystem V的优缺点 三、共享内存(Shared Memory)1、共享内存的基本概念2、共享内存的创建(shmget)3、共享内存的附加(shmat)和分离(shmdt)4、共享内存的控制(shmctl)5、使用案例 四、消息队列(Message Queues)1、消息队列

注意力机制篇 | YOLOv8改进之在C2f模块引入反向残差注意力模块iRMB | CVPR 2023

前言:Hello大家好,我是小哥谈。反向残差注意力模块iRMB是一种用于图像分类和目标检测的深度学习模块。它结合了反向残差和注意力机制的优点,能够有效地提高模型的性能。在iRMB中,反向残差指的是将原始的残差块进行反转,即将卷积操作和批量归一化操作放在了后面。这样做的好处是,可以提高模型的非线性表达能力,同时减少了参数量。🌈         目录

深入理解K8S【安全认证机制kubectlconfig】

深入理解K8S【安全认证机制】 1 核心概念 1.1 安全体系 对于大型系统来说,对业务的权限、网络的安全认证是必不可少的。 对于linux系统来说,用户和组、文件权限、SELinux、防火墙、pam、sudo等,究其核心的目的都是为了保证系统是安全的。 那么kubernetes的这种大型的任务编排系统来说,同样也陆续产生了一系列对平台的权限认证、对业务的权限认证、对网络的安全认证等认证

Self-attention自注意力机制

Self-attention 和 CNN(卷积神经网络)是深度学习中常用的两种架构,用于不同类型的任务。下面是它们之间的比较: Self-Attention(自注意力机制) 适用范围: Self-attention 主要用于处理序列数据,如自然语言处理中的文本数据或时间序列数据。 机制: Self-attention 是一种机制,它允许模型在输入序列中的不同位置之间建立关联。 特点: Sel

通俗易懂的策略模式讲解

什么是策略模式? 策略模式是一种设计模式,它允许你定义一系列的算法(策略),并将每个算法封装成一个对象。这样,你可以轻松地切换不同的算法,而不需要改变原始代码。 一个简单的例子 假设你是一名厨师,你需要准备一份菜单。菜单有多种选择,如中国菜、意大利菜、法国菜等。你可以使用策略模式来实现不同的菜单。 策略模式的组成部分 上下文:这是使用策略的对象。例如,在我们的例子中,它是厨师。策略:这是

深入理解Qt的信号与槽机制

目录标题 第 1 部分:信号与槽概述1.1 信号与槽的定义1.2 信号与槽的优势 第 2 部分:使用信号与槽2.1 声明信号与槽2.2 定义信号与槽2.3 连接信号与槽2.4 发出信号 第 3 部分:信号与槽的高级用法3.1 自动连接1. 使用 `QMetaObject::Connection` 连接2. 使用 `Q_INVOKABLE` 宏3. 使用 `QML` 中的自动连接4. 使用 `

深入探索Android签名机制:从v1到v3的演进之旅

引言 在Android开发的世界中,APK的签名机制是确保应用安全性的关键环节。随着技术的不断进步,Android签名机制也经历了从v1到v3的演进。本文将带你深入了解Android签名机制的演变过程,揭示每个版本背后的技术细节,并探讨它们对开发者和用户的影响。 一、签名机制 1、什么是Android签名? 在Android生态中,APK签名机制是确保应用安全性的重要环节。