前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >【论文复现】如何穿透模糊,还原图片真实面貌

【论文复现】如何穿透模糊,还原图片真实面貌

作者头像
Eternity._
发布于 2024-12-30 00:35:40
发布于 2024-12-30 00:35:40
13900
代码可运行
举报
文章被收录于专栏:登神长阶登神长阶
运行总次数:0
代码可运行
❀ 如何穿透模糊,还原图片真实面貌
  • 图像清晰化的魔法棒:AI如何穿透模糊,还原图片真实面貌
  • 前言
  • 论文背景
  • 论文思路
  • 模型介绍
  • 复现过程
  • 演示视频
  • 使用方式

图像清晰化的魔法棒:AI如何穿透模糊,还原图片真实面貌


在我们日常生活中,照片是记录美好瞬间、传递情感与记忆的重要载体。然而,由于拍摄环境、设备限制或手抖等因素,许多珍贵的照片往往伴随着模糊与不清晰,让那份本应清晰可见的回忆变得朦胧。但如今,随着人工智能技术的飞速发展,图像去模糊技术就像一把神奇的“魔法棒”,能够穿透这些生活中的“迷雾”,让模糊的照片重获新生,还原其真实而动人的风采。 想象一下,你珍藏的家庭聚会照片,因为光线不足或快门速度不够快,导致人物面部模糊,笑容变得难以辨认。又或是你精心捕捉的风景照,却因一阵突如其来的风或相机的微小晃动,让原本壮丽的景色变得模糊不清。这些遗憾,在过去可能只能成为心中永远的叹息。但现在,有了AI图像去模糊技术,一切都可以改变。 AI通过其强大的学习和分析能力,能够识别出模糊图像中的关键特征和信息,并利用先进的算法对其进行重建和优化。它不仅能够消除因运动、失焦或噪声等原因造成的模糊,还能在一定程度上恢复图像的细节和色彩,使照片看起来更加清晰、生动。 当你使用这把“魔法棒”对模糊的照片进行清晰化处理时,就像是时间倒流,让你重新置身于那个被模糊所掩盖的瞬间。你会发现,家人的笑容变得更加灿烂,风景的色彩更加鲜明,那些曾经因模糊而错过的细节,如今都一一展现在你的眼前。

本文所涉及的所有资源的获取方式:这里

前言


图像去模糊,如同施展了一场视觉的魔法,将原本朦胧、不清晰的图像画面逐渐变得清晰锐利。这项技术利用先进的算法和强大的计算能力,深入图像的本质,分析并恢复因拍摄条件不佳、传输损失或人为处理等原因导致的模糊细节。随着处理过程的推进,图像中的线条和轮廓逐渐鲜明,色彩层次更加丰富,原本难以辨识的信息也变得一目了然。图像去模糊不仅提升了视觉体验,更在多个领域发挥着重要作用,如法律取证、医学影像分析、安全监控等,确保关键信息的准确传递与验证。 下面两张图片左图是模糊图片,右图是对应的清晰图片,可以看出在视觉效果上差别还是挺大的。

那么如何将一个模糊图片恢复成一个较清晰的图片呢?下面我以2022年的cvpr上的一篇图像恢复的文章Restormer: Efficient Transformer for High-Resolution Image Restoration来详细介绍如何把给定的源码跑通,并且动手使用demo恢复自己想恢复的模糊图像。

论文背景


对于传统 CNN 中,其基本操作是“卷积”,卷积操作为 CNN 提供了局部连接和平移不变性的特性,这些特性为 CNN 带来了效率和泛化性,但它们也产生了两个主要问题:

  • 无序列表卷积算子的感受野有限,无法对长距离像素依赖性进行建模;
  • 无序列表卷积滤波器在推理时具有静态权重,不能灵活地适应输入内容。

为了解决上述缺点,一种更强大和动态的替代方案是自注意力 (SA) 机制,它通过所有其他位置的加权和来计算给定像素的输出特征。在本文中,作者提出了一种用于图像复原的高效 Transformer,它能够对全局连接进行建模,并且仍然适用于大图像。作者从自注意力(SA)、前馈网络(FN)对 transformer 进行改进,并使用一种渐进性学习策略来训练模型。

论文思路


