yolov8涨点系列之引入CBAM注意力机制

文章目录

  • YOLOv8 中添加注意力机制 CBAM 具有多方面的好处
    • 特征增强与选择
      • 通道注意力方面
      • 空间注意力方面
    • 提高模型性能
    • 计算效率优化:
  • yolov8增加CBAM具体步骤
    • CBAM代码
      • (1)在__init.py+conv.py文件的__all__内添加‘CBAM’
      • (2)conv.py文件复制粘贴CBAM代码
      • (3)修改task.py文件
    • yolov8.yaml文件增加CBAM
      • yolov8.yaml
      • yolov8.yaml增加CBAM

YOLOv8 中添加注意力机制 CBAM 具有多方面的好处

特征增强与选择

通道注意力方面

  突出重要特征通道:帮助模型自动学习不同通道特征的重要性权重。对于目标检测任务,某些通道可能携带了关于目标物体的关键信息,如颜色、纹理等特征。CBAM 的通道注意力模块可以增强这些重要通道的特征表示,让模型更加关注对目标检测有价值的特征,从而提高检测的准确性。例如,在检测车辆时,颜色通道中关于车辆独特颜色的信息通道权重会被提高,有助于模型更好地识别车辆。
  抑制无关特征通道:能够抑制那些对当前检测任务不太重要的通道特征,减少噪声和干扰信息的影响。这在复杂场景下尤为重要,可避免模型被背景或其他无关信息误导,提高模型的抗干扰能力。

空间注意力方面

  聚焦目标位置:空间注意力模块可以让模型关注特征图中不同位置的重要性。在目标检测中,能够突出目标物体所在的位置区域,使模型更加准确地定位目标。例如,当检测人群中的特定个体时,空间注意力会将焦点集中在该个体所在的区域,减少周围人群等其他区域的干扰。
  适应目标形状和大小变化:对于不同形状和大小的目标,空间注意力可以自适应地调整关注区域,更好地适应目标的变化。无论是检测小目标还是大目标,都能提高模型对目标的关注度和检测精度。

提高模型性能

  精度提升:通过强调重要的特征信息,CBAM 能够帮助 YOLOv8 更准确地识别和定位目标,从而提高模型的检测精度。在一些实验和实际应用中,添加 CBAM 后的 YOLOv8 在目标检测的准确率上有显著的提升。
  泛化能力增强:使模型更好地学习到数据中的关键特征,减少对特定数据分布的依赖,增强模型的泛化能力。这意味着在面对新的、未曾见过的场景或数据时,模型仍然能够保持较好的检测性能。

计算效率优化:

  特征筛选减少计算量:CBAM 在增强有用特征的同时,实际上也起到了一种特征筛选的作用。模型可以更加集中地处理重要的特征信息,减少对不必要信息的计算,从而在一定程度上提高计算效率,尤其是在处理大规模图像数据或实时检测任务时,这种优势更为明显。
  与 YOLOv8 结构互补:CBAM 的结构相对简单且轻量级,与 YOLOv8 的网络结构相契合。添加 CBAM 不会给模型带来过大的额外计算负担,能够在不显著增加模型复杂度的情况下提升性能。

yolov8增加CBAM具体步骤

CBAM代码

(1)在__init.py+conv.py文件的__all__内添加‘CBAM’

在这里插入图片描述

在这里插入图片描述

(2)conv.py文件复制粘贴CBAM代码

