ARM (Attention Refinement Module)

ARM模块【来源于BiSeNet】:细化特征图的注意力,增强重要特征并抑制不重要的特征。

Attention Refinement Module (ARM) 详解

ARM (Attention Refinement Module) 是 BiSeNet 中用于增强特征表示的关键模块,它通过注意力机制来细化特征图,突出重要特征并抑制不重要的特征。下面从多个角度深入理解 ARM 模块。

1. ARM 的核心设计思想

ARM 的设计基于以下两个核心思想:

  • 全局上下文感知:通过全局平均池化捕获图像级的上下文信息
  • 通道注意力机制:自适应地重新校准通道特征响应

这种设计使网络能够:

  • 增强与语义相关的特征通道
  • 抑制噪声或不重要的特征通道
  • 在不增加计算复杂度的前提下提升特征表示能力

2. ARM 的详细结构分析

分解 ARM 的结构:

class AttentionRefinementModule(nn.Module):def __init__(self, in_chan, out_chan, *args, **kwargs):super(AttentionRefinementModule, self).__init__()# 特征变换层self.conv = ConvBNReLU(in_chan, out_chan, ks=3, stride=1, padding=1)# 注意力生成分支self.conv_atten = nn.Conv2d(out_chan, out_chan, kernel_size=1, bias=False)self.bn_atten = nn.BatchNorm2d(out_chan)self.sigmoid_atten = nn.Sigmoid()

2.1 特征变换层 (self.conv)

  • 使用一个 3×3 的卷积 + BN + LeakyReLU
  • 将输入特征从 in_chan 维变换到 out_chan
  • 保持空间尺寸不变 (stride=1, padding=1)

2.2 注意力生成分支

  1. 全局平均池化

    • 对每个通道的所有空间位置取平均值
    • 将 H×W×C 的特征图压缩为 1×1×C 的通道描述符
  2. 1×1 卷积 (self.conv_atten):

    • 学习通道间的相关性
    • 无偏置项,减少参数数量
  3. 批归一化 (self.bn_atten):

    • 稳定训练过程
    • 加速收敛
  4. Sigmoid 激活 (self.sigmoid_atten):

    • 将注意力权重归一化到 [0,1] 范围
    • 实现特征的软选择

3. ARM 的前向传播过程

def forward(self, x):# 1. 特征变换feat = self.conv(x)# 2. 生成注意力图atten = F.avg_pool2d(feat, feat.size()[2:])  # 全局平均池化atten = self.conv_atten(atten)              # 1×1卷积atten = self.bn_atten(atten)                # 批归一化atten = self.sigmoid_atten(atten)           # 激活# 3. 应用注意力out = torch.mul(feat, atten)  # 逐通道相乘return out

3.1 数学表达

输出特征可以表示为:
在这里插入图片描述

3.2 计算流程图示

