【有啥问啥】SimAM(Similarity-Aware Activation Module)注意力机制详解

SimAM(Similarity-Aware Activation Module)注意力机制详解
引言
在计算机视觉领域,注意力机制通过引导模型关注图像中的关键区域,显著提升了模型处理和理解图像的能力。SimAM(Similarity-Aware Activation Module)作为一种轻量级、无参数的注意力机制,以其独特的优势逐渐受到研究者和开发者的关注。本文将详细解析SimAM注意力机制的工作原理、实现方式、优势。
SimAM注意力机制概述
SimAM是一种基于特征图局部自相似性的注意力机制。它通过计算特征图中每个像素与其周围像素之间的相似性,来动态地调整每个像素的权重,从而实现对重要特征的增强和对不相关特征的抑制。SimAM的创新之处在于其无参数特性,使得模型在保持较低复杂度的同时,依然能够取得出色的性能。
SimAM的工作原理与公式解释
SimAM的工作原理可以分为以下几个步骤,并伴随相应的公式解释:
-
特征图提取:通过卷积神经网络(CNN)提取输入图像的特征图 X ∈ R B × C × H × W X \in \mathbb{R}^{B \times C \times H \times W} X∈RB×C×H×W,其中 B B B 是批次大小, C C C 是通道数, H H H 和 W W W 分别是特征图的高度和宽度。
-
计算局部自相似性:对于特征图中的每个像素 x i , j x_{i,j} xi,j(其中 i , j i, j i,j 分别表示像素在特征图中的位置索引),SimAM计算其与周围像素的相似性。这种相似性通过计算像素间特征向量的距离来衡量,常用的是欧几里得距离的负平方。但SimAM实际上是通过计算每个像素与其邻域内像素差的平方的平均值(经过归一化)来间接反映相似性。具体地,对于每个像素,计算其与邻域内所有像素差的平方,然后求和并归一化:
s i , j = 1 N ∑ k ∈ Ω i , j ∥ x i , j − x k ∥ 2 2 s_{i,j} = \frac{1}{N} \sum_{k \in \Omega_{i,j}} \|x_{i,j} - x_k\|_2^2 si,j=N1k∈Ωi,j∑∥xi,j−xk∥22
其中, Ω i , j \Omega_{i,j} Ωi,j 表示像素 x i , j x_{i,j} xi,j 的邻域(不包括 x i , j x_{i,j} xi,j 本身, N N N 是邻域内像素的数量),但SimAM实际实现中通常使用整个特征图的均值进行中心化,并减去中心化后的结果来计算差的平方,以简化计算。
-
生成注意力权重:基于上述计算的 s i , j s_{i,j} si,j(或更准确地说是基于中心化后的差的平方),SimAM通过以下公式生成注意力权重 w i , j w_{i,j} wi,j:
w i , j = 1 1 + exp ( − 1 4 ( s i , j σ i , j 2 + ϵ − 1 ) ) w_{i,j} = \frac{1}{1 + \exp\left(-\frac{1}{4} \left( \frac{s_{i,j}}{\sigma_{i,j}^2 + \epsilon} - 1 \right) \right)} wi,j=1+exp(−41(σi,j2+ϵsi,j−1))1
其中, σ i , j 2 \sigma_{i,j}^2 σi,j2 是 s i , j s_{i,j} si,j 的某种形式的归一化(在SimAM的实现中,通常是通过整个特征图或局部区域的 s i , j s_{i,j} si,j 的平均值和标准差来近似), ϵ \epsilon ϵ 是一个很小的常数(如 1 e − 4 1e-4 1e−4),用于防止除零错误。这个公式实际上是一个sigmoid函数的变体,用于将 s i , j s_{i,j} si,j 映射到 ( 0 , 1 ) (0, 1) (0,1) 区间内,作为注意力权重。
但请注意,上述公式是对SimAM原理的一种概括性描述。在实际实现中,SimAM通过计算特征图中心化后的差的平方,并对其进行归一化和缩放,最后应用sigmoid函数来生成注意力权重。
-
注意力图与特征图相乘:将生成的注意力权重图 W ∈ R B × 1 × H × W W \in \mathbb{R}^{B \times 1 \times H \times W} W∈RB×1×H×W(注意这里忽略了通道维度,因为SimAM通常对每个通道独立计算注意力权重)与原始特征图 X X X 相乘,得到加权的特征图 X ′ = W ⊙ X X' = W \odot X X′=W⊙X,其中 ⊙ \odot ⊙ 表示逐元素相乘。
SimAM的实现
SimAM的实现相对简单,可以直接嵌入到现有的CNN模型中。以下是基于PyTorch的简化实现示例(注意,这里的实现可能与上述公式描述略有不同,但核心思想相同):
import torch
import torch.nn as nnclass SimAM(nn.Module):def __init__(self, channels=None, e_lambda=1e-4):super(SimAM, self).__init__()self.activaton = nn.Sigmoid()self.e_lambda = e_lambdadef forward(self, x):b, c, h, w = x.size()n = w * h - 1 # 可以选择是否减去中心像素,但通常不减去# 中心化特征图mu = x.mean(dim=[2, 3], keepdim=True).expand_as(x)x_centered = x - mu# 计算差的平方x_minus_mu_square = x_centered.pow(2)# 归一化并计算注意力权重norm_factor = x_minus_mu_square.sum(dim=[2, 3], keepdim=True) / n + self.e_lambday = x_minus_mu_square / (4 * norm_factor) + 0.5attention_map = self.activaton(y)# 将注意力权重图与原始特征图相乘return x * attention_map# 示例使用
# 假设输入x是一个四维张量,代表一批图像的特征图
# x = torch.randn(batch_size, channels, height, width)
# simam_module = SimAM(channels=channels, e_lambda=1e-4)
# output = simam_module(x)
SimAM的优势
SimAM注意力机制具有以下优势:
-
轻量级与无参数:SimAM不需要引入任何额外的参数,降低了模型的复杂度和计算成本。
-
性能提升:通过计算特征图的局部自相似性,能够有效增强重要特征,抑制不相关特征,从而提升模型的整体性能。
-
通用性强:SimAM可嵌入多种现有的CNN架构中,适应性强,能广泛应用于不同的计算机视觉任务。
-
鲁棒性:在处理具有噪声和遮挡的图像时,SimAM展现出了良好的鲁棒性,能够更好地识别重要特征。
SimAM的应用
SimAM注意力机制已经在多个计算机视觉任务中得到了应用,如图像分类、目标检测、图像分割等,并取得了良好的效果。例如,SimAM可以提高目标检测模型在复杂场景中的检测准确率,并增强图像分割模型对边界的敏感性。未来,随着研究的深入和应用的拓展,SimAM有望在更多的计算机视觉任务中发挥重要作用,特别是在实时处理和移动设备上的应用。
结论
SimAM作为一种轻量级、无参数的注意力机制,在计算机视觉领域展现出了巨大的潜力。通过计算特征图的局部自相似性并生成注意力权重,SimAM实现了对重要特征的增强和对不相关特征的抑制,从而提升了模型的性能。未来,我们期待看到SimAM在更多领域和任务中的应用和发展,同时也期待其在更复杂的视觉任务中发挥更大的作用。
相关文章:
【有啥问啥】SimAM(Similarity-Aware Activation Module)注意力机制详解
SimAM(Similarity-Aware Activation Module)注意力机制详解 引言 在计算机视觉领域,注意力机制通过引导模型关注图像中的关键区域,显著提升了模型处理和理解图像的能力。SimAM(Similarity-Aware Activation Module&a…...
鸿蒙应用开发,如何保存登录信息
在鸿蒙应用开发中,保存登录信息是实现用户自动登录、个性化展示等功能的基础。以下是一些常用的保存登录信息的方法: 一、全局状态管理 对于简单的应用,可以在全局范围内定义一个类(如UserManager),使用单…...
★ C++进阶篇 ★ map和set
Ciallo~(∠・ω< )⌒☆ ~ 今天,我将继续和大家一起学习C进阶篇第四章----map和set ~ ❄️❄️❄️❄️❄️❄️❄️❄️❄️❄️❄️❄️❄️❄️ 澄岚主页:椎名澄嵐-CSDN博客 C基础篇专栏:★ C基础篇 ★_椎名澄嵐的博客-CSDN博…...
Python知识点:如何使用Nvidia Jetson与Python进行边缘计算
开篇,先说一个好消息,截止到2025年1月1日前,翻到文末找到我,赠送定制版的开题报告和任务书,先到先得!过期不候! 如何使用Nvidia Jetson与Python进行边缘计算 Nvidia Jetson平台是专为边缘计算设…...
动态分配内存
目录 前言 一.malloc,free函数 1.malloc,free函数原型 2.使用方法 3.具体实例 4.注意事项 二.calloc函数 1.calloc函数原型 2.主要特点 3.使用案例 三.realloc函数 1.realloc函数原型 2.使用案例 3.注意事项 前言 动态内存是指在程序运行时,按需分配和…...
Unity Input System自动生成配置
参考视频 创建及配置新输入系统 New Input System|Unity2022.2 最新教程《勇士传说》入门到进阶|4K_哔哩哔哩_bilibili ProjectSettings设置 Unity编辑器菜单栏选择Edit->Project Settings->Player->Other Settings,将Api Compatibility Level…...
【Windows】在任务管理器中隐藏进程
在此前的一篇,我们已经介绍过了注入Dll 阻止任务管理器结束进程 -- Win 10/11。本篇利用 hook NtQuerySystemInformation 并进行断链的方法实现进程隐身,实测支持 taskmgr.exe 的任意多进程隐身。 任务管理器 代码: // dllmain.cpp : 定义 …...
【TypeScript学习】TypeScript基础学习总结二
主要记录ts中的类、接口与泛型 1.类 无论是在哪种语言中,类都是面向对象编程(OOP)的一个主要实现方式。能够实现代码更加灵活,更具有结构化。类作用都是提供一个模板,通过类可以创建多个具有相同结构的对象。 // 类的定义,与对象…...
中国电信解锁万亿参数大模型:TeleAI的创新与突破
首个由万卡集群训练出来的万亿参数大模型,已被一家央企解锁。 具体而言,为了推动纯国产人工智能的探索,带来这条新路径的正是中国电信人工智能研究院(TeleAI)。 该研究院由中国电信集团的CTO、首席科学家兼院长李学龙…...
戴尔PowerEdge R840服务器亮黄灯 不开机
最近接修到一台东莞用户的DELL PowerEdge R840 服务器因为意外断电后,无法正常开机的问题, 大概故障现象是 插上电源线 按卡机按钮无响应,无法开机,无显示输出,工程师到现场检修,经过idrac中日志分析&#…...
【前端安全】js逆向之微信公众号登录密码
❤️博客主页: iknow181 🔥系列专栏: 网络安全、 Python、JavaSE、JavaWeb、CCNP 🎉欢迎大家点赞👍收藏⭐评论✍ 随着发展,越来越多的登录页面添加了密码加密的措施,使得暴力破解变得不在简单&a…...
C# 泛型使用案例_C# 泛型使用整理
一、系统自带常用的泛型 1.字典,集合 //字典 Dictionary<string, int> dic new Dictionary<string, int>(); //泛型集合 List<int> list new List<int>(); 2.泛型委托,输入参数,输出参数 //泛型 委托---输出参…...
Docker 安装 Citus 单节点集群:全面指南与详细操作
Docker 安装 Citus 单节点集群:全面指南与详细操作 文章目录 Docker 安装 Citus 单节点集群:全面指南与详细操作一 服务器资源二 部署图三 安装部署1 创建网络2 运行脚本1)docker-compose.cituscd1.yml2)docker-compose.cituswk1.…...
Arthas redefine(加载外部的.class文件,redefine到JVM里 )
文章目录 二、命令列表2.2 class/classloader相关命令2.2.3 redefine(加载外部的.class文件,redefine到JVM里 )举例1:加载新的代码,jad/mc 命令使用举例2:上传 .class 文件到服务器的技巧 本人其他相关文章…...
C++教程(三):c++常用的配置文件类型
目录 1. INI 文件 2. JSON 文件 3. YAML 文件 4. XML 文件 5. TOML 文件 6. 二进制配置文件(Protocol Buffers, MessagePack, Avro 等) 总结 在 C 项目中,常用的配置文件类型有多种选择,具体选择取决于项目的复杂性、可读性…...
Arduino Uno控制雨滴传感器模块的设计方案
以下是Arduino Uno控制雨滴传感器模块的设计方案: 一、硬件准备: 1. Arduino Uno 开发板一块。 2. 雨滴传感器模块一个。 3. 杜邦线若干。 4. 9V直流电源一个。 二、硬件连接: 1. 将Arduino Uno板的Vin引脚、GND引脚分别连接到9V直流电…...
华为常见命令手册
常见命令 display ip interface brief —> 查看设备上的每个接口的IP地址【地址/掩码/状态】 display interface gi0/0/0 → 查看该接口的MAC 地址 ipconfig → 查看 PC 上面的 IP地址 display arp → 查看设备的 ARP 表 arp -a → 查看 PC 上面的 ARP 表 display m…...
TinyAP:使用TinyML对抗Wi-Fi攻击的智能接入点
论文标题: 英文:TinyAP: An intelligent Access Point to combat Wi-Fi attacks using TinyML中文:TinyAP:使用TinyML对抗Wi-Fi攻击的智能接入点 作者信息: Anand Agrawal 和 Rajib Ranjan Maiti,来自印…...
grafana频繁DataSourceError问题
背景 随着 Grafana 数据量的不断增加,逐渐暴露出以下问题: Grafana 页面加载缓慢;Grafana 告警频繁出现 DatasourceError 错误。 对于第一个问题,大家可以参考这篇文章:Grafana 加载缓慢的解决方案。 不过…...
python-ds:Python 中的数据结构库(适用于面试的数据结构和算法合集)
在软件开发中,数据结构是组织和存储数据的方式,对算法的效率和程序的性能至关重要。Python 提供了许多内置的数据结构,但在一些复杂的应用场景中,原生数据结构可能无法满足特定需求。这时,一个功能强大、易于使用的数据…...
日语AI面试高效通关秘籍:专业解读与青柚面试智能助攻
在如今就业市场竞争日益激烈的背景下,越来越多的求职者将目光投向了日本及中日双语岗位。但是,一场日语面试往往让许多人感到步履维艰。你是否也曾因为面试官抛出的“刁钻问题”而心生畏惧?面对生疏的日语交流环境,即便提前恶补了…...
CVPR 2025 MIMO: 支持视觉指代和像素grounding 的医学视觉语言模型
CVPR 2025 | MIMO:支持视觉指代和像素对齐的医学视觉语言模型 论文信息 标题:MIMO: A medical vision language model with visual referring multimodal input and pixel grounding multimodal output作者:Yanyuan Chen, Dexuan Xu, Yu Hu…...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院挂号小程序
一、开发准备 环境搭建: 安装DevEco Studio 3.0或更高版本配置HarmonyOS SDK申请开发者账号 项目创建: File > New > Create Project > Application (选择"Empty Ability") 二、核心功能实现 1. 医院科室展示 /…...
1.3 VSCode安装与环境配置
进入网址Visual Studio Code - Code Editing. Redefined下载.deb文件,然后打开终端,进入下载文件夹,键入命令 sudo dpkg -i code_1.100.3-1748872405_amd64.deb 在终端键入命令code即启动vscode 需要安装插件列表 1.Chinese简化 2.ros …...
(二)原型模式
原型的功能是将一个已经存在的对象作为源目标,其余对象都是通过这个源目标创建。发挥复制的作用就是原型模式的核心思想。 一、源型模式的定义 原型模式是指第二次创建对象可以通过复制已经存在的原型对象来实现,忽略对象创建过程中的其它细节。 📌 核心特点: 避免重复初…...
全志A40i android7.1 调试信息打印串口由uart0改为uart3
一,概述 1. 目的 将调试信息打印串口由uart0改为uart3。 2. 版本信息 Uboot版本:2014.07; Kernel版本:Linux-3.10; 二,Uboot 1. sys_config.fex改动 使能uart3(TX:PH00 RX:PH01),并让boo…...
【Oracle】分区表
个人主页:Guiat 归属专栏:Oracle 文章目录 1. 分区表基础概述1.1 分区表的概念与优势1.2 分区类型概览1.3 分区表的工作原理 2. 范围分区 (RANGE Partitioning)2.1 基础范围分区2.1.1 按日期范围分区2.1.2 按数值范围分区 2.2 间隔分区 (INTERVAL Partit…...
使用Matplotlib创建炫酷的3D散点图:数据可视化的新维度
文章目录 基础实现代码代码解析进阶技巧1. 自定义点的大小和颜色2. 添加图例和样式美化3. 真实数据应用示例实用技巧与注意事项完整示例(带样式)应用场景在数据科学和可视化领域,三维图形能为我们提供更丰富的数据洞察。本文将手把手教你如何使用Python的Matplotlib库创建引…...
用机器学习破解新能源领域的“弃风”难题
音乐发烧友深有体会,玩音乐的本质就是玩电网。火电声音偏暖,水电偏冷,风电偏空旷。至于太阳能发的电,则略显朦胧和单薄。 不知你是否有感觉,近两年家里的音响声音越来越冷,听起来越来越单薄? —…...
return this;返回的是谁
一个审批系统的示例来演示责任链模式的实现。假设公司需要处理不同金额的采购申请,不同级别的经理有不同的审批权限: // 抽象处理者:审批者 abstract class Approver {protected Approver successor; // 下一个处理者// 设置下一个处理者pub…...
