基于CBAM-CNN卷积神经网络预测研究(Python代码实现)

news2024/10/6 8:23:22

 💥💥💞💞欢迎来到本博客❤️❤️💥💥

🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。

⛳️座右铭:行百里者,半于九十。

📋📋📋本文目录如下:🎁🎁🎁

目录

💥1 概述

📚2 运行结果

🎉3 参考文献

🌈4 Python代码及数据


💥1 概述

CBAM(CBAM-CNN)是一种用于计算机视觉领域的卷积神经网络结构,它能够有效地从图像中学习关注和调整。CBAM模型结合了通道注意力模块(Channel Attention Module)和空间注意力模块(Spatial Attention Module)两个部分,用于提升卷积神经网络的性能。

通道注意力模块(CAM)旨在通过学习不同通道之间的相关性,为每个通道分配适当的注意力权重。该模块首先通过全局平均池化获得整个通道的平均值,然后使用两个全连接层来生成一组注意力权重。这些权重用于调整每个通道的特征图。

空间注意力模块(SAM)旨在学习图像中不同空间区域的重要性。该模块通过对特征图在不同空间维度上进行最大池化和平均池化操作,然后使用一个卷积层来生成一组注意力权重。最后,这些权重被应用于原始特征图,以增强具有重要空间信息的区域。

通过结合通道注意力模块和空间注意力模块,CBAM能够动态地选择和调整特征图的通道和空间注意力,从而提取更准确和具有区分力的特征表示。这种注意力机制有助于网络更好地对图像进行感知,从而改善图像分类、目标检测、图像分割等计算机视觉任务的性能。

针对预测任务,可以使用CBAM-CNN模型进行图像分类或目标检测。在图像分类任务中,CBAM-CNN可以通过自适应地关注重要的通道和空间区域,提取图像特征并进行分类。在目标检测任务中,CBAM-CNN可以辅助检测网络对目标区域进行准确定位和分类。

需要注意的是,CBAM-CNN只是一种网络结构,具体的预测研究还需要根据具体的任务和数据集进行调整和优化。

📚2 运行结果

 部分代码:

def forward(self, x):
        # 1.最大池化分支
        max_branch = self.MaxPool(x)
        # 送入MLP全连接神经网络, 得到权重
        max_in = max_branch.view(max_branch.size(0), -1)
        max_weight = self.fc_MaxPool(max_in)

        # 2.全局池化分支
        avg_branch = self.AvgPool(x)
        # 送入MLP全连接神经网络, 得到权重
        avg_in = avg_branch.view(avg_branch.size(0), -1)
        avg_weight = self.fc_AvgPool(avg_in)

        # MaxPool + AvgPool 激活后得到权重weight
        weight = max_weight + avg_weight
        weight = self.sigmoid(weight)

        # 将维度为b, c的weight, reshape成b, c, 1, 1 与 输入x 相乘
        h, w = weight.shape
        # 通道注意力Mc
        Mc = torch.reshape(weight, (h, w, 1))

        # 乘积获得结果
        x = Mc * x

        return x


class SpatialAttentionModul(nn.Module):  # 空间注意力模块
    def __init__(self, in_channel):
        super(SpatialAttentionModul, self).__init__()
        self.conv = nn.Conv1d(2, 1, 7, padding=3)
        self.sigmoid = nn.Sigmoid()

    def forward(self, x):
        # x维度为 [N, C, H, W] 沿着维度C进行操作, 所以dim=1, 结果为[N, H, W]
        MaxPool = torch.max(x, dim=1).values  # torch.max 返回的是索引和value, 要用.values去访问值才行!
        AvgPool = torch.mean(x, dim=1)

        # 增加维度, 变成 [N, 1, H, W]
        MaxPool = torch.unsqueeze(MaxPool, dim=1)
        AvgPool = torch.unsqueeze(AvgPool, dim=1)

        # 维度拼接 [N, 2, H, W]
        x_cat = torch.cat((MaxPool, AvgPool), dim=1)  # 获得特征图

        # 卷积操作得到空间注意力结果
        x_out = self.conv(x_cat)
        Ms = self.sigmoid(x_out)

        # 与原图通道进行乘积
        x = Ms * x

        return x


