【论文速看】DL最新进展202411011-图像超分、Transformer

【图像超分】

[ICML 2024] See More Details: Efficient Image Super-Resolution by Experts Mining

论文链接:https://arxiv.org/pdf/2402.03412

代码链接:https://github.com/eduardzamfir/seemoredetails

从低分辨率(LR)输入重建高分辨率(HR)图像在图像超分辨率(SR)领域是一项重大挑战。尽管最近的方法已经展示了为各种目标定制复杂操作的有效性,但简单地堆叠这些不同的操作可能导致巨大的计算负担,从而影响其实际应用价值。为了应对这一挑战,文中引入了SeemoRe,这是一种采用专家挖掘技术的高效SR模型。所提方法策略性地在不同层次上整合专家知识,采用了一种协作方法。在宏观层面,专家处理按等级和空间分布的信息特征,提供了全面的理解。随后,该模型通过利用一系列低秩专家的混合体,深入探讨秩选择的细微差别。通过借鉴专门从事对准确SR至关重要的不同关键因素的专家,所提模型更有利于揭示复杂的内部特征细节。这种协作方法让人联想到“看得更多”的概念,使所提模型能够在高效设置下以最小的计算成本实现最佳性能

在这里插入图片描述<

### 图像辨率 Transformer 模型实现代码 以下是基于 SRFormer 的图像辨率 Transformer 架构的一个简化版本实现。该模型通过引入 PSA(Position-Specific Attention)机制来提升性能,同时保持了良好的可扩展性和易用性。 #### 1. 定义核心模块:PSA 和 Transformer 层 ```python import torch import torch.nn as nn class PositionSpecificAttention(nn.Module): """位置特定注意力 (PSA) 模块""" def __init__(self, channels, reduction=4): super(PositionSpecificAttention, self).__init__() self.avg_pool = nn.AdaptiveAvgPool2d(1) self.fc = nn.Sequential( nn.Linear(channels, channels // reduction), nn.ReLU(inplace=True), nn.Linear(channels // reduction, channels), nn.Sigmoid() ) def forward(self, x): b, c, _, _ = x.size() y = self.avg_pool(x).view(b, c) y = self.fc(y).view(b, c, 1, 1) return x * y.expand_as(x) class TransformerLayer(nn.Module): """Transformer 层定义""" def __init__(self, dim, num_heads=8, dropout=0.1): super(TransformerLayer, self).__init__() self.self_attn = nn.MultiheadAttention(dim, num_heads, dropout=dropout) self.norm1 = nn.LayerNorm(dim) self.ffn = nn.Sequential( nn.Linear(dim, dim * 4), nn.GELU(), nn.Dropout(dropout), nn.Linear(dim * 4, dim) ) self.norm2 = nn.LayerNorm(dim) def forward(self, x): attn_output, _ = self.self_attn(x, x, x) x = x + self.norm1(attn_output) ffn_output = self.ffn(x) x = x + self.norm2(ffn_output) return x ``` #### 2. 整合 SRFormer 主体结构 ```python class SRFormer(nn.Module): """SRFormer 模型主体""" def __init__(self, in_channels=3, out_channels=3, embed_dim=64, depth=6): super(SRFormer, self).__init__() self.conv_first = nn.Conv2d(in_channels, embed_dim, kernel_size=3, stride=1, padding=1) transformer_layers = [] for i in range(depth): transformer_layers.append(TransformerLayer(embed_dim)) self.transformer = nn.Sequential(*transformer_layers) self.psa = PositionSpecificAttention(channels=embed_dim) self.reconstruction = nn.Sequential( nn.Conv2d(embed_dim, embed_dim, kernel_size=3, stride=1, padding=1), nn.LeakyReLU(negative_slope=0.2, inplace=True), nn.Conv2d(embed_dim, out_channels, kernel_size=3, stride=1, padding=1) ) def forward(self, x): feat = self.conv_first(x) h, w = feat.shape[-2:] feat = feat.flatten(2).permute(2, 0, 1) # BxCxHxW -> LxBxC feat = self.transformer(feat) feat = feat.permute(1, 2, 0).view(-1, feat.size(2), h, w) # LxBxC -> BxCxHxW feat = self.psa(feat) output = self.reconstruction(feat) return output ``` #### 3. 使用示例 ```python if __name__ == "__main__": model = SRFormer(in_channels=3, out_channels=3, embed_dim=64, depth=6) input_tensor = torch.randn(1, 3, 64, 64) # 输入低辨率图像 output_tensor = model(input_tensor) # 输出高辨率图像 print("Input Shape:", input_tensor.shape) print("Output Shape:", output_tensor.shape) ``` --- ### 关键技术解析 上述代码实现了 SRFormer 中的核心组件,包括: - **PSA 模块**:通过自适应权重调整不同通道的重要性,从而增强局部特征表达能力[^2]。 - **Transformer Layer**:利用多头注意力机制捕获全局依赖关系,并结合前馈网络完成特征变换。 - **Residual Connection & Normalization**:在每一层加入残差连接和归一化操作,有助于缓解梯度消失问题并加收敛。 此外,在实际应用中可以进一步优化采样策略或增加额外损失函数以提高重建质量[^1]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

IRevers

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值