当前位置: 首页 > java >正文

(即插即用模块-Attention部分) 六十一、(2024 ACCV) LIA 基于局部重要性的注意力

在这里插入图片描述

文章目录

  • 1、Local Importance-based Attention
  • 2、代码实现

paper:PlainUSR: Chasing Faster ConvNet for Efficient Super-Resolution

Code:https://github.com/icandle/PlainUSR


1、Local Importance-based Attention

现有空间注意力机制的缺陷:1-order 注意力(如 ESA): 性能较弱,无法充分利用图像信息。2-order 注意力(如 Self-Attention): 计算复杂度高,运行速度慢,不适合轻量级 SR 模型。而这篇论文提出一种 基于局部重要性的注意力(Local Importance-based Attention),旨在保证性能的前提下,降低计算复杂度,实现高效的 2-order 信息交互。LIA d的原理主要有两点:局部重要性: 通过计算每个像素周围区域的局部重要性,识别图像中关键信息的位置。注意力图: 利用局部重要性生成注意力图,对特征图进行加权,增强重要信息,抑制无关信息。

LIA 的实现过程:

  1. 局部重要性计算:使用 SoftPool 和 3x3 卷积对特征图进行下采样,扩大感受野,减少计算量。然后通过 Sigmoid 激活函数将下采样后的特征图转换为局部重要性图。
  2. 注意力图生成:使用第一个通道的特征图作为门控信号,对局部重要性图进行加权。使用 Bilinear 插值将注意力图缩放到原始特征图的尺寸。
  3. 特征图加权:将注意力图与原始特征图进行逐元素相乘,得到加权后的特征图。

优势:

  • 性能: LIA 能够有效地捕捉图像中的关键信息,提升 SR 模型的性能。
  • 效率: 相比于 2-order 注意力机制,LIA 计算复杂度更低,运行速度更快。
  • 可扩展性: LIA 可以灵活地与其他网络结构结合,适用于不同的 SR 任务。

Local Importance-based Attention 结构图:
在这里插入图片描述


2、代码实现

import math
import torch
import torch.nn as nn
import torch.nn.functional as Fclass SoftPooling2D(torch.nn.Module):def __init__(self,kernel_size,stride=None,padding=0):super(SoftPooling2D, self).__init__()self.avgpool = torch.nn.AvgPool2d(kernel_size,stride,padding, count_include_pad=False)def forward(self, x):# return self.avgpool(x)x_exp = torch.exp(x)x_exp_pool = self.avgpool(x_exp)x = self.avgpool(x_exp*x)return x/x_exp_poolclass LIA(nn.Module):''' attention based on local importance'''def __init__(self, channels, f=16):super().__init__()f = fself.body = nn.Sequential(# sample importancenn.Conv2d(channels, f, 1),SoftPooling2D(7, stride=3),nn.Conv2d(f, f, kernel_size=3, stride=2, padding=1),nn.Conv2d(f, channels, 3, padding=1),# to heatmapnn.Sigmoid(),)self.gate = nn.Sequential(nn.Sigmoid(),)def forward(self, x):''' forward '''# interpolate the heat mapg = self.gate(x[:,:1])w = F.interpolate(self.body(x), (x.size(2), x.size(3)), mode='bilinear', align_corners=False)return x * w * gif __name__ == '__main__':x = torch.randn(4, 64, 128, 128).cuda()model = LIA(64).cuda()out = model(x)print(out.shape)
http://www.xdnf.cn/news/3377.html

相关文章:

  • 【数据分享】2020年中国高精度森林覆盖数据集(免费获取)
  • VBA数据库解决方案第二十讲:Select From Where条件表达式
  • 「面白い」日本 课文详解
  • 【MySQL数据库】视图
  • Flutter PIP 插件 ---- 新增PipActivity,Android 11以下支持自动进入PIP Mode
  • ARM ASM
  • 【云原生】基于Centos7 搭建Redis 6.2 操作实战详解
  • 【五一培训】Day1
  • Redis 挂掉后高并发系统的应对策略:使用 Sentinel 实现限流降级与 SkyWalking 监控优化
  • PostgreSQL 数据库下载和安装
  • Stm32 烧录 Micropython
  • 基于机器学习的舆情分析算法研究
  • 连接linux虚拟机并运行C++【从0开始】
  • 机器学习实战,天猫双十一销量与中国人寿保费预测,使用多项式回归,梯度下降,EDA数据探索,弹性网络等技术
  • vue中$set原理
  • Meta公司于2025年4月29日正式推出了全新Meta AI应用程序的首个版本
  • 正则表达式:精准匹配,高效处理文本
  • 《软件设计师》复习笔记(11.1)——生命周期、CMM、开发模型
  • 结构模式识别理论与方法
  • JWT Access Token 被窃取的风险与解决方案
  • spring-boot-maven-plugin 将spring打包成单个jar的工作原理
  • 企业经营系统分类及功能详解
  • 华为eNSP:IS-IS认证
  • 机器人--主机--控制系统
  • Python 常用内置函数详解(九):type()函数——获取对象类型或获取一个新的类型对象
  • RAG工程-基于LangChain 实现 Advanced RAG(预检索-查询优化)(上)
  • 2025华东杯数学建模B题完整分析论文(共36页)(含模型、代码、数据)
  • 分享5款开源、美观的 WinForm UI 控件库
  • 【Linux网络】I/O多路转接技术 - poll
  • DAY01:Vue零基础入门:环境搭建与核心语法深度解析