引入多 Dconv 头转置注意力(multi-Dconv head transposed attention,MDTA)块来代替具有线性复杂性的普通多头 SA。它跨特征维度而不是空间维度应用 SA,即,MDTA 不是显式建模成对像素交互,而是计算跨特征通道的交叉协方差,以从(关键和查询投影)输入特征获取注意力图。所提出的 MDTA 块的一个重要特征是特征协方差计算之前的局部上下文混合。这是通过使用 1×1 卷积的跨通道上下文的像素级聚合和使用有效的深度卷积(depthwise convolution)的局部上下文的通道级聚合来实现的。这种策略提供了两个关键优势。首先,它强调空间局部上下文,并在通道中引入卷积运算的互补强度。其次,它确保在计算基于协方差的注意力图时隐式建模像素之间的上下文全局关系。

使用门控机制重新制定常规 FN 的第一个线性变换层,以改善通过网络的信息流。 该门控层被设计为两个线性投影层的逐元素乘积,其中一个被 GELU 非线性激活。所提出的门控 Dconv FN (GDFN) 也基于局部内容混合(与 MDTA 模块类似)来同样强调空间上下文。GDFN 中的门控机制控制着哪些互补特征应该向前流动,并允许网络层次结构中后续的层专门关注更精细的图像属性,从而产生高质量的输出。

这篇文章的主要贡献总结如下:

  1. 提出了一种用于高分辨率图像多尺度局部-全局表示学习的编码器-解码器Transformer,该编码器-解码器Transformer无需将高分辨率图像分解成局部窗口,从而利用远程图像上下文;
  2. 提出了一种能够聚合局部和非局部像素交互的多Dconv头转置注意力( MDTA )模块,该模块足以处理高分辨率图像;
  3. 提出了一种新的门控Dconv前馈网络( GDFN ),该网络执行受控的特征转换,即抑制信息量较小的特征,仅允许有用的信息通过网络层次结构进一步传递。

模型介绍


  • 算法框图

上图Transformer模块的核心模块是:( a )多Dconv头转置注意力( Multi-Dconv Head Transpose Attention,MDTA ),它执行跨通道而不是空间维度的查询关键特征交互;( b )门控Dconv前馈网络( Gated-Dconv Feeding Network,GDFN ),它执行受控的特征变换,即允许有用信息进一步传播。

  • 多Dconv头转置注意力(Multi-Dconv Head Transpose Attention,MDTA) 与一般 Transformer 不同的是,论文在自注意力模板进行 token 计算时不是常见的 卷积操作,而是利用深度卷积操作,首先利用 11 卷积升维,再使用 33 分组卷积将特征分为三块,最后进行经典的自注意力计算。

多头注意力模块的核心代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
## 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))
        #深度卷积dconv代替普通conv
        self.qkv = nn.Conv2d(dim, dim*3, kernel_size=1, bias=bias)
        self.qkv_dwconv = nn.Conv2d(dim*3, dim*3, kernel_size=3, stride=1, padding=1, groups=dim*3, bias=bias)
        self.project_out = nn.Conv2d(dim, dim, kernel_size=1, bias=bias)
        

    def forward(self, x):
        b,c,h,w = x.shape

        qkv = self.qkv_dwconv(self.qkv(x))
        q,k,v = qkv.chunk(3, dim=1)   
        
        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)
        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
  • 门控Dconv前馈网络(Gated-Dconv Feeding Network,GDFN) 作者提出了双路门控网络来取代 FFN,分别进行 11 升维,再利用 33 分组卷积提取特征,随后使用 GELU 激活函数门控,最后 1*1 卷积降维输出。

门控前反馈网络的核心代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
## 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)
        self.project_in = nn.Conv2d(dim, hidden_features*2, kernel_size=1, bias=bias)
        self.dwconv = nn.Conv2d(hidden_features*2, hidden_features*2, kernel_size=3, stride=1, padding=1, groups=hidden_features*2, bias=bias)
        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)
        x = F.gelu(x1) * x2
        x = self.project_out(x)
        return x

使用深度卷积dconv代替传统卷积conv原理(下图是我自己查阅和整理后所绘制的深度卷积如何代替传统卷积的图片)

复现过程


下载附件后按照最下面的使用方式一步一步操作 1.代码目录文件介绍:

basicsr是最主要的(模型的框架,损失函数,数据的预处理等等)都在这个文件包里面 demo文件包是在使用demo就行图像恢复操作时候的模糊图像存放位置以及清晰图像恢复出来的位置 Motion_Deblurring包下面的pretrained_models放预训练模型

basicsr包里面: restormer_arch.py文件是模型的主要框架GDFN,MDTA代码都在里面 losses文件包是损失函数 train.py 是训练文件 test.py 是测试文件

