【有啥问啥】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 提供了许多内置的数据结构,但在一些复杂的应用场景中,原生数据结构可能无法满足特定需求。这时,一个功能强大、易于使用的数据…...
java_网络服务相关_gateway_nacos_feign区别联系
1. spring-cloud-starter-gateway 作用:作为微服务架构的网关,统一入口,处理所有外部请求。 核心能力: 路由转发(基于路径、服务名等)过滤器(鉴权、限流、日志、Header 处理)支持负…...
《用户共鸣指数(E)驱动品牌大模型种草:如何抢占大模型搜索结果情感高地》
在注意力分散、内容高度同质化的时代,情感连接已成为品牌破圈的关键通道。我们在服务大量品牌客户的过程中发现,消费者对内容的“有感”程度,正日益成为影响品牌传播效率与转化率的核心变量。在生成式AI驱动的内容生成与推荐环境中࿰…...
AI编程--插件对比分析:CodeRider、GitHub Copilot及其他
AI编程插件对比分析:CodeRider、GitHub Copilot及其他 随着人工智能技术的快速发展,AI编程插件已成为提升开发者生产力的重要工具。CodeRider和GitHub Copilot作为市场上的领先者,分别以其独特的特性和生态系统吸引了大量开发者。本文将从功…...
C# 求圆面积的程序(Program to find area of a circle)
给定半径r,求圆的面积。圆的面积应精确到小数点后5位。 例子: 输入:r 5 输出:78.53982 解释:由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982,因为我们只保留小数点后 5 位数字。 输…...
JVM虚拟机:内存结构、垃圾回收、性能优化
1、JVM虚拟机的简介 Java 虚拟机(Java Virtual Machine 简称:JVM)是运行所有 Java 程序的抽象计算机,是 Java 语言的运行环境,实现了 Java 程序的跨平台特性。JVM 屏蔽了与具体操作系统平台相关的信息,使得 Java 程序只需生成在 JVM 上运行的目标代码(字节码),就可以…...
【Go语言基础【13】】函数、闭包、方法
文章目录 零、概述一、函数基础1、函数基础概念2、参数传递机制3、返回值特性3.1. 多返回值3.2. 命名返回值3.3. 错误处理 二、函数类型与高阶函数1. 函数类型定义2. 高阶函数(函数作为参数、返回值) 三、匿名函数与闭包1. 匿名函数(Lambda函…...
嵌入式学习笔记DAY33(网络编程——TCP)
一、网络架构 C/S (client/server 客户端/服务器):由客户端和服务器端两个部分组成。客户端通常是用户使用的应用程序,负责提供用户界面和交互逻辑 ,接收用户输入,向服务器发送请求,并展示服务…...
C++.OpenGL (20/64)混合(Blending)
混合(Blending) 透明效果核心原理 #mermaid-svg-SWG0UzVfJms7Sm3e {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-SWG0UzVfJms7Sm3e .error-icon{fill:#552222;}#mermaid-svg-SWG0UzVfJms7Sm3e .error-text{fill…...
三分算法与DeepSeek辅助证明是单峰函数
前置 单峰函数有唯一的最大值,最大值左侧的数值严格单调递增,最大值右侧的数值严格单调递减。 单谷函数有唯一的最小值,最小值左侧的数值严格单调递减,最小值右侧的数值严格单调递增。 三分的本质 三分和二分一样都是通过不断缩…...
比较数据迁移后MySQL数据库和OceanBase数据仓库中的表
设计一个MySQL数据库和OceanBase数据仓库的表数据比较的详细程序流程,两张表是相同的结构,都有整型主键id字段,需要每次从数据库分批取得2000条数据,用于比较,比较操作的同时可以再取2000条数据,等上一次比较完成之后,开始比较,直到比较完所有的数据。比较操作需要比较…...
