CBAM-2018学习笔记

devtools/2025/1/22 6:55:47/

名称:

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/devtools/152526.html

相关文章

美区TikTok解封后如何回归使用?

随着2025年初美区TikTok解封的消息引起了广泛关注,许多用户纷纷开始重新关注这一全球最受欢迎的短视频平台。在经历了数月的禁用期后,TikTok在美国市场的回归,代表了这一平台的巨大潜力和挑战。从用户的使用习惯,到平台的内容策略…

5、原来可以这样理解C语言_数组(5)sizeof 计算数组元素个数

目录 5. sizeof 计算数组元素个数 5. sizeof 计算数组元素个数 在遍历数组的时候,我们经常想知道数组的元素个数,那C语⾔中有办法使⽤程序计算数组元素个数 吗? 答案是有的,可以使⽤sizeof。 sizeof 中C语⾔是⼀个关键字&#xff…

使用 JUnit 和 SuiteRunner 测试私有方法

我第一次使用 JUnit 是为了为 ServiceUI API 构建一个一致性测试工具包 [ 1 ]。一致性测试工具包的目的是帮助确保同一 API 的替代实现与 API 的规范兼容。由于 API 规范仅定义 API 的公共接口,而不是 API 的实现,因此一致性测试仅测试公共接口。换句话说…

kubernetes v1.29.XX版本HPA、KPA、VPA并压力测试

序言: 在大型电商、购物、直播活动期间,对于火爆流量的激增,如何保障业务稳定并且做到资源不浪费,自动回收。 场景:kubernetes 原生容器化承载业务流量(非云环境) 方案:kubernetes自…

Ubuntu介绍、与centos的区别、基于VMware安装Ubuntu Server 22.04、配置远程连接、安装jdk+Tomcat

目录 ?编辑 一、Ubuntu22.04介绍 二、Ubuntu与Centos的区别 三、基于VMware安装Ubuntu Server 22.04 下载 VMware安装 1.创建新的虚拟机 2.选择类型配置 3.虚拟机硬件兼容性 4.安装客户机操作系统 5.选择客户机操作系统 6.命名虚拟机 7.处理器配置 8.虚拟机内存…

macOS安装Gradle环境

文章目录 说明安装JDK安装Gradle 说明 gradle8.5最高支持jdk21,如果使用jdk22建议使用gradle8.8以上版本 安装JDK mac系统安装最新(截止2024.9.13)Oracle JDK操作记录 安装Gradle 下载Gradle,解压将其存放到资源java/env目录…

软考~系统规划与管理师考试——真题篇——2023年上半年——综合知识——解析版

文章目录 真题(2023-上-01)真题(2023-上-02)真题(2023-上-03)真题(2023-上-04)真题(2023-上-05)真题(2023-上-06)真题(202…

前端【5】-html+css实践项目--河大迎新网搭建

往期文章汇总&#xff1a; 前端【1】---HTML入门学习_html父子标签-CSDN博客 前端【2】html添加样式、CSS选择器-CSDN博客 前端【3】--CSS布局&#xff0c;CSS实现横向布局&#xff0c;盒子模型-CSDN博客 前端【4】-炫酷的文字、动画效果实现-CSDN博客 HTML <!DOCTYPE html…