基于扩散的图像超分辨率模型:ResShift

1 论文解读

论文地址:ResShift: Efficient Diffusion Model for Image Super-resolution by Residual Shifting

代码地址:https://github.com/zsyOAOA/ResShift

1.1 前言

基于扩散的图像超分辨率(SR)方法由于需要数百甚至数千个采样步骤,导致推理速度较低。现有的加速采样技术不可避免地会在一定程度上牺牲性能,导致SR结果过于模糊。为了解决这个问题,我们提出了一种新颖有效的SR扩散模型,该模型显著减少了扩散步骤的数量,从而消除了推理过程中对后加速的需求及其相关的性能下降。我们的方法构建了一个马尔可夫链,通过移动高分辨率图像和低分辨率图像之间的残差来实现高分辨率图像和低分辨率图像之间的转换,大大提高了转换效率。此外,还设计了一套复杂的噪声控制方案,以灵活控制扩散过程中的换档速度和噪声强度。大量的实验表明,即使只有15个采样步骤,所提出的方法在合成和真实数据集上的性能也优于或至少与当前最先进的方法相当。

1.2 方法

一种常见的方法是将LR图像插入当前扩散模型的输入(例如,DDPM),并在sr的训练数据上从头开始重新训练模型。另一种流行的方法是使用无条件预训练的扩散模型作为先验,并修改其反向路径以生成预期的HR图像。不幸的是,这两种策略都继承了DDPM底层的马尔可夫链,这在推理中可能是低效的,通常需要数百甚至数千个采样步骤。虽然已经开发了一些加速技术来压缩推理中的采样步骤,但它们不可避免地会导致性能的显著下降,导致结果过于平滑。

在本节中,我们介绍了一个为sr量身定制的扩散模型ResShift。为了便于表示,LR图像和HR图像分别表示为y0​和x0​。此外,我们假设y0​和x0​具有相同的空间分辨率,这可以很容易地通过在必要时使用最近邻插值对LR图像y0​进行预上采样来实现。

1.2.1 模型设计

扩散模型的迭代生成范式已被证明在捕获复杂分布方面非常有效,这也激励我们迭代地处理SR问题。我们提出的方法构建了一个马尔可夫链,作为HR和LR图像之间的桥梁。这样,SR任务可以通过对给定任何LR图像的马尔可夫链进行反向采样来完成。接下来,我们将详细介绍专门为SR构建这样一个马尔可夫链的过程。

1.2.2 噪声策略

1.3 实验

本节对ResShift进行了实证分析,并提供了广泛的实验结果,以验证其在一个合成数据集和三个真实数据集上的有效性。我们的研究特别关注更具挑战性的×4 SR任务。

1.3.1 实验设置

训练细节。我们的训练数据中分辨率为256 × 256的HR图像是根据LDM从ImageNet的训练集中随机裁剪出来的。我们使用RealESRGAN的降解管道合成LR图像。Adam算法使用PyTorch的默认设置和64的mini-batch大小来训练ResShift。在训练期间,我们使用固定的学习率5e-5,并每500K次迭代更新权重参数。在网络架构方面,我们在DDPM中简单地采用UNet结构。为了提高ResShift对任意图像分辨率的鲁棒性,我们用Swin Transformer块替换UNet中的自关注层。

测试数据集。我们基于常用的退化模型合成了一个测试数据集, 即y=(x∗k)↓+n,其中k为模糊核, n为噪声, y和x分别表示LR图像和HR图像。为了全面评估ResShift的性能,我们考虑了更复杂类型的模糊核、下采样算子和噪声类型。对于HR图像,我们从ImageNet的验证集中随机选择了3000张图像,而不是SR中流行的数据集,例如Set5 , Set14和Urban100。这是因为这些数据集只包含少量的源图像,无法全面评估各种方法在不同退化类型下的性能。为方便起见,我们将此数据集命名为ImageNet-Test。采用两个真实数据集来评估ResShift的有效性。第一个是RealSR,包含100张由佳能5D3和尼康D810相机拍摄的真实图像。此外,我们收集另一个名为RealSet65的真实世界数据集。它包括最近文献中广泛使用的35张LR图像。剩下的30张图片是我们自己从网上获取的。