class ChannelAttention(nn.Module):"""Channel-attention module https://github.com/open-mmlab/mmdetection/tree/v3.0.0rc1/configs/rtmdet."""def __init__(self, channels: int) -> None:"""Initializes the class and sets the basic configurations and instance variables required."""super().__init__()self.pool = nn.AdaptiveAvgPool2d(1)self.fc = nn.Conv2d(channels, channels, 1, 1, 0, bias=True)self.act = nn.Sigmoid()def forward(self, x: torch.Tensor) -> torch.Tensor:"""Applies forward pass using activation on convolutions of the input, optionally using batch normalization."""return x * self.act(self.fc(self.pool(x)))class SpatialAttention(nn.Module):"""Spatial-attention module."""def __init__(self, kernel_size=7):"""Initialize Spatial-attention module with kernel size argument."""super().__init__()assert kernel_size in (3, 7), 'kernel size must be 3 or 7'padding = 3 if kernel_size == 7 else 1self.cv1 = nn.Conv2d(2, 1, kernel_size, padding=padding, bias=False)self.act = nn.Sigmoid()def forward(self, x):"""Apply channel and spatial attention on input for feature recalibration."""return x * self.act(self.cv1(torch.cat([torch.mean(x, 1, keepdim=True), torch.max(x, 1, keepdim=True)[0]], 1)))class CBAM(nn.Module):"""Convolutional Block Attention Module."""def __init__(self, c1, kernel_size=7):"""Initialize CBAM with given input channel (c1) and kernel size."""super().__init__()self.channel_attention = ChannelAttention(c1)self.spatial_attention = SpatialAttention(kernel_size)def forward(self, x):"""Applies the forward pass through C1 module."""return self.spatial_attention(self.channel_attention(x))

(3)修改task.py文件

  先引用刚导入的CBAM模块:
在这里插入图片描述
  再配置引用CBAM模块时的计算方法:
在这里插入图片描述

elif m is CBAM:c1,c2=ch[f],args[0]if c2!=nc:c2=make_divisible(min(c2,max_channels)*width,8)args=[c1,*args[1:]]

yolov8.yaml文件增加CBAM

yolov8.yaml

# Ultralytics YOLO 🚀, AGPL-3.0 license
# YOLOv8 object detection model with P3-P5 outputs. For Usage examples see https://docs.ultralytics.com/tasks/detect# Parameters
nc: 80  # number of classes
scales: # model compound scaling constants, i.e. 'model=yolov8n.yaml' will call yolov8.yaml with scale 'n'# [depth, width, max_channels]n: [0.33, 0.25, 1024]  # YOLOv8n summary: 225 layers,  3157200 parameters,  3157184 gradients,   8.9 GFLOPss: [0.33, 0.50, 1024]  # YOLOv8s summary: 225 layers, 11166560 parameters, 11166544 gradients,  28.8 GFLOPsm: [0.67, 0.75, 768]   # YOLOv8m summary: 295 layers, 25902640 parameters, 25902624 gradients,  79.3 GFLOPsl: [1.00, 1.00, 512]   # YOLOv8l summary: 365 layers, 43691520 parameters, 43691504 gradients, 165.7 GFLOPsx: [1.00, 1.25, 512]   # YOLOv8x summary: 365 layers, 68229648 parameters, 68229632 gradients, 258.5 GFLOPs# YOLOv8.0n backbone
backbone:# [from, repeats, module, args]- [-1, 1, Conv, [64, 3, 2]]  # 0-P1/2- [-1, 1, Conv, [128, 3, 2]]  # 1-P2/4- [-1, 3, C2f, [128, True]]- [-1, 1, Conv, [256, 3, 2]]  # 3-P3/8- [-1, 6, C2f, [256, True]]- [-1, 1, Conv, [512, 3, 2]]  # 5-P4/16- [-1, 6, C2f, [512, True]]- [-1, 1, Conv, [1024, 3, 2]]  # 7-P5/32- [-1, 3, C2f, [1024, True]]- [-1, 1, SPPF, [1024, 5]]  # 9# YOLOv8.0n head
head:- [-1, 1, nn.Upsample, [None, 2, 'nearest']]- [[-1, 6], 1, Concat, [1]]  # cat backbone P4- [-1, 3, C2f, [512]]  # 12- [-1, 1, nn.Upsample, [None, 2, 'nearest']]- [[-1, 4], 1, Concat, [1]]  # cat backbone P3- [-1, 3, C2f, [256]]  # 15 (P3/8-small)- [-1, 1, Conv, [256, 3, 2]]- [[-1, 12], 1, Concat, [1]]  # cat head P4- [-1, 3, C2f, [512]]  # 18 (P4/16-medium)- [-1, 1, Conv, [512, 3, 2]]- [[-1, 9], 1, Concat, [1]]  # cat head P5- [-1, 3, C2f, [1024]]  # 21 (P5/32-large)- [[15, 18, 21], 1, Detect, [nc]]  # Detect(P3, P4, P5)

