图像恢复 Restormer: 彻底理解论文和源代码 (注释详尽)

这篇具有很好参考价值的文章主要介绍了图像恢复 Restormer: 彻底理解论文和源代码 (注释详尽)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1. Restormer 论文

图像恢复 Restormer: 彻底理解论文和源代码 (注释详尽),深度学习图像恢复,人工智能,python,transformer,计算机视觉,图像恢复
主要工作:
[1] MDTA (Multi-Dconv Head Transposed Attention), 聚合局部和非局部的像素交互,可以有效处理高分辨率图像。
[2] GDFN (Gated-Dconv Feed-Forward Network), 控制特征转换,抑制小信息量的特征,仅允许有用的信息进入下一次网络。
论文:https://arxiv.org/pdf/2111.09881.pdf
源代码:
[1] https://github.com/swz30/Restormer
[2] https://download.csdn.net/download/Wenyuanbo/83592489
网络细节注释和自定义训练测试代码:https://download.csdn.net/download/Wenyuanbo/83617599

2. Restormer 网络结构

2.1 整体框架

图像恢复 Restormer: 彻底理解论文和源代码 (注释详尽),深度学习图像恢复,人工智能,python,transformer,计算机视觉,图像恢复
论文的主要创新点是将经典 Transformer 中的 MSA 和 FFN 都进行改进,并且采用 Encoder-Decoder 架构,涉及的上采样操作使用 nn.PixelShuffle() 来实现,涉及的下采样操作使用 nn.PixelUnshuffle() 来实现,整体文章的脉络非常清晰。

2.2 MDTA

与一般 Transformer 不同的是,论文在自注意力模板进行 token 计算时不是常见的 patch-wise,而是 pixel-wise。首先利用 11 卷积升维,再使用 33 分组卷积将特征分为三块,最后进行经典的自注意力计算。
图像恢复 Restormer: 彻底理解论文和源代码 (注释详尽),深度学习图像恢复,人工智能,python,transformer,计算机视觉,图像恢复

2.3 GDFN

论文提出双路门控网络来取代 FFN,分别进行 11 升维,再利用 33 分组卷积提取特征,随后使用 GELU 激活函数门控,最后 1*1 卷积降维输出。
图像恢复 Restormer: 彻底理解论文和源代码 (注释详尽),深度学习图像恢复,人工智能,python,transformer,计算机视觉,图像恢复

3. 主要代码理解

3.1 MDTA

## Multi-DConv Head Transposed Self-Attention (MDTA)
class Attention(nn.Module):
    def __init__(self, dim, num_heads, bias):
        super(Attention, self).__init__()
        self.num_heads = num_heads  # 注意力头的个数
        self.temperature = nn.Parameter(torch.ones(num_heads, 1, 1))  # 可学习系数
        
        # 1*1 升维
        self.qkv = nn.Conv2d(dim, dim*3, kernel_size=1, bias=bias)
        # 3*3 分组卷积
        self.qkv_dwconv = nn.Conv2d(dim*3, dim*3, kernel_size=3, stride=1, padding=1, groups=dim*3, bias=bias)
        # 1*1 卷积
        self.project_out = nn.Conv2d(dim, dim, kernel_size=1, bias=bias)

    def forward(self, x):
        b,c,h,w = x.shape  # 输入的结构 batch 数,通道数和高宽

        qkv = self.qkv_dwconv(self.qkv(x))
        q,k,v = qkv.chunk(3, dim=1)  #  第 1 个维度方向切分成 3 块
        # 改变 q, k, v 的结构为 b head c (h w),将每个二维 plane 展平
        q = rearrange(q, 'b (head c) h w -> b head c (h w)', head=self.num_heads)
        k = rearrange(k, 'b (head c) h w -> b head c (h w)', head=self.num_heads)
        v = rearrange(v, 'b (head c) h w -> b head c (h w)', head=self.num_heads)

        q = torch.nn.functional.normalize(q, dim=-1)  # C 维度标准化,这里的 C 与通道维度略有不同
        k = torch.nn.functional.normalize(k, dim=-1)

        attn = (q @ k.transpose(-2, -1)) * self.temperature
        attn = attn.softmax(dim=-1)

        out = (attn @ v)  # 注意力图(严格来说不算图)
        
        # 将展平后的注意力图恢复
        out = rearrange(out, 'b head c (h w) -> b (head c) h w', head=self.num_heads, h=h, w=w)
        # 真正的注意力图
        out = self.project_out(out)
        return out