比较的方法。我们将ResShift与最近的七种SR方法(ESRGAN、RealSR-JPEG、BSRGAN、RealESRGAN、SwinIR、DASR和LDM)进行了对比,评估了ResShift的有效性。注意,LDM是一种基于扩散的方法,有1000个扩散步骤。为了公平比较,我们将LDM加速到与ResShiftusing DDIM相同的步数,并将其表示为“LDM- a”,其中“a”表示推理步数。DDIM中的超参数 η η η被设置为1,因为该值产生最真实的恢复图像。使用5个指标评估各种方法的性能,包括PSNR、SSIM、LPIPS、MUSIQ和CLIPIQA。值得注意的是,后两者是非参考指标,专门用于评估图像的真实感。特别是CLIPIQA,它利用了在大规模数据集(即Laion400M)上预训练的CLIP模型,因此表现出很强的泛化能力。在真实数据集上,我们主要依靠CLIPIQA和MUSIQ作为评价指标来比较不同方法的性能。

1.3.2 模型分析

我们分析了不同设置下ResShift在扩散步数和超参数p和k上的性能。

扩散步骤T和超参数p:在Eq.(1)中提出的过渡分布显著地减少了马尔可夫链中的扩散步骤T。超参数p允许在过渡期间灵活控制剩余移位的速度。表1总结了在不同的T和p配置下ResShift在ImageNet-Test上的性能。我们可以看到,T和p都呈现了一种权衡,在由参考指标(如PSNR、SSIM和LPIPS)测量的保真度与由非参考指标(包括CLIPIQA和MUSIQ)测量的超分辨率结果的真实感之间。以p为例,当p增加时,参考指标会改善,而非参考指标会恶化。此外,从图3的视觉对比可以看出,较大的p值会抑制模型产生更多图像细节的幻觉能力,导致输出模糊。

超参数k:由式(2)可知,状态xt​时k主导噪声强度。我们在表1中报告了k对ResShift性能的影响。结合图3的可视化,我们可以发现,过大或过小的k值都会使恢复结果平滑,而不管它们的有利指标是PSNR和SSIM。当k在[1.0,2.0]范围内时,我们的方法达到了CLIPIQA和MUSIQ所指示的最真实的质量,在实际应用中更理想。因此,我们将k设为2.0。

效率的比较:为了提高推理效率,需要限制扩散步数T。然而,这会导致还原的HR图像的真实感降低。为了折衷,可以将超参数 p设置为较小的值。因此,我们设置T = 15和p = 0.3,并产生我们的模型ResShift。表2总结了在ImageNet-Test上与LDM的效率和性能比较。在LPIPS和CLIPIQA方面,提出的ResShift即使在1000个采样步长下也优于LDM。在这种配置下,ResShift比LDM快40倍,有望解决当前基于扩散的SR方法固有的效率限制。

1.4 结论

在这项工作中,我们为SR引入了一种高效的扩散模型ResShift。与现有基于扩散的SR方法需要大量迭代才能获得满意的结果不同,我们提出的方法构建了一个仅15个采样步骤的扩散模型,从而显著提高了推理效率。其核心思想是将HR图像向LR图像腐蚀,而不是高斯白噪声,这样可以有效地切断扩散模型的长度。在合成和真实数据集上的大量实验证明了我们提出的方法的优越性。我们相信,我们的工作将为开发更高效的扩散模型铺平道路,以解决SR问题。


2 ResShift模型部署及实战

 2.1 conda环境准备

conda环境准备详见:annoconda

2.2 运行环境构建

git clone https://github.com/zsyOAOA/ResShift
cd ResShift

conda env create -f environment.yaml
conda activate ResShift

mkdir weights

2.3 预训练模型下载

模型1地址:resshift_realsrx4_s15.pth

模型2地址:autoencoder_vq_f4.pth

模型3地址:resshift_bicsrx4_matlab_s15.pth

模型4地址:resshift_bicsrx4_opencv_s15.pth

下载模型,保存到weights目录下,显示如下:

(ResShift) [root@localhost ResShift]# ll weights/
总用量 1616304
-rw-r--r-- 1 root root 221364711 12月 14 23:04 autoencoder_vq_f4.pth
-rw-r--r-- 1 root root 477905305 12月 14 23:19 resshift_bicsrx4_matlab_s15.pth
-rw-r--r-- 1 root root 477905305 12月 14 23:22 resshift_bicsrx4_opencv_s15.pth
-rw-r--r-- 1 root root 477905305 12月 14 23:00 resshift_realsrx4_s15.pth

