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

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

论文信息

  • 标题: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_levels
        chunk_dim = dim // n_levels

        # Multiscale feature representation
        self.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 aggregation
        self.aggr = nn.Conv2d(dim, dim, 1, 1, 0, bias=False)

        # Activation
        self.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 modulation
        out = self.act(out) * x
        return out


if __name__ == "__main__":
    if __name__ == '__main__':
        # 定义输入张量大小(Batch、Channel、Height、Wight)
        B, C, H, W = 1, 64, 40, 40
        input_tensor = torch.randn(B, C, H, W)  # 随机生成输入张量
        # 初始化 SAFM
        dim = C  # 输入和输出通道数
        # 创建 SAFM 实例
        block = SAFM(dim=dim)
        # 如果GPU可用将模块移动到 GPU
        device = 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.kler.cn/a/569454.html

相关文章:

  • Eureka Server 数据同步原理解析
  • DeepSeek开源周Day6:DeepSeek V3、R1 推理系统深度解析,技术突破与行业启示
  • ElasticSearch第二弹——DSL查询7
  • Kubernetes (K8S) 核心原理深度剖析:从架构设计到运行机制
  • leetcode141.环形链表,142环形链表ii
  • 动态规划/贪心算法
  • 市场加速下跌,但监管「坚冰」正在消融
  • 记录一次跨库连表的坑
  • 算法刷题-2025年03月01日
  • Python使用pyobdc库和tkinter框架连接数据库
  • 蓝桥备赛(七)- 函数与递归(中)
  • 深度学习-12.变换器(Transformer)
  • 【Uniapp-Vue3】使用uniCloud.uploadFile上传图片到云存储
  • 青少年编程与数学 02-010 C++程序设计基础 13课题、数据类型
  • 九牧的“AI梦想曲”:卫浴场景进入到机器人时代
  • 【Java 后端】Restful API 接口
  • 高级算法分析与设计-分治法
  • 一个py文件搞定mysql查询+Json转换+表数据提取+根据数据条件生成excel文件+打包运行一条龙
  • Spring MVC框架六:Ajax技术
  • Redis面试常见问题——使用场景问题