3.2 GDFN

## Gated-Dconv Feed-Forward Network (GDFN)
class FeedForward(nn.Module):
    def __init__(self, dim, ffn_expansion_factor, bias):
        super(FeedForward, self).__init__()
        
        # 隐藏层特征维度等于输入维度乘以扩张因子
        hidden_features = int(dim*ffn_expansion_factor)
        # 1*1 升维
        self.project_in = nn.Conv2d(dim, hidden_features*2, kernel_size=1, bias=bias)
        # 3*3 分组卷积
        self.dwconv = nn.Conv2d(hidden_features*2, hidden_features*2, kernel_size=3, stride=1, padding=1, groups=hidden_features*2, bias=bias)
        # 1*1 降维
        self.project_out = nn.Conv2d(hidden_features, dim, kernel_size=1, bias=bias)

    def forward(self, x):
        x = self.project_in(x)
        x1, x2 = self.dwconv(x).chunk(2, dim=1)  # 第 1 个维度方向切分成 2 块
        x = F.gelu(x1) * x2  # gelu 相当于 relu+dropout
        x = self.project_out(x)
        return x

3.3 TransformerBlock

## 就是标准的 Transformer 架构
class TransformerBlock(nn.Module):
    def __init__(self, dim, num_heads, ffn_expansion_factor, bias, LayerNorm_type):
        super(TransformerBlock, self).__init__()

        self.norm1 = LayerNorm(dim, LayerNorm_type)  # 层标准化
        self.attn = Attention(dim, num_heads, bias)  # 自注意力
        self.norm2 = LayerNorm(dim, LayerNorm_type)  # 层表转化
        self.ffn = FeedForward(dim, ffn_expansion_factor, bias)  # FFN

    def forward(self, x):
        x = x + self.attn(self.norm1(x))  # 残差
        x = x + self.ffn(self.norm2(x))  # 残差

        return x

3.4 一个测试实例

model = Restormer()
print(model)  # 打印网络结构

x = torch.randn((1, 3, 64, 64))  #随机生成输入图像
x = model(x)  # 送入网络
print(x.shape) # 打印网络输入的图像结构

参考文献

[1] Zamir S W, Arora A, Khan S, et al. Restormer: Efficient Transformer for High-Resolution Image Restoration[J]. arXiv preprint arXiv:2111.09881, 2021.
[2] 中国海洋大学AI前沿理论组. 【ARXIV2111】Restormer: Efficient Transformer for High-Resolution Image Restoration.文章来源地址https://www.toymoban.com/news/detail-535731.html

结语与思考

  1. 实验证明 Restormer 在图像去雨、图像去模糊、图像去噪等任务上都取得了相当不错的表现,但是论文没有与别的算法进行参数和效率的对比,据我所知 MPRNet 的参数量为 3.64 M,而 Restormer 是 25.3 M,如果靠堆参数量和烧钱使结果 SOTA 那我等小组就只能望而却步了。
  2. 在 GDFN 中存在一个扩展因子 γ = 2.66 \gamma=2.66 γ=2.66 ,论文对其的解释很简单,就是为了使网络参数和计算负担与一般 FFN 一致。
  3. 完整的注释和自定义训练测试代码请移步:https://download.csdn.net/download/Wenyuanbo/83617599