2.4 模型推理

python inference_resshift.py -i testdata/RealSet128/dog.png -o result/ --scale 4 --task realsrx4 --chop_size 512

python inference_resshift.py -i testdata/RealSet128/tiger.png -o result/ --scale 4 --task realsrx4 --chop_size 512

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/246174.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Amazon SageMaker机器学习之旅的助推器

授权声明:本篇文章授权活动官方亚马逊云科技文章转发、改写权,包括不限于在 亚马逊云科技开发者社区, 知乎,自媒体平台,第三方开发者媒体等亚马逊云科技官方渠道。 一、前言 在当今的数字化时代,人工智能和机器学习已经…

GoLong的学习之路,进阶,微服务之序列化协议,Protocol Buffers V3

这章是接上一章,使用RPC包,序列化中没有详细去讲,因为这一块需要看的和学习的地方很多。并且这一块是RPC中可以说是最重要的一块,也是性能的重要影响因子。今天这篇主要会讲其使用方式。 文章目录 Protocol Buffers V3 背景以及概…

网络安全项目实战(四)--报文检测

8. TCP/UDP 段 目标 了解 TCP 段头的组织结构了解 UDP 段头的组织结构掌握 TCP/UDP 段的解析方式 8.1. UDP 段格式 下图是UDP的段格式(该图出自[TCPIP])。 8.2. UDP头部 //UDP头部,总长度8字节// /usr/include/linux/udp.h struct udphdr …

Arris VAP2500 list_mac_address未授权RCE漏洞复现

0x01 产品简介 Arris VAP2500是美国Arris集团公司的一款无线接入器产品。 0x02 漏洞概述 Arris VAP2500 list_mac_address接口处命令执行漏洞,未授权的攻击者可通过该漏洞在服务器端任意执行代码,写入后门,获取服务器权限,进而控制整个web服务器。 0x03 复现环境 FOFA…

SpringSecurity6从入门到上天系列第八篇:SpringSecurity当中的默认登录页面是如何产生的?

😉😉 欢迎加入我们的学习交流群呀! ✅✅1:这是孙哥suns给大家的福利! ✨✨2:我们免费分享Netty、Dubbo、k8s、Mybatis、Spring等等很多应用和源码级别的高质量视频和笔记资料,你想学的我们这里都…

Axure中动态面板使用及轮播图多种登录方式左侧导航栏之案列

🎬 艳艳耶✌️:个人主页 🔥 个人专栏 :《产品经理如何画泳道图&流程图》 ⛺️ 越努力 ,越幸运 目录 一、轮播图简介 1、什么是轮播图 2、轮播图有什么作用 3、轮播图有什么特点 4、轮播图适应范围 5、…

pytorch文本分类(二):引入pytorch处理文本数据

pytorch文本数据处理 目录 pytorch文本数据处理1. Pytorch背景2. 数据分割3. 数据加载Dataset代码分析字典的用途代码修改的目的 Dataloader 4. 练习 原学习任务链接 相关数据链接:https://pan.baidu.com/s/1iwE3LdRv3uAkGGI2fF9BjA?pwdro0v 提取码:ro…

日志框架Log4j、JUL、JCL、Slf4j、Logback、Log4j2

为什么程序需要记录日志 我们不可能实时的24小时对系统进行人工监控,那么如果程序出现异常错误时要如何排查呢?并且系统在运行时做了哪些事情我们又从何得知呢?这个时候日志这个概念就出现了,日志的出现对系统监控和异常分析起着…

wordpress 修改社交图标

要去掉标记的图标,死活找不到在那里配置。后来找到了,下图(wordpress 小白,特此记录)

java --- lambda表达式