if __name__ == '__main__':
    inputs = torch.randn(32, 512, 16)
    model = CBAM(in_channel=512)  # CBAM模块, 可以插入CNN及任意网络中, 输入特征图in_channel的维度
    def forward(self, x):
        # 1.最大池化分支
        max_branch = self.MaxPool(x)
        # 送入MLP全连接神经网络, 得到权重
        max_in = max_branch.view(max_branch.size(0), -1)
        max_weight = self.fc_MaxPool(max_in)

        # 2.全局池化分支
        avg_branch = self.AvgPool(x)
        # 送入MLP全连接神经网络, 得到权重
        avg_in = avg_branch.view(avg_branch.size(0), -1)
        avg_weight = self.fc_AvgPool(avg_in)

        # MaxPool + AvgPool 激活后得到权重weight
        weight = max_weight + avg_weight
        weight = self.sigmoid(weight)

        # 将维度为b, c的weight, reshape成b, c, 1, 1 与 输入x 相乘
        h, w = weight.shape
        # 通道注意力Mc
        Mc = torch.reshape(weight, (h, w, 1))

        # 乘积获得结果
        x = Mc * x

        return x


class SpatialAttentionModul(nn.Module):  # 空间注意力模块
    def __init__(self, in_channel):
        super(SpatialAttentionModul, self).__init__()
        self.conv = nn.Conv1d(2, 1, 7, padding=3)
        self.sigmoid = nn.Sigmoid()

    def forward(self, x):
        # x维度为 [N, C, H, W] 沿着维度C进行操作, 所以dim=1, 结果为[N, H, W]
        MaxPool = torch.max(x, dim=1).values  # torch.max 返回的是索引和value, 要用.values去访问值才行!
        AvgPool = torch.mean(x, dim=1)

        # 增加维度, 变成 [N, 1, H, W]
        MaxPool = torch.unsqueeze(MaxPool, dim=1)
        AvgPool = torch.unsqueeze(AvgPool, dim=1)

        # 维度拼接 [N, 2, H, W]
        x_cat = torch.cat((MaxPool, AvgPool), dim=1)  # 获得特征图

        # 卷积操作得到空间注意力结果
        x_out = self.conv(x_cat)
        Ms = self.sigmoid(x_out)

        # 与原图通道进行乘积
        x = Ms * x

        return x


if __name__ == '__main__':
    inputs = torch.randn(32, 512, 16)
    model = CBAM(in_channel=512)  # CBAM模块, 可以插入CNN及任意网络中, 输入特征图in_channel的维度

🎉3 参考文献

部分理论来源于网络,如有侵权请联系删除。

[1]黄昌顺,张金萍.基于CBAM-CNN的滚动轴承故障诊断方法[J].现代制造工程,2022(11):137-143.DOI:10.16731/j.cnki.1671-3133.2022.11.022.

[2]杜先君,巩彬,余萍等.基于CBAM-CNN的模拟电路故障诊断[J].控制与决策,2022,37(10):2609-2618.DOI:10.13195/j.kzyjc.2021.1111.

🌈4 Python代码及数据

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

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

相关文章

Linux SSH访问虚拟机失败 Restarting network (via systemctl)

访问SSH访问服务器连接失败,重启network 失败 Restarting network (via systemctl): Job for network.service failed because the control process exited with error code. See “systemctl status network.service” and “journalctl -xe” for details.关闭 NetworkManage…

mayavi 远程可视化

似乎最近总是在处理远程可视化的问题 首先应该像配置open3d一样完成x服务器的配置,这里给出我自己的链接。 这时候我们进行安装,给出官网链接 pip install mayavi pip install PyQt5不出意外的话,将会出意外。 会提示如下报错qt.qpa.plugi…

关于海外的应用商店优化策略

关于应用商店优化,我们可以通过投放应用广告,或者是遵循ASO的实践,来优化应用程序从而获得自然流量。 如果开始进行应用商店优化,我们需要准备一份可用于日常的ASO清单。 建立清晰的应用商店优化策略,研究并了解市场…

适用于电脑的 9 款最佳视频压缩器 | 压缩而不损失质量

如果您是视频编辑者或经常处理视频的人,您就会知道一个简单的 1 分钟高清视频会占用您的硬盘多大的空间。无论是在抖音、快手上上传视频,还是只是想在硬盘中保留视频文件的备份,您都需要一个具体的解决方案来压缩视频,而不会大幅降…

解决MAC IDEA终端每次都要source ~/.zshrc

安装nvm之后,发现每隔一段时间(不清楚是新打开一个终端还是会定时刷新)就要重新执行source ~/zshrc,才能执行nvm命令。找了一圈发现idea默认使用的shell是bash,将默认的shell改成zsh就可以,更改位置&#x…

PostgreSQL MVCC的弊端

数据库有很多种(截至 2023 年 4 月有 897 个)。面对如此多的数据库,很难知道该选择什么!但有一个有趣的现象,互联网集体决定新应用程序的默认选择。在 2000 年代,传统观点选择 MySQL 是因为像 Google 和 Fa…

css 网站置灰功能