yolov8.yaml增加CBAM

  yolov8.yaml增加CBAM步骤很简单只需要在卷积模块后面写上CBAM:

# Ultralytics YOLO 🚀, AGPL-3.0 license
# YOLOv8 object detection model with P3-P5 outputs. For Usage examples see https://docs.ultralytics.com/tasks/detect# Parameters
nc: 80  # number of classes
scales: # model compound scaling constants, i.e. 'model=yolov8n.yaml' will call yolov8.yaml with scale 'n'# [depth, width, max_channels]n: [0.33, 0.25, 1024]  # YOLOv8n summary: 225 layers,  3157200 parameters,  3157184 gradients,   8.9 GFLOPss: [0.33, 0.50, 1024]  # YOLOv8s summary: 225 layers, 11166560 parameters, 11166544 gradients,  28.8 GFLOPsm: [0.67, 0.75, 768]   # YOLOv8m summary: 295 layers, 25902640 parameters, 25902624 gradients,  79.3 GFLOPsl: [1.00, 1.00, 512]   # YOLOv8l summary: 365 layers, 43691520 parameters, 43691504 gradients, 165.7 GFLOPsx: [1.00, 1.25, 512]   # YOLOv8x summary: 365 layers, 68229648 parameters, 68229632 gradients, 258.5 GFLOPs# YOLOv8.0n backbone
backbone:# [from, repeats, module, args]- [-1, 1, Conv, [64, 3, 2]]  # 0-P1/2- [-1, 1, Conv, [128, 3, 2]]  # 1-P2/4- [-1, 3, C2f, [128, True]]- [-1, 1, Conv, [256, 3, 2]]  # 3-P3/8- [-1, 6, C2f, [256, True]]- [-1, 1, Conv, [512, 3, 2]]  # 5-P4/16- [-1, 6, C2f, [512, True]]- [-1, 1, Conv, [1024, 3, 2]]  # 7-P5/32- [-1, 3, C2f, [1024, True]]- [-1, 1, SPPF, [1024, 5]]  # 9# YOLOv8.0n head
head:- [-1, 1, nn.Upsample, [None, 2, 'nearest']]- [[-1, 6], 1, Concat, [1]]  # cat backbone P4- [-1, 3, C2f, [512]]  # 12- [-1, 1, nn.Upsample, [None, 2, 'nearest']]- [[-1, 4], 1, Concat, [1]]  # cat backbone P3- [-1, 3, C2f, [256]]  # 15 (P3/8-small)- [-1, 1, CBAM, [256]]- [-1, 1, Conv, [256, 3, 2]]- [[-1, 12], 1, Concat, [1]]  # cat head P4- [-1, 3, C2f, [512]]  # 18 (P4/16-medium)- [-1, 1, CBAM, [512]]- [-1, 1, Conv, [512, 3, 2]]- [[-1, 9], 1, Concat, [1]]  # cat head P5- [-1, 3, C2f, [1024]]  # 21 (P5/32-large)- [-1, 1, CBAM, [1024]]- [[18, 21, 24], 1, Detect, [nc]]  # Detect(P3, P4, P5)

  从yaml文件可以看出来改进之前Neck部分的C2f模块后没有CBAM注意力机制,改进后的在最后三个C2f模块都添加了CBAM注意力机制,因此最后一层detect部分也需要增加3,结果是18, 21, 24
  运行示意:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/4100.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

python实现tkinter解密剧情文本游戏

目录 需求 效果 代码实现 代码说明 需求 python实现tkinter解密剧情文本游戏 效果 代码实现 import tkinter as tkclass StoryGame:def __init__(self, master):self.master mastermaster.title("剧情游戏")# 初始化故事节点self.current_node 0# 故事节点数…