1、先爽用一下lambda lambda表达式很大一个作业就是简化匿名内部类 public class case1 {public static void main(String[] args) {Integer[] arr {2,5,1,0,9,7,4};Integer[] arr2 {2,5,1,0,9,7,4};//使用匿名内部类作为比较器Arrays.sort(arr, new Comparator<Integer…

Java 实现汉字转拼音带单调

代码 import net.sourceforge.pinyin4j.PinyinHelper; import net.sourceforge.pinyin4j.format.HanyuPinyinOutputFormat; import net.sourceforge.pinyin4j.format.HanyuPinyinToneType; import net.sourceforge.pinyin4j.format.HanyuPinyinVCharType; import net.sourcefo…

【VRTK】【VR开发】【Unity】15-远程抓取

课程配套学习资源下载 https://download.csdn.net/download/weixin_41697242/88485426?spm=1001.2014.3001.5503 【背景】 之前的篇章介绍了如何实现直接抓取,本篇介绍另一种抓取方式-远程抓取。 【远程抓取的先决条件】 要让远程抓取起作用,需要先设置oculus提供的手部…

定时限电流继电器 JL-8D/2X112A5 AC220V 0.1~9.9S 0.1~9.9A 导轨

系列型号 JL-8D/3X1定时限电流继电器&#xff1b;JL-8D/3X111A2定时限电流继电器&#xff1b; JL-8D/3X121A2定时限电流继电器&#xff1b;JL-8D/3X211A2定时限电流继电器&#xff1b; JL-8D/3X221A2定时限电流继电器&#xff1b;JL-8D/3X2定时限电流继电器&#xff1b; JL…

天翼云盘秒变硬盘分享

https://cloud.189.cn/web/share?codeAvUnqaj6NNza&#xff08;访问码&#xff1a;wf4r&#xff09;y 以下介绍为作者开发的单机版软件&#xff0c;可用于Windows环境中将天翼云盘挂载为本地硬盘&#xff0c;确实可以达到本地硬盘的使用感知&#xff0c;对于多终端数据副本一…

Tomcat的结构和部署

目录 什么是tomcat&#xff1f; Tomcat 核心的组件三个 什么是 servlet&#xff1f; 什么是 JSP? Tomcat 功能组件结构&#xff1a; Container 结构分析&#xff1a; Tomcat 请求过程&#xff1a; 具体部署Tomcat 将安装包移动到opt目录下 配置systemd控制 验证访…

2 - Electron 核心概念

Electron 核心概念 主进程 通过Node.js、Electron提供的API与系统底层打交道启动项目时运行的 main.js 脚本就是我们说的主进程。在主进程运行的脚本可以以创建 Web 页面的形式展示 GUI。主进程只有一个 渲染进程 每个 Electron 的页面都在运行着自己的进程&#xff0c;这样…

每天五分钟计算机视觉:GoogLeNet的核心模型结构——Inception

本文重点 当构建卷积神经网络的时候,我们需要判断我们的过滤器的大小,这往往也作为一个超参数需要我们进行选择。过滤器的大小究竟是 11,33 还是 55,或者要不要添加池化层,这些都需要我们进行选择。而本文介绍的Inception网络的作用就是代替你来决定,把它变成参数的一部…

软件设计师——软件工程(二)

&#x1f4d1;前言 本文主要是【软件工程】——软件设计师——软件工程的文章&#xff0c;如果有什么需要改进的地方还请大佬指出⛺️ &#x1f3ac;作者简介&#xff1a;大家好&#xff0c;我是听风与他&#x1f947; ☁️博客首页&#xff1a;CSDN主页听风与他 &#x1f304…

ZLMediaKit 编译以及测试(Centos 7.9 环境)

文章目录 一、前言二、编译器1、获取代码2、编译器2.1 编译器版本要求2.2 安装编译器 3、安装cmake4、依赖库4.1 依赖库列表4.2 安装依赖库4.2.1 安装libssl-dev和libsdl-dev4.2.2 安装 ffmpeg-devel依赖和ffmpeg依赖 三、构建和编译项目&#xff08;启用WebRTC功能&#xff09…

pytorch:to()、device()、cuda()将Tensor或模型移动到指定的设备上

将Tensor或模型移动到指定的设备上&#xff1a;tensor.to(‘cuda:0’) 最开始读取数据时的tensor变量copy一份到device所指定的GPU上去&#xff0c;之后的运算都在GPU上进行在做高维特征运算的时候&#xff0c;采用GPU无疑是比用CPU效率更高&#xff0c;如果两个数据中一个加了…