文章目录 filter 属性backdrop-filter 属性mix-blend-mode 属性css 变量低版本浏览器方案 filter 属性 html {filter: gray; /* 兼容 IE6-9 的滤镜 */filter: grayscale(.95); // 对图片进行灰度转换-webkit-filter: grayscale(.95); }backdrop-filter 属性 为一个元素后面区…

“AI+教育”:景联文科技高质量教育GPT题库助力教学创新

去年年底,OpenAI推出ChatGPT,掀起AI热潮,教育作为“AI”应用落地的关键场景,再次受到广泛关注。 “AI教育”的快速发展,是受到技术、需求和政策三重因素共同驱动的结果。 在技术方面,随着人工智能技术的不断…

Spring MVC 系列2 -- 创建连接、获取与输出

上个系列总结了关于Spring MVC 项目的一些基础 ,Spring MVC就是在Spring Boot的基础上引入了Spring Web依赖.接下来就进行总结一下Spring MVC项目的创建,连接,获取参数,输出响应. 目录 1. Spring MVC 创建和连接 1.1 创建Spring MVC 项目实现与浏览器互通 1.2 RequestMapping…

电子锁语音芯片方案,低功耗声音提示ic,WT588F02B-8S

随着科技的不断发展,电子锁已成为现代社会中,安全性和便利性并存的必备设备。如何为电子锁行业增添智能化、人性化的功能已成为行业内的热门话题。 在这个迅速发展的市场中,深圳唯创知音推出了一款语音交互方案——WT588F02B-8S 低功耗声音提…

超市商品信息管理系统设计与实现(论文+源码)_kaic

摘 要 目前运用广泛的互联网相关技术普遍进行了推广以及应用,基于互联网技术实现的也超市管理系统软件的应用大大提高了现代超市的管理水平和经济效益,取得了前所未有的进步,在人们的互联网生活中占有相当重要的地位。在21世纪伴随计算机网络…

【miniQMT实盘量化1】什么是miniQMT?

前言 本篇是这个系列的开篇,也是扫盲文章,介绍什么是miniQMT,以及它的优势。 从交易接口说起 总所周知,量化大概分四个部分:数据、回测、模拟、实盘。每个部分都很重要,但最关键的,还是实盘&…

智慧水利水电未来发展趋势

随着人口的增加和经济的发展,水资源日益紧缺,水利水电工程的发展前景广阔。在可持续发展、数字化、智能化、高效节能将有极致的发展趋势。 在未来,水利水电工程将更加注重可持续发展,即既满足人类的水电需求,又保护生…

使用claude 2的文档分析功能

复制一段较长的文本内容,比如json文件。 https://zh.annas-archive.org/db/aarecord/md5:ba19176859126615bba9f35110f7492e.json 打开claude 2网页。 在输入框中粘贴内容,会自动生成一个past.txt图标。 输入要问的问题,按回车。 结果如下&a…

让全彩LED显示屏更高清的5个方法

随着社会的发展,人们对LED显示屏画面的显示效果要求越来越高,高清、超高清显示逐渐成为市场主流。高清视频画面给人带来的震撼效果是很强烈的,其所显示的内容相对传统的视频画面更具吸引力,更能满足人们对高品质视听的美好追求。 …

Picgo使用Gitee平台搭建图床照片无法显示

1.问题 使用Hexo框架搭建个人博客,发现博客中图片无法显示 2.问题分析 查看图床,发现相册中图片无法显示 查阅多方网站,发现Gitee与Picgo配合使用时,图片文件不能大于1M。 这主要因为Gitee查阅超过1M的文件需要登录的权限 。而…

Object.fromEntries()将键值对列表转换为一个对象

Object.fromEntries() 静态方法将键值对列表转换为一个对象 将 Array 转换成对象: let arr [["name","张三"],["age","40"]] let obj Object.fromEntries(arr); console.log(obj);将 Map 转换成对象: let …

如何添加域名解析

1、域名解析(CNAME记录) 登录所在平台的DNS解析管理 me:域名控制面板 (dnsmsn.com) 第一条的解析记录为 第二条www的解析记录为 为什么要添加两条解析记录? 一条是记录,一条是www记录,这分别代表两个最常用的域名…

基于知识图谱的电影知识问答系统:训练TF-IDF 向量算法和朴素贝叶斯分类器、在 Neo4j 中查询

项目设计集合(人工智能方向):助力新人快速实战掌握技能、自主完成项目设计升级,提升自身的硬实力(不仅限NLP、知识图谱、计算机视觉等领域):汇总有意义的项目设计集合,助力新人快速实…

SU-03T语音模块的使用

目录 语音模块配置 1. 进入语音模块官网 http://www.smartpi.cn/#/,配置词条和识别后的串口输出指令 2.记录下相关指令以及上图的识别词条,方便固件烧写后的调试 3.打开固件烧写工具 4. 进行固件烧写,烧录完成后先和电脑串口调试助手配合…