到了这里,关于图像恢复 Restormer: 彻底理解论文和源代码 (注释详尽)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • JSP企业人事管理系统(源代码+论文)

    随着计算机技术的飞速发展,计算机在企业管理中应用的普及,利用计算机实现企业人事管理势在必行。对于大中型企业来说,利用计算机支持企业高效率完成劳动人事管理的日常事务,是适应现代企业制度要求、推动企业劳动人事管理走向科学化、规范化的必要条件;计算

    2024年02月03日
    浏览(60)
  • Jsp网上超市设计与实现(源代码+论文)

    第一章 前  言 1.1 题目的来源、背景 随着计算机和互联网的普及,网络对人们的影响越来越大。网络研究虽然是一个新兴的学术领域,但在近十年里,却呈现出一派繁荣景象。无论是学术性的还是大众化的报刊和出版社,都出版了无数的论文和专著。关于网络的学术会议也越

    2024年02月04日
    浏览(69)
  • JSP企业人事管理系统设计(源代码+论文)

    随着计算机技术的飞速发展,计算机在企业管理中应用的普及,利用计算机实现企业人事管理势在必行。对于大中型企业来说,利用计算机支持企业高效率完成劳动人事管理的日常事务,是适应现代企业制度要求、推动企业劳动人事管理走向科学化、规范化的必要条件;计算

    2024年02月03日
    浏览(53)
  • JSP+ACCESS网上拍卖平台系统(源代码+论文)

    电子商务就是通过互联网来进行的各项商务活动,包括广告、交易、支付、服务等活动。电子商务源于英文Electronic  Commerce,简写为EC或E-Commerce。它是人类社会、经济、科学、文化发展的必然产物,是信息化社会的商务模式,也是商务发展的未来。联合国经济合作和发展组织(

    2024年02月07日
    浏览(43)
  • JSP+SQL网上选课系统(源代码+论文+答辩PPT)

    随着科学技术的不断提高,计算机科学日渐成熟,其强大的功能已为人们深刻认识,它已进入人类社会的各个领域并发挥着越来越重要的作用。学生选课系统作为一种现代化的教学技术,以越来越受到人民的重视,是一个学校不可缺少的部分, 学生选课系统就是为了管理好选课信

    2024年02月06日
    浏览(37)
  • JSP+SQL网站流量统计管理系统(源代码+论文)

    随着因特网的迅猛发展,网络变得越来越普遍,但结构却越来越复杂,而且现在涌现出大量的各种各样网络的应用、硬件、平台和协议,各个企业或部门不得不投入一个或多个网络管理者去维护和控制其网络。如何能将网站从具体和繁琐的网络管理中解脱出来.同时提高网络的

    2024年02月07日
    浏览(36)
  • 毕业设计-springboot时间管理系统(源代码+论文+视频)

    目 录 1 绪 论... 5 1.1课题背景与意义... 5 1.3 系统实现的功能... 5 1.4 课题研究现状... 5 2系统相关技术... 7 2.1 Java技术... 7 2.2 B/S架构... 7 2.3 MySQL 介绍... 7 2.4MySQL环境配置... 8 2.5SpringBoot框架... 8 3系统需求分析... 9 3.1系统功能... 9 3.2可行性研究... 9 3.2.1 经济可行性... 9 3.2.2 技术可行

    2024年01月21日
    浏览(52)
  • ​ | AI顶会论文很多附带源代码?不少是假开源!

    看到一篇绝佳的AI论文,非常期待作者能提供源代码,全文搜索HTTP,可惜出来的都不是源代码的链接。好不容易碰到一篇附带源代码的论文,点进去却是大大的404。终于发现某个不是404的源代码仓库,结果只是放上了几句说明,写着“代码coming soon”,然后一等就是一万年.

    2023年04月24日
    浏览(38)
  • VB+SQL采购管理系统设计与实现(论文+源代码)

    本系统是基于为轴承企业采购部门开发的系统。课题主要采用自上而下的结构化程序设计方法与面向对象方法相结合的方法,致力于达到标准的现代化物流管理要求。帮助轴承企业采购部门全面实现电子化、自动化、标准化的现代化先进管理模式。 该系统使用Visualbasic.net编程

    2024年02月10日
    浏览(46)
  • ASP.NET猜数游戏的设计与开发(源代码+论文)

    随着科学技术和精神生活的不断提高,人们越来越多的热衷于猜数游戏这类小型休闲益智型游戏。它利用其简单的操作方式及逻辑有趣的游戏过程吸引着众多玩家。本次课题设计的即一款界面简洁、大方,休闲有趣的小型猜数游戏系统。本系统采用Microsoft Visual Studio.NET 2003开

    2024年02月07日
    浏览(47)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包