C 学习(5)

哈哈哈哈哈,终于想起来了!贴一下主要的参考: 基本语法 - 《阮一峰《C 语言教程》》 - 书栈网 BookStack 内容写的比较浅显有疏漏,如果看不明白,再结合一下百度。 注释 C 语言的注释有两种表示方法。 第一种方法是…

解读《ARM Cortex-M3 与Cortex-M4 权威指南》——第3章 技术综述

加载—存储架构 ISA(指令集架构) 指令集架构 (ISA) 是计算机处理器能够理解和执行的指令集合。它定义了计算机系统中硬件和软件之间的接口 ISA 是硬件与软件之间的接口规范,它定义了处理器能执行哪些操作,程序员和编译器可以依此编写代码。 常见的 ISA 类型: CISC (Comp…

【Linux】linux c语言调用send()接口内核调用流程

1、C语言测试代码&#xff1a; #include <errno.h> #include <string.h> #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <err.h> #include <sys/types.h> #include <sys/socket.h> #include <net…

【Windows修改Docker Desktop(WSL2)内存分配大小】

记录一下遇到使用Docker Desktop占用内存居高不下的问题 自从使用了Docker Desktop&#xff0c;电脑基本每天都需要重启&#xff0c;内存完全不够用&#xff0c;从16g扩展到24&#xff0c;然后到40G&#xff0c;还是不够用&#xff1b;打开Docker Desktop 运行时间一长&#x…

使用 ABAP GIT 发生 IF_APACK_MANIFEST dump

错误重现 使用经典的 ABAP 系统运行 ZABAPGIT 或者 ZABAPGIT_STANDALONE然后添加在线或者离线项目点击 PullShort dump SYNTAX_ERROR Dump 界面&#xff1a; 解决方案 它发生在 CREATE OBJECT lo_manifest_provider TYPE (ls_manifest_implementation-clsname) 语句中。 该语…

树莓派基本设置--8.播放音频和视频

在Raspberry Pi上播放音频和视频的最简单方法是使用预装的VLC应用程序&#xff1b; VLC程序使用硬件加速&#xff0c;可以播放许多流行的音频和视频文件格式。 一、图形化界面 选择要播放的文件&#xff0c;鼠标右击&#xff0c;选择“VLC Media Player” 二、命令行 注意&…

JS实现原生注册表单,滑块验证,短信验证码

目录 一、编辑表单询盘结构 1、确定注册接口所需参数 2、编写表单HTML结构 二、编写style样式 1、非表单元素样式 三、引入阿里云滑块验证 1、引入阿里短信接口CDN 2、实例化nc对象 四、调用短信验证码接口 1、给获取按钮绑定点击事件 2、测试短信验证码获取 五、调用注册接口 …

matlab 质心重合法实现点云配准

目录 一、算法原理1、原理概述2、参考文献二、代码实现三、结果展示1、初始位置2、配准结果本文由CSDN点云侠原创,原文链接,首发于:2024年11月5日。 一、算法原理 1、原理概述 质心重合法是将源点云 P P P

YOLOv8实战人脸口罩识别

本文采用YOLOv8作为核心算法框架&#xff0c;结合PyQt5构建用户界面&#xff0c;使用Python3进行开发。YOLOv8以其高效的实时检测能力&#xff0c;在多个目标检测任务中展现出卓越性能。本研究针对人脸口罩数据集进行训练和优化&#xff0c;该数据集包含丰富的人脸口罩图像样本…

科研绘图系列:R语言两侧柱状图(Grouped Bar Chart)

文章目录 介绍加载R包数据画图1画图2组合图形系统信息介绍 两侧柱状图(也称为双柱状图或并列柱状图)是一种数据可视化图表,它通过在坐标轴的两侧绘制两组或多组柱状图来展示不同类别或组别的数据对比。这种图表特别适用于比较两个或多个数据系列之间的差异。以下是两侧柱状…

获取订单物流信息:追踪包裹的“侦探游戏”

在电商的世界里&#xff0c;顾客下单之后&#xff0c;最让人心急如焚的莫过于等待包裹的到来。想象一下&#xff0c;如果你是一名侦探&#xff0c;而你的任务是追踪那些神秘的包裹&#xff0c;那么获取订单物流信息的API就是你的侦探工具。今天&#xff0c;我们就来聊聊如何使用…

Kinematic-ICP开源:优化激光雷达与轮式里程计融合

文章目录 摘要一、介绍二、相关工作三、使用点对点ICP的激光雷达里程计四. 在ICP中引入运动学约束五. 实验评估A. 实验设置B. 大型室内仓库的定性结果C. 定量结果D. 消融实验 摘要 代码&#xff1a;github 原文&#xff1a;原文 摘要—LiDAR里程计对许多机器人应用至关重要&am…

最新Ubuntu超详细安装教程(附镜像包)

一、镜像下载&#xff1a; 官方正版VMware下载&#xff1a;https://pan.baidu.com/s/1yC610SU1-O9Jtk7nUrZuSA?pwdsKByvm17pro安装教程文档&#xff08;必看&#xff09;.txt 这个一定要下载下来看一下&#xff01;&#xff01;&#xff01; Ubuntu镜像下载&#xff1a;http…

归并排序算法

1、基本思想 归并排序是建立在归并操作上的一种有效的排序算法&#xff0c;它采用分治法的策略。其基本思想是将一个待排序的数组分成两个或多个子数组&#xff0c;先对每个子数组进行排序&#xff0c;然后再将已排序的子数组合并成一个最终的排序数组。 对于两个有序的数组&am…

记录解决vscode 登录leetcode中遇到的问题

1. 安装完 leetcode 点击sign in to leetcode 点击打开网站登录leetcode&#xff0c;发现网页无法打开。 解决办法&#xff1a;将leetcode.cn.js文件中的leetcode-cn.com路径都改成leetcode.cn 2. 继续点击 sign in to leetcode &#xff0c;选择使用账号登录&#xff0c;始…

机器人助力Bridge Champ游戏:1.4.2版本如何提升玩家体验

在Bridge Champ游戏中&#xff0c;机器人扮演着桥牌游戏的“无名英雄”角色&#xff0c;默默地提升玩家体验。凭借智能化的设计&#xff0c;这些机器人不仅能够陪练&#xff0c;也大大提升了比赛的流畅度与趣味性。 Bridge Champ是什么 Bridge Champ是一个基于Ignis公链的在线…

服装品牌零售业态融合中的创新发展:以开源 AI 智能名片 S2B2C 商城小程序为视角

摘要&#xff1a;本文以服装品牌零售业态融合为背景&#xff0c;探讨信息流优化和资金流创新的重要作用&#xff0c;并结合开源 AI 智能名片 S2B2C 商城小程序&#xff0c;分析其如何进一步推动服装品牌在零售领域的发展&#xff0c;提高运营效率和用户体验&#xff0c;实现商业…

redis:set集合命令,内部编码,使用场景

个人主页 &#xff1a; 个人主页 个人专栏 &#xff1a; 《数据结构》 《C语言》《C》《Linux》《网络》 《redis学习笔记》 文章目录 前言命令SADDSMEMBERSSISMEMBERSCARDSPOPSMOVESREM集合间操作SINTERSINTERSTORESUNIONSUNIONSTORESDIFFSDIFFSTORE 内部编码使用场景总结 前言…

ssm052游戏攻略网站的设计与实现+vue(论文+源码)-kaic

毕 业 设 计&#xff08;论 文&#xff09; 题目&#xff1a;游戏攻略网站设计与实现 摘 要 现代经济快节奏发展以及不断完善升级的信息化技术&#xff0c;让传统数据信息的管理升级为软件存储&#xff0c;归纳&#xff0c;集中处理数据信息的管理方式。本游戏攻略网站就是在这…