当前位置: 首页 > news >正文

YOLOv8模型改进 第二十讲 添加三重注意力机制Triplet Attention 提升小目标/遮挡目标

        本文这次分享的是三重注意力机制Triplet Attention。现在注意力机制在计算机视觉任务中被广泛研究和应用,如 Squeeze-and-Excitation Networks (SENet)、Convolutional Block Attention Module (CBAM) 等。然而,这些方法存在一些局限性,例如需要大量可学习参数,或者在计算通道注意力时没有考虑跨维度交互等。Triplet Attention可以有效的解决这些问题,其强调在计算注意力权重时捕获跨维度交互的重要性,以提供丰富的特征表示。

 1. 三重注意力机制Triplet Attention  

        这张图展示了一个名为 “Triplet Attention” 的神经网络模块的结构。该模块的输入是一个形状为CxHxW的张量,整个模块由三个并行的分支组成,每个分支都执行相似的操作:

  1. Z - Pool 操作:每个分支首先进行 Z - Pool 操作。Z - Pool 是一种池化操作,它将输入张量在通道维度上进行平均池化和最大池化,并将结果在通道维度上进行拼接。
  2. 卷积操作(Conv):接着进行卷积操作,卷积核的大小未在图中明确标出,但卷积操作后张量的形状仍然保持为 。
  3. Sigmoid 激活函数:卷积操作之后,应用 Sigmoid 激活函数,将输出值压缩到 0 到 1 之间。

2.Triplet Attention结构 

         1. 模块 (d) 首先对输入张量进行维度置换(Permute),改变张量的维度顺序。

         2. 然后进行 Z - Pool 操作,提取通道维度的特征。 Z - Pool 操作是一种在神经网络中用于特征提取的池化操作。它结合了平均池化(Average Pooling)和最大池化(Maximum Pooling)的优点。 在 Z - Pool 操作中,对于输入张量的某一维度(通常是通道维度),会同时进行平均池化和最大池化操作,然后将这两个池化结果在该维度上进行拼。

        3. 利用 7x7 卷积、批归一化(Batch Norm)和 Sigmoid 函数生成注意力权重 。       

        4. 再次进行维度置换后,通过 1x1 卷积将权重应用到原始输入张量,达到对输入特征重新加权的目的。

 3. 接下来,我们将详细介绍如何将Triplet_Attention集成到 YOLOv8 模型中。        

这是我的GitHub代码:tgf123/YOLOv8_improve (github.com)

这是改进讲解:YOLOv8模型改进 第二十讲 添加三重注意力机制Triplet Attention 提升小目标、遮挡目标_哔哩哔哩_bilibili

3.1  如何添加

        1. 首先,在我上传的代码中yolov8_improve中找到Triplet_Attention.py代码部分,它包含两个部分一个是Triplet_Attention.py的核心代码,一个是yolov8模型的配置文件。 

​​       

        2. 然后我们在ultralytics文件夹下面创建一个新的文件夹,名字叫做change_models, 然后再这个文件夹下面创建Triplet_Attention.py文件,然后将iRMB的核心代码放入其中

​​

    3. 在 task.py文件中导入Triplet_Attention

from ultralytics.change_models.triplet_attention import C2f_TripletAttention,TripletAttention

  

     4. 然后将 Triplet_Attention添加到下面当中

        第一个改进修改的地方

  

   

 第二个改进修改的地方

  

        5. 最后将配置文件复制到下面文件夹下

  

        6. 运行代码跑通 


from ultralytics.models import NAS, RTDETR, SAM, YOLO, FastSAM, YOLOWorldif __name__=="__main__":# 使用自己的YOLOv8.yamy文件搭建模型并加载预训练权重训练模型model = YOLO(r"D:\bilibili\model\YOLOV8_new\ultralytics-main\ultralytics\cfg\models\v8\yolov8_Triplet_Attention.yaml")\.load(r'D:\bilibili\model\YOLOV8_new\ultralytics-main\yolov8n.pt')  # build from YAML and transfer weightsresults = model.train(data=r'D:\bilibili\model\ultralytics-main\ultralytics\cfg\datasets\VOC_my.yaml',epochs=100,imgsz=640,batch=8,cache = False,# single_cls = False,  # 是否是单类别检测# workers = 0,# resume='',#  amp = False)

from ultralytics.models import NAS, RTDETR, SAM, YOLO, FastSAM, YOLOWorldif __name__=="__main__":# 使用自己的YOLOv8.yamy文件搭建模型并加载预训练权重训练模型model = YOLO(r"D:\bilibili\model\YOLOV8_new\ultralytics-main\ultralytics\cfg\models\v8\yolov8_irmb.yaml")\.load(r'D:\bilibili\model\YOLOV8_new\ultralytics-main\yolov8n.pt')  # build from YAML and transfer weightsresults = model.train(data=r'D:\bilibili\model\ultralytics-main\ultralytics\cfg\datasets\VOC_my.yaml',epochs=100, imgsz=640, batch=8)

  

http://www.lryc.cn/news/498800.html

相关文章:

  • Linux絮絮叨(三) Ubuntu桌面版添加中文拼音输入法
  • Ungoogled Chromium127编译指南 Windows篇 - 安装Visual Studio 2022(六)
  • Kubernetes(K8s)
  • 证明切平面过定点的曲面是锥面
  • python中数组怎么转换为字符串
  • Linux 查看运行了哪些服务
  • WPS EXCEL 使用 WPS宏编辑器 写32位十六进制数据转换为浮点小数的公式。
  • SpringMVC ——(1)
  • 嵌入式中防linux的通用MCU系统
  • Windows电脑伪关机(快速启动模式),怎么真关机
  • 远程修改ESXi 6.7管理IP地址
  • DICOM医学影象应用篇——多平面重建(MPR)在DICOM医学影像中的应用详解
  • chromedriver.exe编译
  • CVPR和其他2024顶会论文阅读(资源整理【1】)
  • 封闭式论文写作--全面掌握ChatGPT-4o的写作技能,掌握提示词使用技巧、文献检索与分析方法,帮助您选定研究方向,提炼学术论文题目
  • ThinkPad X250在 FreeBSD xfce4下小红点不能用、触摸板不能用以及键盘上下左右变成其它键
  • PowerShell install 一键部署postgres17
  • k8s的数据库etcd报 etcdserver: mvcc: database space exceeded的处理办法
  • MySQL——buffer poll
  • 使用GO--Swagger生成文档
  • Pac4j 学习笔记
  • 什么?RayLink远程控制软件支持企业IT应用!
  • LeetCode Hot100 51~60
  • docker 启动 redis 同时设置密码,关机后会自动重启
  • 3D Gaussian Splatting代码详解(一):模型训练、数据加载
  • docker部署RustDesk自建服务器
  • 工作实战总结与实现-mybatis-plus更新策略部分字段不更新问题
  • MFC扩展库BCGControlBar Pro v36.0新版亮点:黑色主题中的自动反转图标
  • Midjourney Describe API 的对接和使用
  • 《单片机原理及接口技术》(C51编程)(第三版)------张毅刚主编