输入特征 [ C × H × W ] ↓
3×3 Conv+BN+ReLU → 特征变换 [ C' × H × W ]↓                    ↓
全局平均池化 [C'×1×1]    |↓                    |
1×1 Conv [C'×1×1]       |↓                    |BN                    |↓                    ↓
Sigmoid → 注意力权重 [C'×1×1]↓逐通道乘法 → 输出特征 [ C' × H × W ]

4. ARM 的特点与优势

4.1 轻量高效

  • 仅增加少量参数 (一个 1×1 卷积)
  • 计算开销主要来自全局平均池化,但这是非常轻量的操作

4.2 与 SE 模块的对比

ARM 与 SENet 中的 SE 模块类似,但有重要区别:

特性ARMSE 模块
位置用于语义分割任务用于图像分类任务
输入来自上下文路径的多尺度特征单一尺度特征
输出直接用于后续分割用于分类
设计目标保持空间信息通道重校准
典型应用BiSeNet 中的特征细化ResNet 等分类网络中的增强

4.3 在 BiSeNet 中的作用

在 BiSeNet 中,ARM 被应用于不同尺度的特征:

  • ARM32:处理最深层特征 (32倍下采样)
  • ARM16:处理中间层特征 (16倍下采样)
  • ARM8:处理较浅层特征 (8倍下采样)

这种多尺度注意力机制使网络能够:

  1. 在深层捕获全局语义信息
  2. 在中间层平衡语义和细节
  3. 在浅层保留更多空间细节

5. ARM 的变体与改进

5.1 Attentionout 模块(正常残差,通道注意VS空间注意)

class Attentionout(nn.Module):def __init__(self, out_chan, *args, **kwargs):self.conv_atten = nn.Conv2d(out_chan, out_chan, kernel_size=1,bias=False)self.bn_atten = nn.BatchNorm2d(out_chan)self.sigmoid_atten = nn.Sigmoid()def forward(self, x):atten = self.conv_atten(x)  # 直接处理特征图,而非池化后的atten = self.bn_atten(atten)atten = self.sigmoid_atten(atten)out = torch.mul(x, atten)x = x + out  # 添加残差连接return out

特点:

  • 不使用全局池化,直接处理空间特征
  • 添加了残差连接
  • 生成空间注意力图而非通道注意力

5.2 SAR 模块 (Spatial Attention Refinement)【局部注意】

class SAR(nn.Module):def __init__(self, in_chan, mid, out_chan):self.conv_reduce = ConvBNReLU(in_chan, mid, 1, 1, 0)self.conv_atten = nn.Conv2d(2, 1, kernel_size=3, padding=1, bias=False)def forward(self, x):x_att = self.conv_reduce(x)low_attention_mean = torch.mean(x_att, 1, True)  # 通道均值low_attention_max = torch.max(x_att, 1, True)[0] # 通道最大值low_attention = torch.cat([low_attention_mean, low_attention_max], dim=1)spatial_attention = self.sigmoid_atten(self.bn_atten(self.conv_atten(low_attention)))x = x * spatial_attention  # 空间注意力return x

特点:

  • 同时考虑通道均值和最大值
  • 生成空间注意力图
  • 使用 3×3 卷积捕获局部空间关系

6. ARM 的实际效果

在实际应用中,ARM 模块能够:

  1. 增强语义特征:使网络更关注与类别相关的区域
  2. 抑制背景噪声:降低无关背景区域的响应
  3. 改善小目标检测:通过多尺度注意力增强小目标的特征
  4. 提升模型鲁棒性:对光照变化、遮挡等更具适应性

在 BiSeNet 的论文中,ARM 模块的引入带来了约 2-3% 的 mIoU 提升,而计算代价仅增加不到 1%。

7. 总结

ARM 模块是 BiSeNet 中高效且有效的注意力机制,它通过:

  • 全局上下文建模
  • 通道注意力重校准
  • 多尺度特征细化

显著提升了语义分割的性能,同时保持了模型的轻量级特性。这种设计思想也被后续许多实时分割网络所借鉴和发展。

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

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

相关文章

AR0144CSSC20SUKA0-CRBR——1/4英寸 1.0 MP 高性能CMOS图像传感器解析

产品概述: AR0144CSSC20SUKA0-CRBR 是一款1/4 英寸,1.0 Mp CMOS 数字图像传感器,带有 1280H x 800V 有效像素阵列 全局快门CMOS数字图像传感器,它结合了新型的创新全局快门像素设计,适用于准确快速的移动场景捕捉。该…

深入理解递归算法:Go语言实现指南

深入理解递归算法:Go语言实现指南 引言 递归是编程中一种优雅而强大的算法思想,通过函数自我调用的方式解决复杂问题。本文将使用Go语言演示递归的核心原理,并通过典型示例帮助开发者掌握这一重要技术。 一、递归基础概念 1.1 递归定义 递归…

vue2实现【瀑布流布局】

瀑布流 1. 解释2. 形成结构和样式3. 自定义指令 1. 解释 瀑布流特征: 等宽不等高:元素宽度固定,高度根据内容自适应。错落排列:元素像瀑布一样从上到下依次填充,自动寻找最短列插入 体现:图中第一排1&…

CSS display有几种属性值

在 CSS 中,display 属性是控制元素布局和渲染方式的核心属性之一。它有多种属性值,每个值都决定了元素在文档流中的表现形式。以下是 display 的主要属性值分类及说明: 1. 块级和行内布局 块级元素 (block) 特性:独占一行&…

基于Java实现可靠传输

实现可靠传输 1. 结合代码和 LOG 文件分析针对每个项目举例说明解决效果。 RDT1.0 对应 Log 日志:Log 1.0.txt,接收文件 recvData 1.0.txt RDT1.0 版本是在可靠信道上进行可靠的数据传输,因此没有过多的内容需要说明,发送方 L…

机器学习10-随机森林

随机森林学习笔记 一、随机森林简介 随机森林(Random Forest)是一种集成学习算法,基于决策树构建模型。它通过组合多个决策树的结果来提高模型的准确性和稳定性。随机森林的核心思想是利用“集成”的方式,将多个弱学习器组合成一…

LeetCode 438. 找到字符串中所有字母异位词 | 滑动窗口与字符计数数组解法

文章目录 问题描述核心思路:滑动窗口 字符计数数组1. 字符计数数组2. 滑动窗口 算法步骤完整代码实现复杂度分析关键点总结类似问题 问题描述 给定两个字符串 s 和 p,要求找到 s 中所有是 p 的**字母异位词(Anagram)**的子串的起…

idea中,git的cherry-pick怎么用

背景: A同学在A分支进行开发, B同学在B分支进行开发,B同学开发过程中发现,A同学在A分支上面的某次提交,例如某次提交了一个工具类,B同学也用的到这个工具类,但是B又不想mergeA分支的代码,此时就可以用到git的chery pick能力.

深入解析:如何基于开源OpENer开发EtherNet/IP从站服务

一、EtherNet/IP协议概述 EtherNet/IP(Industrial Protocol)是一种基于以太网的工业自动化通信协议,它将CIP(Common Industrial Protocol)封装在标准以太网帧中,通过TCP/IP和UDP/IP实现工业设备间的通信。作为ODVA(Open DeviceNet Vendors Association)组织的核心协议…

当 PyIceberg 和 DuckDB 遇见 AWS S3 Tables:打造 Serverless 数据湖“开源梦幻组合”

引言 在一些大数据分析场景比如电商大数据营销中,我们需要快速分析存储海量用户行为数据(如浏览、加购、下单),以进行用户行为分析,优化营销策略。传统方法依赖 Spark/Presto 集群或 Redshift 查询 S3 上的 Parquet/O…

流复备机断档处理

文章目录 环境症状问题原因解决方案 环境 系统平台:UOS(海光),UOS (飞腾),UOS(鲲鹏),UOS(龙芯),UOS (申威),银河麒麟svs(X86_64&…

【蓝桥杯真题精讲】第 16 届 Python A 组(省赛)

文章目录 T1 偏蓝 (5/5)T2 IPv6 (0/5)T3 2025 图形 (10/10)T4 最大数字 (10/10)T5 倒水 (15/15)T6 拼好数 (0/15)T7 登山 (20/20)T8 原料采购 (20/20) 更好的阅读体验 高速访问:https://wiki.dwj601.cn/ds-and-algo/lan-qiao-cup/16th-python-a/永久链接&#xff1…

SpringBoot+Dubbo+Zookeeper实现分布式系统步骤

SpringBootDubboZookeeper实现分布式系统 一、分布式系统通俗解释二、环境准备(详细版)1. 软件版本2. 安装Zookeeper(单机模式) 三、完整项目结构(带详细注释)四、手把手代码实现步骤1:创建父工…

Spring的业务层,持久层,控制层的关系

在 Spring 框架中,控制层(Controller)、业务层(Service) 和 持久层(Repository/Mapper) 是分层架构的核心组成部分,职责分离明确,通过依赖注入(DI&#xff09…

css实现不确定内容的高度过渡

实现效果&#xff1a;鼠标悬浮按钮&#xff0c;高度过渡出现如图所示文本框 代码&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-widt…

计算机视觉与深度学习 | matlab实现ARIMA-WOA-CNN-LSTM时间序列预测(完整源码和数据)

以下是一个基于MATLAB的ARIMA-WOA-CNN-LSTM时间序列预测框架。由于完整代码较长,此处提供核心模块和实现思路,完整源码和数据可通过文末方式获取。 1. 数据准备(示例数据) 使用MATLAB内置的航空乘客数据集: % 加载数据 data = readtable(airline-passengers.csv); data …

在 Excel 中使用东方仙盟软件————仙盟创梦IDE

安装插件 用仙盟创梦编写插件代码 源码 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using ExcelDna.Integration;namespace 东方仙盟.仙盟创梦IDE_招标系统 {public static class 仙盟创梦_招标专…

Sql刷题日志(day9)

一、笔试 1、limit offset&#xff1a;分页查询 SELECT column1, column2, ... FROM table_name LIMIT number_of_rows OFFSET start_row; --跳过前 start_row 行&#xff0c;返回接下来的 number_of_rows 行。 2、lag、lead&#xff1a;查询前后行数据 --lag函数用于访问当…

C++面试3——const关键字的核心概念、典型场景和易错陷阱

const关键字的核心概念、典型场景和易错陷阱 一、const本质&#xff1a;类型系统的守护者 1. 与#define的本质差异 维度#defineconst编译阶段预处理替换编译器类型检查作用域无作用域&#xff08;全局污染&#xff09;遵循块作用域调试可见性符号消失保留符号信息类型安全无类…

16-看门狗和RTC

一、独立看门狗 1、独立看门狗概述 在由单片机构成的微型计算机系统中&#xff0c;由于单片机的工作常常会受到来自外界电磁场的干扰&#xff0c;造成程序的跑飞&#xff08;不按照正常程序进行运行&#xff0c;如程序重启&#xff0c;但是如果我们填加看门狗的技术&#xff0…