【Block总结】SAFMN,空间自适应调制与局部特征增强的协同设计|即插即用

news/2025/3/3 20:35:40/

论文信息

  • 标题:Spatially-Adaptive Feature Modulation for Efficient Image Super-Resolution
  • 论文链接:https://arxiv.org/pdf/2302.13800
  • 代码与模型:https://github.com/sunny2109/SAFMN
    在这里插入图片描述

创新点

  1. 空间自适应特征调制(SAFM):通过独立计算多尺度特征并动态聚合,实现非局部特征依赖的高效建模[6][8]。
  2. 卷积通道混合器(CCM):在SAFM基础上补充局部上下文信息,同时完成通道混合,提升局部特征表达能力[6][13]。
  3. 轻量化设计:模型参数量仅为同类高效超分方法(如IMDN)的1/3,内存占用更低,适用于低功耗设备[6][9]。

在这里插入图片描述

方法

整体架构

  1. 特征提取:使用卷积层将低分辨率图像映射到特征空间。
  2. 特征混合模块(FMM):由SAFM和CCM组成,堆叠多个FMM模块进行特征增强。
  3. 重建模块:通过上采样生成高分辨率图像[6][10][16]。

核心模块细节

  • SAFM层
    • 通过多分支结构学习不同尺度特征,动态调整空间权重以融合全局信息。
    • 类似ViT的非局部建模能力,但计算复杂度更低[10][13]。
  • CCM模块
    • 使用深度可分离卷积提取局部特征,减少参数量。
    • 引入通道注意力机制优化特征通道关系[6][13]。

效果与实验结果

定量评估

  • 在Set5、Set14等基准数据集上,SAFMN在PSNR/SSIM指标上与IMDN等模型相当,但参数量减少70%[6][9]。
  • 在NTIRE2023高效超分挑战赛中:
    • 基础版SAFMN获整体性能赛道Top6,模型复杂度赛道Top3[7]。
    • 改进版SAFMN++在NTIRE2024挑战赛的保真度赛道排名第一[7]。

效率优势

  • 参数量:SAFMN为0.95M,IMDN为3.2M[6][9]。
  • 内存占用:相比IMDN减少50%,适合移动端部署[6][8]。

总结

SAFMN通过空间自适应调制与局部特征增强的协同设计,在超分任务中实现了精度与效率的平衡。其轻量化特性使其在低功耗设备(如手机、嵌入式系统)中具有实际应用潜力。后续改进版本(如SAFMN++)进一步验证了该框架的可扩展性[7][17]。

代码

import torch
import torch.nn as nn
import torch.nn.functional as F# Spatially-Adaptive Feature Modulation
class SAFM(nn.Module):def __init__(self, dim, n_levels=4):super().__init__()self.n_levels = n_levelschunk_dim = dim // n_levels# Multiscale feature representationself.mfr = nn.ModuleList([nn.Conv2d(chunk_dim, chunk_dim, 3, 1, 1, groups=chunk_dim, bias=False) for i in range(self.n_levels)])# Feature aggregationself.aggr = nn.Conv2d(dim, dim, 1, 1, 0, bias=False)# Activationself.act = nn.GELU()def forward(self, x):h, w = x.size()[-2:]xc = x.chunk(self.n_levels, dim=1)out = []for i in range(self.n_levels):if i > 0:p_size = (h//2**(i+1), w//2**(i+1))s = F.adaptive_max_pool2d(xc[i], p_size)s = self.mfr[i](s)s = F.interpolate(s, size=(h, w), mode='nearest')else:s = self.mfr[i](xc[i])out.append(s)out = self.aggr(torch.cat(out, dim=1))# Feature modulationout = self.act(out) * xreturn outif __name__ == "__main__":if __name__ == '__main__':# 定义输入张量大小(Batch、Channel、Height、Wight)B, C, H, W = 1, 64, 40, 40input_tensor = torch.randn(B, C, H, W)  # 随机生成输入张量# 初始化 SAFMdim = C  # 输入和输出通道数# 创建 SAFM 实例block = SAFM(dim=dim)# 如果GPU可用将模块移动到 GPUdevice = torch.device("cuda" if torch.cuda.is_available() else "cpu")sablock = block.to(device)print(sablock)input_tensor = input_tensor.to(device)# 执行前向传播output = sablock(input_tensor)# 打印输入和输出的形状print(f"Input: {input_tensor.shape}")print(f"Output: {output.shape}")

输出结果:
在这里插入图片描述


http://www.ppmy.cn/news/1576376.html

相关文章

DeepSeek + 自由职业 发现新大陆,从 0 到 1 全流程跑通商业 IP

DeepSeek 自由职业 发现新大陆,从 0 到 1 全流程跑通商业 IP 商业定位1. 商业定位分析提示词2. 私域引流策略提示词3. 变现模型计算器提示词4. 对标账号分析提示词5. 商业IP人设打造提示词6. 内容选题策略提示词7. 用户人群链分析提示词8. 内容布局与转化路径设计提…

第十四届蓝桥杯大赛软件赛国赛C/C++大学C组

A 【跑步计划——日期问题】-CSDN博客 B 【残缺的数字】-CSDN博客 C 题目 代码 #include <bits/stdc.h> using namespace std;void change(int &x) {int sum 0, t x;while(t){sum t % 10;t / 10;}x - sum; } int main() {int n;cin >> n;int ans 0;…

docker-compose部署开源堡垒机Orion-Visor——筑梦之路

git clone --depth1 https://github.com/dromara/orion-visorcd orion-visor docker compose pull# 配置,此处我保持默认cp .env.example .env# 启动进行数据库初始化docker compose up -d# 访问http://[ip]:8081进行登陆Adminer# 依次导入这些初始化sql orion-visor/sql/init-…

React + TypeScript AI Agent开发实战

React TypeScript AI Agent开发实战&#xff1a;数据建模场景深度解析 目录 技术架构设计核心模块实现数据建模场景案例 场景一&#xff1a;时序数据预测建模场景二&#xff1a;分类模型自动化调优场景三&#xff1a;图数据关系建模 AI Agent集成方案工程化与性能优化扩展方…

Redis的持久化-RDBAOF

文章目录 一、 RDB1. 触发机制2. 流程说明3. RDB 文件的处理4. RDB 的优缺点 二、AOF1. 使用 AOF2. 命令写⼊3. 文件同步4. 重写机制5 启动时数据恢复 一、 RDB RDB 持久化是把当前进程数据生成快照保存到硬盘的过程&#xff0c;触发 RDB 持久化过程分为手动触发和自动触发。 …

python多线程之ThreadLocal 笔记

什么是ThreadLocal ThreadLocal&#xff08;线程本地存储&#xff09;是多线程编程中实现线程隔离数据的机制&#xff0c;通过为每个线程创建独立的数据副本来避免资源竞争。Python 的 threading 模块通过 local 类实现这一特性&#xff1a; 每个线程访问 ThreadLocal 对象时&a…

【Linux网络#10】:Https协议原理

&#x1f4c3;个人主页&#xff1a;island1314 &#x1f525;个人专栏&#xff1a;Linux—登神长阶 ⛺️ 欢迎关注&#xff1a;&#x1f44d;点赞 &#x1f442;&#x1f3fd;留言 &#x1f60d;收藏 &#x1f49e; &#x1f49e; &#x1f49e; 生活总是不会一帆风顺&#xf…