2.数据集和预训练模型下载: 数据集和预训练模型过大,下载链接已经放到附件READ.ME里面,对应位置在演示视频中已展示出。

3.预训练模型存放位置:

4.修改配置文件 主要是修改数据集位置

5.运行train.py

6.测试demo图像恢复效果 下图左边是元素模糊图片,下图中间是模糊图片对应的清晰图片,下图右边是恢复出来的清晰图片

演示视频


演示视频中是我在demo文件包下面degraded包下面放了20张模糊图片,然后运行demo.py后生成了20张较清晰的图片在restored包下。

使用方式


1.创建conda环境并且激活 conda create -n xxx python=3.7 conda activate xxx 2.安装依赖 conda install pytorch=1.8 torchvision cudatoolkit=10.2 -c pytorch pip install matplotlib scikit-learn scikit-image opencv-python yacs joblib natsort h5py tqdm pip install einops gdown addict future lmdb numpy pyyaml requests scipy tb-nightly yapf lpips 3.安装basicsr(最主要的) python setup.py develop --no_cuda_ext 4.测试demo命令 python demo.py --task motion_deblurring --input_dir ‘输入地址’ --result_dir ‘输出地址’ 原文链接:Restormer: Efficient Transformer for High-Resolution Image Restoration github链接:源码

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-12-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
YOLO11优化:图像去噪 | AAAI2025 Transformer |一种基于Transformer的盲点网络(TBSN)架构 ,结合空间和通道自注意力层
💡💡💡 提出了一种基于Transformer的盲点网络(TBSN)架构,通过分析和重新设计Transformer运算符以满足盲点要求。TBSN遵循扩张BSN的架构原则,并结合空间和通道自注意力层来增强网络能力。
AI小怪兽
2025/01/15
5050
CNN、Transformer、MLP架构的经验性分析
ViT的兴起挑战了CNN的地位,随之而来的是MLP系列方法。三种架构各有特点,为了公平地比较几种架构,本文提出了统一化的框架SPACH来对比,得到了具有一定insight的结论。论文来自微软的A Battle of Network Structures: An Empirical Study of CNN, Transformer, and MLP
BBuf
2021/12/27
1.1K0
CNN、Transformer、MLP架构的经验性分析
CvT: 如何将卷积的优势融入Transformer
与之前BoTNet不同,CvT虽然题目中有卷积的字样,但是实际总体来说依然是以Transformer Block为主的,在Token的处理方面引入了卷积,从而为模型带来的局部性。最终CvT最高拿下了87.7%的Top1准确率。
BBuf
2022/01/27
9490
CvT: 如何将卷积的优势融入Transformer
图像恢复SwinIR: Image Restoration Using Swin Transformer
在图像超分辨率、图像去噪、压缩等图像修复(Image restoration)任务中,卷积神经网络目前仍然是主流。但是卷积神经网络有以下两个缺点:
JOYCE_Leo16
2024/03/19
1.3K0
图像恢复SwinIR: Image Restoration Using Swin Transformer
YoloV8改进策略:注意力改进|引入DeBiLevelRoutingAttention注意力模块(全网首发)
在计算机视觉领域,目标检测任务的性能提升一直是研究热点。我们基于对YoloV8模型的深入理解,创新性地引入了DeBiLevelRoutingAttention(简称DBRA)注意力模块,旨在进一步增强模型的特征提取能力和目标检测精度。
AI浩
2024/10/22
8570
YoloV8改进策略:注意力改进|引入DeBiLevelRoutingAttention注意力模块(全网首发)
SVTR文字识别模型介绍
一般的文字识别会包含两个阶段,一个是CNN,一个是RNN,可以参考PaddleOCR使用指南 中的CRNN 文字识别。这种架构虽然准确,但复杂且LSTM的效率较低,很多移动设备对LSTM的加速效果并不好,所以在实际的应用场景中也存在诸多限制。随着swin transformer在计算机视觉领域大放光彩,swin的这种金字塔结构(像CNN里面的下采样一样)也被引入到文字识别。
算法之名
2022/09/28
2.3K0
SVTR文字识别模型介绍
ViTAE:引入归纳偏置,浅层用CNN,深层用self-attention
引入归纳偏置,即局部性和尺度不变性,浅层用CNN编码token,深层用多头注意力机制做transformer的模块堆叠,是一次CNN和transformer结合探索,也是一个对送进多头注意力机制的token编码的探索,送进更信息更加聚合的token,来降低模型大小,提高分类任务的效果。
BBuf
2022/02/11
1.3K0
ViTAE:引入归纳偏置,浅层用CNN,深层用self-attention
YOLOv8优化策略:全新的聚焦线性注意力模块(Focused Linear Attention)| ICCV2023 FLatten Transforme
本文独家改进:全新的聚焦线性注意力模块(Focused Linear Attention),既高效又具有很强的模型表达能力,解决视觉Transformer计算量过大的问题,最终引入到YOLOv8,做到二次创新;
AI小怪兽
2023/11/10
8760
YOLOv8改进:引入CVPR 2023 BiFormer, 基于动态稀疏注意力构建高效金字塔网络架构,对小目标涨点明显
背景:注意力机制是Vision Transformer的核心构建模块之一,可以捕捉长程依赖关系。然而,由于需要计算所有空间位置之间的成对令牌交互,这种强大的功能会带来巨大的计算负担和内存开销。为了减轻这个问题,一系列工作尝试通过引入手工制作和内容无关的稀疏性到关注力中来解决这个问题,如限制关注操作在局部窗口、轴向条纹或扩张窗口内。
AI小怪兽
2023/10/07
3.1K0
MoA-Transformer | Swin-Transformer应该如何更好地引入全局信息?
基于Transformer的体系结构在自然语言处理(NLP)领域取得了巨大的成功。受Transformer在语言领域的巨大成功的启发,Vision Transformer被提出,并在ImageNet数据集上取得了优秀的性能。Vision Transformer就像NLP中的word token一样,将图像分割成patches并输入Transformer之中,并通过Transformer的几个multi-head self-attention层来建立远程依赖关系。
集智书童公众号
2022/02/11
9740
MoA-Transformer | Swin-Transformer应该如何更好地引入全局信息?
YOLOv8改进:全网原创首发 | 多尺度空洞注意力(MSDA) | 中科院一区顶刊 DilateFormer 2023.9
本文全网首发独家改进:多尺度空洞注意力(MSDA)采用多头的设计,在不同的头部使用不同的空洞率执行滑动窗口膨胀注意力(SWDA),全网独家首发,创新力度十足,适合科研
AI小怪兽
2023/10/20
2.2K0
金字塔Transformer,更适合稠密预测任务的Transformer骨干架构
以CNN为骨干的方案在计算机视觉的各个领域均取得极大的成功,本文研究了一种简单的无卷积骨干网络用于诸多稠密预测任务(包含检测、分割等)。近来提出的Transformer(ViT)主要是针对图像分类任务而设计,我们提出稠密预测任务提出了一种PVT方案(Pyramid Vision Transformer),它克服了将ViT向稠密预测任务迁移的困难。(1) 不同于ViT的低分辨率输出、高计算复杂度与内存消耗,PVT不仅可以得到更高分辨率的输出(这对于稠密预测任务尤为重要),同时按照金字塔形式渐进式收缩特征分辨率;(2) PVT继承了CNN与Transformer的优势,通过简单的替换CNN骨干使其成为不同视觉任务的统一骨干结构;(3) 通过充分的实验验证了PVT的优越性,在目标检测、语义分割、实例分割等任务上PVT均取得了优异性能。比如RetinaNet+PVT在COCO数据集上取得了40.4AP指标,超越了RetinaNet+ResNet50的36.3AP。
AIWalker
2021/03/04
1.1K0
金字塔Transformer,更适合稠密预测任务的Transformer骨干架构
CoAtNet: 90.88% Paperwithcode榜单第一,层层深入考虑模型设计
CoAt=Convolution + Attention,paperwithcode榜单第一名,通过结合卷积与Transformer实现性能上的突破,方法部分设计非常规整,层层深入考虑模型的架构设计。
BBuf
2022/02/11
1.3K0
CoAtNet: 90.88% Paperwithcode榜单第一,层层深入考虑模型设计
【图像分类】Vision Transformer理论解读+实践测试
Vision Transformer是2021年谷歌在ICLR上提出的算法,算法原理并不复杂,但是其价值是开创性的。它首次将NLP领域火热的Transformer模型架构移植到了CV领域,打破了这两个领域壁垒,并取得不错的成效。
zstar
2022/09/20
3K0
【图像分类】Vision Transformer理论解读+实践测试
CeiT:训练更快的多层特征抽取ViT
来自商汤和南洋理工的工作,也是使用卷积来增强模型提出low-level特征的能力,增强模型获取局部性的能力,核心贡献是LCA模块,可以用于捕获多层特征表示。相比DeiT,训练速度更快。
BBuf
2022/02/11
1.1K0
CeiT:训练更快的多层特征抽取ViT
Vision Transformer 必读系列之图像分类综述(二): Attention-based
https://github.com/open-mmlab/awesome-vit
OpenMMLab 官方账号
2022/02/28
1.9K0
Vision Transformer 必读系列之图像分类综述(二): Attention-based
OutLook Attention:具有局部信息感知能力的ViT
近段时间,Transformer-based模型在Visual Recognition领域取得了非常大的进展。但是如果不借助额外的训练数据,Transformer-based模型离CNN-based模型还是具有一定的差距(NFNet-F5(CNN-based):86.8%,CaiT(Transformer-based):86.5%)。作者认为,这是因为token embedding并没有进行细粒度特征表示,因此本文提出了一种新的Attention方式,通过局部信息的感知,能够获得更加细粒度的特征表示。
BBuf
2021/07/23
7580
preprint版本 | 何凯明大神新作MAE | CVPR2022最佳论文候选
本文证明了蒙面自动编码器(MAE)是一种可扩展的计算机视觉自监督学习器。我们的MAE方法很简单:我们屏蔽输入图像的随机补丁并重建丢失的像素。
机器学习炼丹术
2021/12/06
1.3K0
preprint版本 | 何凯明大神新作MAE | CVPR2022最佳论文候选
Tansformer | 详细解读:如何在CNN模型中插入Transformer后速度不变精度剧增?
本文工作解决了Multi-Head Self-Attention(MHSA)中由于计算/空间复杂度高而导致的vision transformer效率低的缺陷。为此,作者提出了分层的MHSA(H-MHSA),其表示以分层的方式计算。
集智书童公众号
2021/07/07
5.8K0
可视化VIT中的注意力
来源:DeepHub IMBA 本文约4000字,建议阅读8分钟 本文为你介绍ViT模型。 2022年, Vision Transformer (ViT)成为卷积神经网络(cnn)的有力竞争对手,
数据派THU
2023/04/18
1.1K0
可视化VIT中的注意力
推荐阅读
YOLO11优化:图像去噪 | AAAI2025 Transformer |一种基于Transformer的盲点网络(TBSN)架构 ,结合空间和通道自注意力层
5050
CNN、Transformer、MLP架构的经验性分析
1.1K0
CvT: 如何将卷积的优势融入Transformer
9490
图像恢复SwinIR: Image Restoration Using Swin Transformer
1.3K0
YoloV8改进策略:注意力改进|引入DeBiLevelRoutingAttention注意力模块(全网首发)
8570
SVTR文字识别模型介绍
2.3K0
ViTAE:引入归纳偏置,浅层用CNN,深层用self-attention
1.3K0
YOLOv8优化策略:全新的聚焦线性注意力模块(Focused Linear Attention)| ICCV2023 FLatten Transforme
8760
YOLOv8改进:引入CVPR 2023 BiFormer, 基于动态稀疏注意力构建高效金字塔网络架构,对小目标涨点明显
3.1K0
MoA-Transformer | Swin-Transformer应该如何更好地引入全局信息?
9740
YOLOv8改进:全网原创首发 | 多尺度空洞注意力(MSDA) | 中科院一区顶刊 DilateFormer 2023.9
2.2K0
金字塔Transformer,更适合稠密预测任务的Transformer骨干架构
1.1K0
CoAtNet: 90.88% Paperwithcode榜单第一,层层深入考虑模型设计
1.3K0
【图像分类】Vision Transformer理论解读+实践测试
3K0
CeiT:训练更快的多层特征抽取ViT
1.1K0
Vision Transformer 必读系列之图像分类综述(二): Attention-based
1.9K0
OutLook Attention:具有局部信息感知能力的ViT
7580
preprint版本 | 何凯明大神新作MAE | CVPR2022最佳论文候选
1.3K0
Tansformer | 详细解读:如何在CNN模型中插入Transformer后速度不变精度剧增?
5.8K0
可视化VIT中的注意力
1.1K0
相关推荐
YOLO11优化:图像去噪 | AAAI2025 Transformer |一种基于Transformer的盲点网络(TBSN)架构 ,结合空间和通道自注意力层
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验