ARM (Attention Refinement Module)

news2025/5/19 3:41:28

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.coloradmin.cn/o/2378984.html

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

相关文章

国产免费工作流引擎star 6.5k,Warm-Flow升级1.7.2(新增案例和修复缺陷)

文章目录 主要更新内容项目介绍功能思维导图设计器流程图演示地址官网Warm-Flow视频 主要更新内容 [feat] 开启流程实例,新增流程定义是否存在校验[feat] 新增合同签订流程案例[feat] 新增企业采购流程案例[update] mybatis-plus逻辑删除,删除值和未删除…

前端二进制数据指南:从 ArrayBuffer 到高级流处理

前端开发中,二进制数据是处理文件、图像、音视频、网络通信等场景的基础。以下是核心概念和用途的通俗解释: 前端二进制数据介绍 1. 什么是前端二进制数据? 指计算机原始的 0 和 1 格式的数据(比如一张图片的底层代码&#xff…

如何选择高性价比的 1T 服务器租用服务​

选择高性价比的 1T 服务器租用服务​,可参考以下内容: 1、根据需求选配置​ 明确自身业务需求是关键。若为小型网站或轻量级应用,数据存储与处理需求不高,选择基础配置服务器即可。如个人博客网站,普通的 Intel Xeon …

一个可拖拉实现列表排序的WPF开源控件

从零学习构建一个完整的系统 推荐一个可通过拖拉,来实现列表元素的排序的WPF控件。 项目简介 gong-wpf-dragdrop是一个开源的.NET项目,用于在WPF应用程序中实现拖放功能,可以让开发人员快速、简单的实现拖放的操作功能。 可以在同一控件内…

AI-02a5a6.神经网络-与学习相关的技巧-批量归一化

批量归一化 Batch Normalization 设置合适的权重初始值,则各层的激活值分布会有适当的广度,从而可以顺利的进行学习。那么,更进一步,强制性的调整激活值的分布,是的各层拥有适当的广度呢?批量归一化&#…

SVGPlay:一次 CodeBuddy 主动构建的动画工具之旅

我正在参加CodeBuddy「首席试玩官」内容创作大赛,本文所使用的 CodeBuddy 免费下载链接:腾讯云代码助手 CodeBuddy - AI 时代的智能编程伙伴 背景与想法 我一直对 SVG 图标的动画处理有浓厚兴趣,特别是描边、渐变、交互等效果能为图标增添许…

自己手写tomcat项目

一:Servlet的原理 在Servlet(接口中)有: 1.init():初始化servlet 2.getServletConfig():获取当前servlet的配置信息 3.service():服务器(在HttpServlet中实现,目的是为了更好的匹配http的请求方式) 4.g…

2025年渗透测试面试题总结-安恒[实习]安全工程师(题目+回答)

网络安全领域各种资源,学习文档,以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具,欢迎关注。 目录 安恒[实习]安全工程师 一面 1. 自我介绍 2. 前两段实习做了些什么 3. 中等难度的算法题 4. Java的C…

生成对抗网络(Generative Adversarial Networks ,GAN)

生成对抗网络是深度学习领域最具革命性的生成模型之一。 一 GAN框架 1.1组成 构造生成器(G)与判别器(D)进行动态对抗,实现数据的无监督生成。 G(造假者):接收噪声 ​&#xff0c…

在WSL中的Ubuntu发行版上安装Anaconda、CUDA、CUDNN和TensorRT

在Windows 11的WSL(Windows Subsystem for Linux)环境中安装Anaconda、CUDA、CUDNN和TensorRT的详细步骤整理: 本文是用cuda12.4与CuDNN 8.9.7 和 TensorRT 9.1.0 及以上对应 一、前言(准备) 确保电脑上有NVIDIA GPU…

代码随想录算法训练营第60期第三十九天打卡

大家好,我们今天继续讲解我们的动态规划章节,昨天我们讲到了动态规划章节的背包问题,昨天讲解的主要是0-1背包问题,那么今天我们可能就会涉及到完全背包问题,昨天的题目有一道叫做分割等和子集,今天应该会有…

计算机网络体系结构深度解析:从理论到实践的全面梳理

计算机网络体系结构深度解析:从理论到实践的全面梳理 本系列博客源自作者在大二期末复习计算机网络时所记录笔记,看的视频资料是B站湖科大教书匠的计算机网络微课堂,祝愿大家期末都能考一个好成绩! 一、常见计算机网络体系结构 …

【教程】Docker更换存储位置

转载请注明出处:小锋学长生活大爆炸[xfxuezhagn.cn] 如果本文帮助到了你,欢迎[点赞、收藏、关注]哦~ 目录 背景说明 更换教程 1. 停止 Docker 服务 2. 创建新的存储目录 3. 编辑 Docker 配置文件 4. 迁移已有数据到新位置 5. 启动 Docker 服务 6…

鸿蒙Next API17学习新特性之组件可见区域变化事件新增支持设置事件的回调参数,限制它的执行间隔

概述 鸿蒙开发文档更新的非常快,对应我们开发者的学习能力也要求非常高,今天这篇文章给大家分享一下鸿蒙API17中更新的新特性学习。 鸿蒙 Next 的组件可见区域变化事件在最新的 API Version 17 中得到了增强,新增了支持设置事件的回调参数的…

深入解析 React 的 useEffect:从入门到实战

文章目录 前言一、为什么需要 useEffect?核心作用: 二、useEffect 的基础用法1. 基本语法2. 依赖项数组的作用 三、依赖项数组演示1. 空数组 []:2.无依赖项(空)3.有依赖项 四、清理副作用函数实战案例演示1. 清除定时器…

通过Ollama读取模型

通过Ollama读取模型 前言一、查看本地Ollama上有哪些模型二、调用bge-m3模型1、调用模型2、使用bge-m3进行相似度比较 三、调用大模型 前言 手动下载和加载大模型通常需要复杂的环境配置,而使用Ollama可以避免这一问题。本文将介绍如何调用Ollama上的模型。 一、查…

永久免费,特殊版本!

随着大家审美的不断提升,无论是社交平台的日常分享还是特定场景的图像展示,人们对图像质量的要求都日益严苛。为了呈现更完美的视觉效果,许多小伙伴都会对原始图像进行精细化的后期处理,其中复杂背景抠图、光影调整、色彩校正等专…

Canva 推出自有应用生成器以与 Bolt 和 Lovable 竞争

AI 目前是一个巨大的市场,每个人都想从中分一杯羹。 即使是 Canva,这个以拖放图形设计而闻名的流行设计平台,也在其 Canva Create 2025 活动中发布了自己版本的代码生成器,加入了 AI 竞赛。 但为什么一个以设计为先的平台会提供代码生成工具呢? 乍看之下,这似乎有些不…

Matrix-Game:键鼠实时控制、实时生成的游戏生成模型(论文代码详细解读)

1.简介 本文介绍了一种名为Matrix-Game的交互式世界基础模型,专门用于可控的游戏世界生成。 Matrix-Game通过一个两阶段的训练流程来实现:首先进行大规模无标签预训练以理解环境,然后进行动作标记训练以生成交互式视频。为此,研…

MySQL 5.7在CentOS 7.9系统下的安装(下)——给MySQL设置密码

新下载下来的MySQL,由于没有root密码,(1)所以如果我们希望登陆mysql,得给mysql的root账户设置密码,或者另一方面来说,(2)未来如果你忘记root密码了,也能通过这…