YOLOv8多种方法改进CBAM注意力机制有效提升检测精度(已跑通)

news2024/12/28 23:49:04

一、CBAM概念

        CBAM(Convolutional Block Attention Module)是一种用于卷积神经网络(CNN)的注意力机制,旨在提高网络的表现能力。它通过引入两个注意力模块来增强特征图的表达能力。

二、源码:

class ChannelAttention(nn.Module):
    def __init__(self, in_planes, ratio=16):
        super(ChannelAttention, self).__init__()
        self.avg_pool = nn.AdaptiveAvgPool2d(1)
        self.max_pool = nn.AdaptiveMaxPool2d(1)
        self.f1 = nn.Conv2d(in_planes, in_planes // ratio, 1, bias=False)
        self.relu = nn.ReLU()
        self.f2 = nn.Conv2d(in_planes // ratio, in_planes, 1, bias=False)
        self.sigmoid = nn.Sigmoid()

    def forward(self, x):
        avg_out = self.f2(self.relu(self.f1(self.avg_pool(x))))
        max_out = self.f2(self.relu(self.f1(self.max_pool(x))))
        out = self.sigmoid(avg_out + max_out)
        return out


class SpatialAttention(nn.Module):
    def __init__(self, kernel_size=7):
        super(SpatialAttention, self).__init__()
        assert kernel_size in (3, 7), 'kernel size must be 3 or 7'
        padding = 3 if kernel_size == 7 else 1
      
        self.conv = nn.Conv2d(2, 1, kernel_size, padding=padding, bias=False)
        self.sigmoid = nn.Sigmoid()

    def forward(self, x):
        # 1*h*w
        avg_out = torch.mean(x, dim=1, keepdim=True)
        max_out, _ = torch.max(x, dim=1, keepdim=True)
        x = torch.cat([avg_out, max_out], dim=1)
        # 2*h*w
        x = self.conv(x)
        # 1*h*w
        return self.sigmoid(x)


class CBAM(nn.Module):
    def __init__(self, c1, c2, ratio=16, kernel_size=7):  # ch_in, ch_out, number, shortcut, groups, expansion
        super(CBAM, self).__init__()
        self.channel_attention = ChannelAttention(c1, ratio)
        self.spatial_attention = SpatialAttention(kernel_size)

    def forward(self, x):
        out = self.channel_attention(x) * x
        # c*h*w
        # c*h*w * 1*h*w
        out = self.spatial_attention(out) * out
        return out

三、改进步骤

第一步,在ultralytics/nn/modules/conv.py文件内添加注意力源码

d2f0126059c743c6be85eae2f0b87794.png

第二步,在ultralytics/nn/modules/init.py文件内,按下图标识的地方添加注意力名

第一处:在from .conv import()处最后,添加注意力名称

e09a694c0f544d4da5904b9d3b8d85ed.png

第二处:在__all__={}处最后,添加注意力名称 

f6c0b28f7a7e45b48982052209a16b4b.png

第三步,在ultralytics/nn/tasks.py文件内,

首先,在from ultralytics.nn.modules import 处添加CBAM

50361f26a85f44e6b1fc95a4d49c5fce.png

        其次,键盘点击CTRL+shift+F打开查找界面,搜索elif m in ,在该函数下方有一堆的elif m in XXX,在某一个elif下方添加如下代码

        elif m in {CBAM}:
            c1, c2 = ch[f], args[0]
            if c2 != nc:  # if not output
                c2 = make_divisible(min(c2, max_channels) * width, 8)
            args = [c1, c2, *args[1:]]

 c83a45ec29944c029b553eb675fdbd92.png

 第五步,在ultralytics/cfg/models/v8文件下,复制yolov8.yaml,并改成自己的名字(如yolov8-CBAM.yaml)

第一种修改方法,在backbone中添加CABM,因为添加了一层CABM,所以在Detect处也要相应的做出修改,如下:

b784458bd35b419da353dabf7ef29f5a.png

运行结果:

ea1793c4de0a41c29e669d6092778590.png

第二张修改方法,在backbone和head中分别添加CABM,Detect处也要根据添加的层数做出相应的做出修改,如下:

87e32732709746eabb9a8c0d6e354ff6.png

运行结果:

50fc6b5fbd184e0f96228ac33ce953a2.png

 

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

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

相关文章

AI 产品的五种交互模式

我们不是在创造人工智能,我们是在创造智能的控制者 —— James Barrat 历史 回顾计算机交互的演变历程,经历了批处理—命令行式交互—图形界面交互,AI 的出现带来了自然语言交互,基于人类的意图完成输出。 早期的批处理系统古朴…

uefi模式无法读取u盘启动怎么办_uefi模式无法读取u盘启动解决方法

最近有网友问我uefi模式下我按快捷方式或bios中都认别不了U盘,无法正常选择u盘启动进入pe安装系统,出现这种情况一般是bios中设置了uefi模式,而制作的u盘启动不支持uefi启动导致,那么uefi模式无法读取U盘启动怎么办?下…

摄影曝光:曝光模式认知

写在前面 理解不足小伙伴帮忙指正 😃,生活加油 99%的焦虑都来自于虚度时间和没有好好做事,所以唯一的解决办法就是行动起来,认真做完事情,战胜焦虑,战胜那些心里空荡荡的时刻,而不是选择逃避。不要站在原地…

万亿低空经济赛道,如何抢占先机?

在万亿低空经济赛道中抢占先机,需要企业在多个方面进行全面布局和战略规划。以下是一些关键策略: 一、明确低空经济的定义和潜力 低空经济作为战略性新兴产业和未来产业,已经上升为国家经济工作重点。它是指各类低空航空器在飞行活动中所关…

工商业光伏项目如何顺利运行

工商业光伏项目如何顺利运行 鹧鸪云 工商业光伏可以细分为两大类,一类是针对工业企业的光伏项目,另一类则是针对商业企业的光伏项目。工业企业光伏项目通常是指在工厂、工业园区等工业用地安装光伏系统,利用太阳能发电,以满足工…

Linux(云服)安装go

我的系统环境 一、获取安装包 接下来先在Windows物理机上获取安装包 set http_proxyhttp://127.0.0.1:7897 set https_proxyhttp://127.0.0.1:7897 wget https://go.dev/dl/go1.20.7.linux-amd64.tar.gz然后通过xshell的rz命令将go1.20.7.linux-amd64.tar.gz发送至我的云服&a…

【解压即玩】使命召唤 系列合集17-1,经典收藏

《使命召唤》(英语:Call of Duty)是一款以第二次世界大战为背景的第一人称射击游戏,该游戏使用了基于雷神之锤III引擎的升级版本,即重返德军总部游戏引擎的改良版。游戏的故事线从不同的角度展开,玩家将扮演…

使用ddns-go实现自动配置IPv6的DDNS

正文共:888 字 17 图,预估阅读时间:1 分钟 前面说到通过PPPoE拨号获取到的IPv6地址没有发生变化(企业路由器配置IPv6家用宽带的PPPoE拨号示例),结果说完就打脸了。中间家里停了一次电,路由器重新…

大规模泛癌筛选揭示抗癌药物组合的新希望

大规模泛癌筛选揭示抗癌药物组合的新希望 引言 在抗癌治疗中,药物组合因其潜在的增效作用而备受关注。然而,由于可能的组合数量巨大且肿瘤间存在显著的异质性,识别真正有效的药物组合成为一项极具挑战性的任务。近期,一项发表在《…

Open WebUI快速应用ollama模型,实现通过web交互模型,实战llama3

文章目录 前言安装docker安装Open WebUIdocker指令安装docker-compose.yaml安装 访问网站无法选择模型问题处理修改ollama服务配置 重新正常访问页面 前言 基于大模型的应用,通过linux快速实现部署,相应教程可通过传送门快速了解: linux-ubu…

驱动开发系列13 - Linux Graphics 图形驱动概述(二)

目录 一:概述 二:Linux图形驱动演进 3.1 X11基础结构 3.2 DRI/DRM基础结构 四:帧缓冲区驱动程序 4.1 创建帧缓冲器驱动程序 4.2 帧缓冲区操作 五:直接渲染管理器(DRM) 5.1 内核模块(DRM) 5.2 DRM 批量缓冲区提交模型 5.2.1 硬件共享 5.2.2 内存管理和安全 5.3 模式…

搜狐新闻HarmonyOS Push开发实践

本文字数:1795字 预计阅读时间:15分钟 01 背景 搜狐新闻作为HarmonyOS的合作伙伴,于2023年12月成功上架鸿蒙单框架应用市场,成为首批鸿蒙应用矩阵的一员。 推送作为新闻类应用的重要组成部分,我们将其纳入到二期功能开…

【手撕OJ题】——141/142. 环形链表

目录 🕒 题目 Ⅰ⌛ 方法① - 快慢指针🕒 面试题🕒 题目 Ⅱ⌛ 方法① - 快慢指针⌛ 方法② - 转换为链表相交问题 🕒 题目 Ⅰ 🔎 141. 环形链表【难度:简单🟢】 给你一个链表的头节点 head &am…

【Electron】桌面应用开发electron-builder打包报错问题处理

Electron 桌面应用开发electron-builder打包过程中各种报错问题处理 前一篇有写过 Electron 桌面应用开发快速入门到打包Windows应用程序 在安装到打包的整个过程中,我们都会遇到很多诡异的问题,接下来我将介绍我遇到的几个问题的解决方案 一、拉包的时…

普元EOS-微前端实现路由

1 前言 EOS微前端已经对路由进行了封装,内置了 $router 对象,直接使用就实现了路由。 2 实现代码 this.$router.push({ path: /a/b }) 由于这些就是普通的路由对象的封装,就不过多描述使用方法。 有兴趣的同学可自行百度了解 vue router对…

CAAC执照:无人机飞手培训就业组装技术很重要

一、CAAC执照概述 CAAC(中国民用航空局)颁发的无人机执照,全称为《民用无人机操控员执照》,是无人机行业中最权威和含金量最高的证书。考取该执照后,无人机飞手可以合法地申请空域、航线,并从事无人机相关…

【动态规划】简单多状态 dp 问题

简单多状态 dp 问题 1.面试题 17.16. 按摩师2.打家劫舍 II3.删除并获得点数4.粉刷房子4.买卖股票的最佳时机含冷冻期5.买卖股票的最佳时机含手续费6.买卖股票的最佳时机 III7.买卖股票的最佳时机 IV 点赞👍👍收藏🌟🌟关注&#x1…

前端技术(四)—— 最经典Node.JS全套教程

一、node简介 1. 浏览器中的 JavaScript 的组成部分 2. 思考:为什么 JavaScript 可以在浏览器中被执行 3.思考:为什么 JavaScript 可以操作 DOM 和 BOM 4. 浏览器中的 JavaScript 运行环境 5. 思考:JavaScript 能否做后端开发 6. Node.js介绍…

MySQL 的半同步模式

目录 1 半同步简介: 解决主从数据一致性问题 2 实现半同步模式实践操作 2.1 MASTER 2.2 SLAVE 1 2.3 SLAVE 2 2.4 查看client链接状态 2.5 SLAVE 服务器故障模拟 2.5.1 停止 SLAVE 的 IO_THREAD 2.5.2 查看SLAVE 的IO线程是否关闭 2.5.3 查看 MASTER 上 client 的连接状态…

专业视频编辑和制作软件Adobe Media Encoder(ME)win/mac下载安装和软件介绍

一、软件概述 1.1 软件简介 Adobe Media Encoder(ME)是由Adobe公司开发的一款专业视频编辑和制作软件,全称为Media Encoder,是Creative Cloud套件中的一个重要组件。Adobe ME以其强大的视频编码、转码、调整、剪辑、合成等功能&…