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

相关文章

Android基于监听的事件处理机制

Android提供了强大的事件处理机制,主要包括两大类: 1,基于监听的事件处理机制:主要做法是为Android界面组件绑定特定的事件监听器 2,基于回调的事件处理机制:主要做法是重写Android组件特定的回调方法,或重写Activity的回调方法。也就是说Android的绝大多数的界面组件都提供了事件响应的回调方法,开发者只要重写它们即可 基于监听的事件处理是一种更加面向对象的事件

Java23种设计模式-行为型模式之策略模式

策略模式(Strategy Pattern):将算法的使用从算法的实现中分离出来,从而让算法的变化不会影响到使用算法的用户。 通常涉及三个角色: 1.上下文(Context):持有策略接口的引用,并在运行时根据需要更换具体的策略实现 2.策略接口(Strategy):定义了所有可能的算法实现应该遵循的协议 3.具体策略实现(Concrete Strategy):实现则实现了这些协议,并为特定的算

nginx负载均衡策略

1、轮询(Round Robin)-默认 依次转发,适用于多台服务器性能相近 2、加权轮询(Weighted Round Robin) weight高的优先分配,适用于多台服务器性能相差较大 3、IP hash 基于客户端 IP 地址的负载均衡策略,适用于客户端始终访问同一台服务器的场景 4、最小连接数(Least Connections) 将请求发送到当前连接数最少的服

揭秘Redis的高效失效策略,提升可用性

Redis是一种广泛使用的开源内存数据库,它在许多现代应用程序中起着关键作用。为了确保系统的高性能和稳定性,我们需要关注Redis的可用性问题,并在发生失效时采取适当的策略。在这篇文章中,我们将讨论Redis的失效策略以及它们的重要性。 为什么需要失效策略 Redis是一种开源的内存数据库,它以高性能和多样化的数据结构而闻名。然而,作为一个基于内存的数据库,Redis在处理大量数据时可能面

【YOLO改进】主干插入ShuffleAttention模块(基于MMYOLO)

ShuffleAttention模块 论文链接:https://arxiv.org/abs/2102.00240 将ShuffleAttention模块添加到MMYOLO中 将开源代码ShuffleAttention.py文件复制到mmyolo/models/plugins目录下 导入MMYOLO用于注册模块的包: from mmyolo.registry import MODELS

【Flink入门修炼】2-3 Flink Checkpoint 原理机制

如果让你来做一个有状态流式应用的故障恢复,你会如何来做呢? 单机和多机会遇到什么不同的问题? Flink Checkpoint 是做什么用的?原理是什么? 一、什么是 Checkpoint? Checkpoint 是对当前运行状态的完整记录。程序重启后能从 Checkpoint 中恢复出输入数据读取到哪了,各个算子原来的状态是什么,并继续运行程序。 即用于 Flink 的故障恢复。 这种机制保

LoRa技术在物联网领域的安全性挑战与应对策略分享

随着物联网技术的飞速发展,LoRa技术作为一种新兴的无线通信技术,在物联网领域展现出了广阔的应用前景。然而,与此同时,其安全性问题也日益凸显,成为了制约其进一步发展的重要因素。本文将深入分析LoRa网络存在的安全漏洞,探讨可能受到的攻击类型,并提出相应的应对策略。 首先,我们需要认识到LoRa网络在密钥管理方面存在的问题。AppSKey和NwkSKey作为LoRa网络中的关键密钥,其独特性对于保

贪吃蛇身子改进加贪吃蛇向右移动

1. 蛇移动的思想:         其实就是删除头节点 ,增加尾节点;一句代码搞定         struct Snake *p; p =head; head = head -> next; free(p)   防止造成多的空间节点 2.增加尾节点代码思想:         2.1 .开辟new 节点的空间  struct Snake *new = (struct Snake *)ma

强化学习的重要概念:环境、模型、策略和它们的关系

在强化学习中,环境(Environment)、模型(Model)和策略(Policy)是三个核心概念,它们之间的关系可以描述如下: 环境(Environment): 环境是智能体所面对的外部世界,它包含了智能体所处的状态空间和动作空间,以及智能体与环境之间的交互规则。环境定义了智能体可能遇到的状态,智能体采取的动作以及由此产生的奖励信号。在强化学习任务中,环境负责接收智能体的

4.18.2 EfficientViT:具有级联组注意力的内存高效Vision Transformer

现有Transformer模型的速度通常受到内存低效操作的限制,尤其是MHSA(多头自注意力)中的张量整形和逐元素函数。 设计了一种具有三明治布局的新构建块,即在高效FFN(前馈)层之间使用单个内存绑定的MHSA,从而提高内存效率,同时增强通道通信。 注意力图在头部之间具有高度相似性,导致计算冗余。 为了解决这个问题,提出了一个级联的组注意力模块,为注意力头提供完整特征的不同分割。