CBAM-2018学习笔记

server/2025/1/22 3:52:56/

名称:

Convolutional Block Attention Module (CBAM)

来源:

CBAM: Convolutional Block Attention Module

相关工作:

#ResNet #GoogleNet #ResNeXt #Network-engineering #Attention-mechanism

创新点:

fpg0umoj.4ze.png

贡献:

  • 提出CBAM
  • 验证了其有效性
  • 改善提高了以往模型的性能

代码:

  
import torch  
from torch import nn  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.fc1 = nn.Conv2d(in_planes, in_planes // ratio, 1, bias=False)  self.relu1 = nn.ReLU()  self.fc2 = nn.Conv2d(in_planes // ratio, in_planes, 1, bias=False)  self.sigmoid = nn.Sigmoid()  def forward(self, x):  avg_out = self.fc2(self.relu1(self.fc1(self.avg_pool(x))))  max_out = self.fc2(self.relu1(self.fc1(self.max_pool(x))))  out = avg_out + max_out  return self.sigmoid(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.conv1 = nn.Conv2d(2, 1, kernel_size, padding=padding, bias=False)  # 7,3     3,1  self.sigmoid = nn.Sigmoid()  def forward(self, x):  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)  x = self.conv1(x)  return self.sigmoid(x)  class CBAM(nn.Module):  def __init__(self, in_planes, ratio=16, kernel_size=7):  super(CBAM, self).__init__()  self.ca = ChannelAttention(in_planes, ratio)  self.sa = SpatialAttention(kernel_size)  def forward(self, x):  out = x * self.ca(x)  result = out * self.sa(out)  return result  # 输入 N C H W,  输出 N C H Wif __name__ == '__main__':  block = CBAM(64)  input = torch.rand(3, 64, 32, 32)  output = block(input)  print(input.size(), output.size())

http://www.ppmy.cn/server/160354.html

相关文章

牛客周赛76B:JAVA

链接:登录—专业IT笔试面试备考平台_牛客网 来源:牛客网 题目描述 给定一个长度为 nnn ,仅包含小写字母的字符串 sss 。 请你构造出一个非空字符串 ttt ,使得它在 sss 中作为子串出现的次数最多。 子串是指,从原…

Windows环境本地配置pyspark环境详细教程

目录 一、背景简记二、本地单机spark环境配置详细步骤第一步:python环境安装第二步:安装jdk及配置环境变量安装包下载安装环境变量配置 第三步:安装Spark安装包下载安装配置环境变量 第四步:安装hadoop安装包下载安装配置环境变量…

AI 时代的 Prompt 工程入门

引言 网络有句话流行的话—— “未来,淘汰你的不是AI,而是掌握了AI的人”。那我们应该怎么掌握AI?我自己的理解是学会面向AI提问,利用好AI工具为我们的工作提效和赋能。毕竟我们普通人不太可能直接去开发大模型,我们更…

.Net Core微服务入门全纪录(二)——Consul-服务注册与发现(上)

系列文章目录 1、.Net Core微服务入门系列(一)——项目搭建 2、.Net Core微服务入门全纪录(二)——Consul-服务注册与发现(上) 3、.Net Core微服务入门全纪录(三)——Consul-服务注…

【数据结构】AVL树

目录 一:什么是AVL树?1.1什么是平衡因子 二:AVL树的数据结构三:AVL的旋转3.1 简单左旋3.2 复杂左旋3.3 简单右旋3.4 复杂右旋总结 四:插入导致旋转的四种情况第一种 LL型第二种 RR型第三种 LR型解决时的特征有三种&…

HTML知识点复习

1.src 和 href 的区别 src:表示对资源的引用, src指向的内容会嵌入到其标签里。 当浏览器解析到该元素时候,会暂停其他资源的下载和处理, 直到将该资源加载、编译、执行完毕,所以js脚本一般会放在页面底部 href&…

半导体、芯片、人工智能、智能驾驶汽车的趋势

1. 市场增长与需求 汽车半导体市场:预计到2025年,中国汽车半导体市场仍将保持稳健增长态势,AI和能源将成为未来最重要的两大变革因素。2023年中国汽车电子芯片行业市场规模约为820.8亿元,预计2024年有望增至905.4亿元左右。随着新…

IM聊天学习资源

文章目录 参考链接使用前端界面简单效果消息窗口平滑滚动至底部vue使用watch监听vuex中的变量变化 websocket握手认证ChatKeyCheckHandlerNettyChatServerNettyChatInitializer 参考链接 zzhua/netty-chat-web - 包括前后端 vue.js实现带表情评论功能前后端实现(仿…