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

《DiffIR:用于图像修复的高效扩散模型》学习笔记

paper:2303.09472

GitHub:GitHub - Zj-BinXia/DiffIR: This project is the official implementation of 'Diffir: Efficient diffusion model for image restoration', ICCV2023

目录

摘要

1、介绍

2、相关工作

2.1 图像恢复(Image Restoration):

2.2 扩散模型(Diffusion Models):

3、方法

3.1 预备知识:扩散模型

3.2 整体框架

3.3 预训练DiffIR

3.3.1动态多头转置注意力(DMTA)

3.3.2 动态门控前馈网络(DGFN)

3.2.3 预训练目标

3.4 扩散模型在图像恢复中的应用

4、实验 

4.1 实验设置

4.2 图像修复任务的评估

4.3 图像超分辨率任务的评估

4.4 图像运动去模糊任务的评估

 4.5 消融实验


摘要

扩散模型(Diffusion Model,DM)通过将图像合成过程建模为去噪网络的逐步应用,已实现了SOTA(state-of-the-art,最先进)的性能。然而,与图像合成不同,图像修复(Image Restoration,IR)需要强约束以生成与真实图像(ground-truth)一致的结果。因此,对于IR任务,传统DM需要在大型模型上运行大量迭代来估计整个图像或特征图,这种方法效率较低。

为了解决这一问题,我们提出了一种高效的用于IR的扩散模型(DiffIR),该模型由紧凑的IR先验提取网络(Compact IR Prior Extraction Network,CPEN)、动态IR Transformer(Dynamic IR Transformer,DIRformer)和去噪网络组成。具体来说,DiffIR的训练包括两个阶段:预训练和扩散模型的训练。

  • 在预训练阶段,我们将真实图像输入到CPEN中,以提取一个紧凑的IR先验表示(IR Prior Representation,IPR),用于指导DIRformer。
  • 在第二阶段,我们训练扩散模型,仅使用低质量(LQ)图像直接估计与预训练的CPEN生成相同的IRP。

我们观察到,由于IRP只是一个紧凑的向量,DiffIR相比传统DM能够以更少的迭代次数获得准确的估计,并生成更稳定、更加真实的结果。由于迭代次数较少,DiffIR可以采用CPEN、DIRformer和去噪网络的联合优化,从而进一步减少估计误差的影响。

我们在多个IR任务上进行了广泛的实验,DiffIR在减少计算成本的同时,实现了SOTA性能。

1、介绍

图像修复(Image Restoration,IR)是一个长期存在的问题,其原因在于它广泛的应用价值和病态性质(ill-posed nature)。IR旨在从受多种退化因素(例如模糊、遮罩、降采样)影响的低质量(LQ)图像中恢复出高质量(HQ)图像。目前,基于深度学习的IR方法已取得显著成功,因为它们可以从大规模数据集中学习强大的先验信息。

病态性质:

  • 解的非唯一性

    • 给定一张低质量(LQ)的图像,可能有无数种高质量(HQ)的图像符合它。这是因为多个HQ图像在经过退化过程(例如模糊、降采样、噪声添加)后可能生成相同的LQ图像。例如,从一张低分辨率图片生成高分辨率图片时,原始细节信息可能已经丢失,导致复原结果存在多解性。
  • 解的存在性

    • 某些极端情况下,输入的LQ图像可能缺乏足够的信息来恢复出一张合理的HQ图像。例如,在遮挡严重或噪声极大的图像中,某些区域几乎没有可恢复的信息。
  • 解的对输入的敏感性

    • 微小的输入噪声可能导致解的巨大差异。例如,在去噪任务中,如果算法对噪声过于敏感,可能无法有效地恢复图像的原始细节,甚至进一步放大噪声。

近年来,扩散模型(Diffusion Models,DMs)通过一系列去噪自动编码器构建,已在图像合成和IR任务(如图像修复[如修补(inpainting)和超分辨率)中取得了令人印象深刻的成果。具体来说,DM通过逆扩散过程迭代地去噪图像,能够从随机采样的高斯噪声映射到复杂目标分布(如真实图像或潜在表示分布)。与生成对抗网络(GANs)不同,DMs不会遭受模式崩溃(mode collapse)和训练不稳定性的问题

模式崩溃是指生成器(Generator)无法学习到真实数据分布的多样性,仅生成少数几种模式的样本。换句话说,生成器会输出有限的、相似的样本,而忽略了数据分布中的其他可能性。

作为一种基于似然的模型,DM需要在大型去噪模型上进行大量迭代(约50至1000步),以精确建模数据的细节,这消耗了大量的计算资源。然而,与图像合成任务需要从零生成每个像素不同,IR任务仅需要在给定的LQ图像上添加准确的细节。因此,如果DM直接采用图像合成的范式来处理IR任务,不仅会浪费大量计算资源,还可能生成一些与给定LQ图像不匹配的细节

在本文中,我们旨在设计一个基于DM的IR网络,以充分、高效地利用DM强大的分布映射能力来恢复图像。为此,我们提出了DiffIR。由于Transformer可以建模长距离像素依赖关系,我们采用Transformer模块作为DiffIR的基本单元,并以U-Net形状堆叠这些Transformer模块,形成动态IR Transformer(Dynamic IRformer,DIRformer),用于提取和聚合多层次特征。我们将DiffIR的训练分为两个阶段:

在第一阶段,我们开发了一个紧凑的IR先验提取网络(Compact IR Prior Extraction Network,CPEN),用于从真实图像中提取一个紧凑的IR先验表示(IPR),以指导DIRformer。此外,我们为DIRformer开发了动态门控前馈网络(Dynamic Gated Feed-Forward Network,DGFN)和动态多头转置注意力(Dynamic Multi-Head Transposed Attention,DMTA),以充分利用IPR。需要注意的是,CPEN和DIRformer是联合优化的。

在第二阶段,我们训练DM直接从LQ图像中估计精确的IPR。由于IPR较轻量且仅用于添加细节以完成修复,DiffIR能够在少量迭代后估计出相当准确的IPR,并获得稳定的视觉结果。

除了上述方案和架构上的创新外,我们还展示了联合优化的有效性。在第二阶段,我们观察到估计出的 IPR(图像恢复先验)可能仍存在一些微小误差,这会影响 DIRformer 的性能。然而,传统的扩散模型需要大量迭代,因此无法实现与解码器的联合优化。由于我们的 DiffIR 仅需要少量迭代,因此可以运行所有迭代并获得估计的 IPR,然后与 DIRformer 共同优化。

如图所示,我们的 DiffIR 在消耗远少于其他基于扩散模型的方法(例如 RePaint 和 LDM)的计算资源的同时,达到了 SOTA(State-of-the-Art)的性能。尤其是,DiffIR 的效率比 RePaint 高 1000 倍。

我们的主要贡献包括以下三点:

(1)我们提出了 DiffIR,这是一种强大、简单且高效的基于扩散模型的基准方法,专用于图像恢复。与图像生成不同,图像恢复任务的输入图像中大多数像素是已知的。因此,我们利用扩散模型强大的映射能力来估计一个紧凑的 IPR,以指导图像恢复,从而提升了扩散模型在图像恢复任务中的效率和稳定性。

传统扩散模型需要从噪声中生成整张图像,需要大量迭代(例如 100-1000 步),而 DiffIR 专注于利用扩散模型的分布映射能力生成紧凑的 IPR,仅添加细节来完成图像恢复。这种设计避免了大规模的计算浪费,显著提升效率和稳定性。

(2)我们为动态 IRformer(DIRformer)提出了动态多头转置注意力(Dynamic Gated Transposed Attention, DGTA)和动态门控前馈网络(Dynamic Gated Feed-Forward Network, DGFN),以充分挖掘 IPR 的潜力。与之前的潜变量扩散模型(Latent DM)仅单独优化去噪网络不同,我们提出了联合优化去噪网络和解码器(即 DIRformer)的方法,以进一步提升对估计误差的鲁棒性。

传统的扩散模型在优化时只能单独训练去噪网络,而无法与解码器(如 DIRformer)联合优化。这种分离优化会降低模型应对估计误差的能力。

(3)大量实验表明,所提出的 DiffIR 在图像恢复任务中实现了 SOTA 性能,同时相比其他基于扩散模型的方法消耗了更少的计算资源。

2、相关工作

2.1 图像恢复(Image Restoration):

作为先驱工作,SRCNN、DnCNN和 ARCNN 利用紧凑型 CNN 在图像恢复任务上取得了出色的性能。此后,相较于传统的图像恢复方法,基于 CNN 的方法变得更为流行。截至目前,研究人员从多个角度对 CNN 进行了深入研究,获得了更为精细的网络架构设计和学习方案,包括残差块 、GAN 、注意力机制、知识蒸馏等其他方法。

最近,Transformer 模型作为一种自然语言处理工具,在计算机视觉领域中广受欢迎。与 CNN 相比,Transformer 能够建模图像中不同区域的全局交互,并实现最先进(SOTA)的性能。目前,Transformer 已被广泛应用于多个视觉任务,例如图像识别、分割、目标检测 和图像恢复。

2.2 扩散模型(Diffusion Models):

扩散模型(DMs)在密度估计和样本质量方面取得了最先进的成果。扩散模型采用参数化的马尔可夫链来优化似然函数的变分下界,使其能够比其他生成模型(如 GAN)生成更精确的目标分布。近年来,DM 在图像恢复任务中影响力逐渐增强,例如超分辨率 和图像修复(inpainting)。SR3 和 SRdiff 将扩散模型引入到图像超分辨率任务中,并实现了比最先进的基于 GAN 的方法更优的性能。此外,Palette受到条件生成模型  的启发,提出了一种用于图像恢复的条件扩散模型。LDM 提出了在潜在空间中执行扩散模型以提高恢复效率。此外,RePaint通过在扩散模型中重新采样迭代设计了一种改进的去噪策略以用于图像修复任务。

然而,这些基于扩散模型的图像恢复方法直接采用了扩散模型在图像生成任务中的范式。然而,在图像恢复任务中,大部分像素是已知的,因此没有必要在整张图像或特征图上执行扩散模型。我们的 DiffIR 在一个紧凑的 IPR 上执行扩散模型,从而使扩散模型在图像恢复任务中处理更加高效和稳定。

3、方法

3.1 预备知识:扩散模型

在本文中,我们采用扩散模型(DMs)来生成准确的图像恢复先验表示(IPR)。在训练阶段,扩散模型通过T次迭代定义了一个扩散过程,该过程将输入图像x_0​ 转换为高斯噪声x_T \sim N(0, 1)。扩散过程的每次迭代可描述如下:

q(x_t | x_{t-1}) = N\left(x_t; \sqrt{1-\beta_t}x_{t-1}, \beta_t I\right)

其中x_t是在时间步 t的噪声图像,\beta_t是预定义的缩放因子,N 表示高斯分布。

实际上这就是x_{t-1}x_t的概率分布,N表示正态分布,\beta_t是论文中设置的缩放因子,\sqrt{1-\beta_t}x_{t-1}表示x_{t-1}的保留强度,\beta_t I表示加噪的噪声强度。

方程可进一步简化为:

q(x_t | x_0) = N\left(x_t; \sqrt{\bar{\alpha}_t}x_0, (1-\bar{\alpha}_t)I\right)

其中\alpha_t = 1-\beta_t\bar{\alpha}_t = \prod_{i=0}^t \alpha_i

在推理阶段(逆过程),扩散模型从高斯随机噪声图x_T开始,并逐渐去噪 x_T​,直到生成高质量的输出图像x_0

p(x_{t-1} | x_t, x_0) = N\left(x_{t-1}; \mu_t(x_t, x_0), \sigma_t^2 I\right)

其中均值为:

\mu_t(x_t, x_0) = \frac{1}{\sqrt{\alpha_t}} x_t - \frac{\epsilon}{\sqrt{1-\alpha_t}} \sqrt{1-\bar{\alpha}_t}

方差为:

\sigma_t^2 = \frac{1-\bar{\alpha}_{t-1}}{1-\bar{\alpha}_t} \beta_t

在逆过程中的唯一不确定变量是噪声\epsilon,表示在x_t中的噪声成分。

扩散模型通过去噪网络\epsilon_\theta(x_t, t)来估计 \epsilon。为了训练 \epsilon_\theta(x_t, t),给定一个干净图像x_0,扩散模型随机采样一个时间步t 和噪声\epsilon \sim N(0, I),并根据方程(2)生成带噪声图像 xtx_txt​。然后,扩散模型根据以下目标优化网络参数 \theta

\triangledown _{\theta }\left \| \epsilon - \epsilon_\theta\left(\sqrt{\bar{\alpha}_t}x_0 + \sqrt{1-\bar{\alpha}_t}\epsilon, t\right) \right \|^2_2

3.2 整体框架

传统的扩散模型(DMs)需要大量的迭代、计算资源和模型参数来生成准确且真实的图像或潜在特征图。虽然扩散模型在从头生成图像(图像合成)方面表现出色,但将扩散模型的图像合成范式直接应用于图像恢复(IR)是一种浪费计算资源的做法。因为在图像恢复中,大多数像素和信息已经给出,直接对整个图像或特征图进行扩散模型处理,不仅会浪费大量的迭代和计算,而且很容易生成更多的伪影。因此,虽然扩散模型具有强大的数据估计能力,但将现有的图像合成扩散模型范式应用于图像恢复是低效的。为了处理这个问题,我们提出了一种高效的扩散模型用于图像恢复(即,DiffIR),它采用扩散模型估计紧凑的图像恢复先验(IPR),以引导网络恢复图像。由于IPR非常轻量,DiffIR的模型大小和迭代次数可以大大减少,从而比传统扩散模型生成更准确的估计。

如图所示,DiffIR主要由一个紧凑的IPR先验提取网络(CPEN)、动态IR变换器(DIRformer)和去噪网络组成。我们分两个阶段训练DiffIR,包括DiffIR的预训练和扩散模型的训练。

3.3 预训练DiffIR

在介绍预训练 DiffIR 之前,我们首先需要介绍第一阶段中的两个关键网络:紧凑的图像恢复先验提取网络(CPEN)和动态图像恢复变换器(DIRformer)。

CPEN 的结构如图所示,主要由残差块和线性层堆叠而成,用于提取紧凑的图像恢复先验(IPR)表示。之后,DIRformer 利用提取的 IPR 恢复低质量(LQ)图像。

DIRformer 的结构如图所示,它由 U-Net 形状的动态变换器块堆叠而成。动态变换器块包括动态多头转置注意力(DMTA, 绿色框)和动态门控前馈网络(DGFN,蓝灰框),它们使用 IPR 作为动态调制参数,将恢复细节加入到特征图中。

在预训练阶段(图 2 (a)),我们共同训练 CPEN 和 DIRformer。具体来说,我们首先将高质量(GT)图像和低质量(LQ)图像拼接在一起,并通过 PixelUnshuffle 操作对其进行降采样,得到 CPEN 的输入。然后,CPEN 提取Z \in \mathbb{R}^{4C'}表示为:

Z = \text{CPEN}_{S1}(\text{PixelUnshuffle}(\text{Concat}(I_{\text{GT}}, I_{\text{LQ}})))

随后,IPR Z 被送入 DIRformer 的 DGFN 和 DMTA,作为动态调制参数引导恢复过程:

F' = W_{1l}Z \odot \text{Norm}(F) + W_{2l}Z

其中,\odot 表示元素逐点相乘,\text{Norm}表示层归一化,W_{l}为线性层,FF' 分别为输入和输出特征图,维度为\mathbb{R}^{\hat{H} \times \hat{W} \times \hat{C}},而 W_{1l}Z, W_{2l}Z \in \mathbb{R}^{\hat{C}}

3.3.1动态多头转置注意力(DMTA)

接下来,在 DMTA 中,我们聚合全局空间信息。具体来说,F'被投影为查询 Q = W_{d}^Q W_{c}^Q F',键 K = W_{d}^K W_{c}^K F',以及值V = W_{d}^V W_{c}^V F'。其中,W_c1 \times 1的逐点卷积,W_d是 3 \times 3 的深度卷积。然后,我们将查询 Q、键K和值 V进行重塑,分别得到 \hat{Q} \in \mathbb{R}^{\hat{H}\hat{W} \times \hat{C}}\hat{K} \in \mathbb{R}^{\hat{C} \times \hat{H}\hat{W}}\hat{V} \in \mathbb{R}^{\hat{H}\hat{W} \times \hat{C}}。接下来,\hat{Q}\hat{K} 执行点积操作,生成转置注意力图 A \in \mathbb{R}^{\hat{C} \times \hat{C}},其大小比常规注意力图(\hat{H}\hat{W} \times \hat{H}\hat{W})更高效。

DMTA 的整体过程如下:

\hat{F} = W_c \hat{V} \cdot \text{Softmax}(\hat{K} \cdot \hat{Q} / \gamma) + F

其中,\gamma是一个可学习的缩放参数。与传统的多头自注意力类似,我们将通道分离为多个头部,并分别计算注意力图。

3.3.2 动态门控前馈网络(DGFN)

随后,在 DGFN 中,我们聚合局部特征。首先,通过 1 \times 1 卷积聚合不同通道的信息,然后采用 3 \times 3的深度卷积聚合空间邻域像素的信息。此外,我们引入门控机制以增强信息编码。DGFN 的整体过程定义为:

\hat{F} = \text{GELU}(W_{1d}W_{1c}F') \odot W_{2d}W_{2c}F' + F

3.2.3 预训练目标

我们联合训练 CPEN 和 DIRformer,使得 DIRformer 可以充分利用由 CPEN 提取的 IPR。重建的目标损失为:

L_{\text{rec}} = \|I_{\text{GT}} - \hat{I}_{\text{HQ}}\|_1

其中,I_{\text{GT}} 和\hat{I}_{\text{HQ}}分别表示高质量的真实图像和恢复的高质量图像,\|\cdot\|_1表示 L1 范数。如果任务更强调视觉质量(如修复和超分辨率任务),可以进一步添加感知损失和对抗损失。

3.4 扩散模型在图像恢复中的应用

在第二阶段,我们利用扩散模型(DM)强大的数据估计能力来估计图像先验表示(IPR)。具体来说,我们使用预训练的 CPENS1 来捕获 IPR,记为 Z \in \mathbb{R}^{4C'}。随后,我们对Z应用扩散过程以采样 Z_T \in \mathbb{R}^{4C'},可描述为:

q(Z_T | Z) = \mathcal{N}(Z_T; \sqrt{\bar{\alpha}_T}Z, (1-\bar{\alpha}_T)\mathbf{I})

其中T是总的迭代次数,\bar{\alpha}\alpha分别由(\bar{\alpha}_T = \prod_{i=0}^T \alpha_i​)。

扩散模型的加噪过程。

在反向过程当中,由于 IPR 是紧凑的,DiffIRS2 仅需要比传统扩散模型更少的迭代次数和更小的模型规模,就能够获得非常好的估计。

传统扩散模型在训练时,由于迭代的计算成本巨大,只能随机采样一个时间步 t \in [1, T],并仅在该时间步优化去噪网络。由于缺乏去噪网络和解码器(DIRformer)的联合训练,去噪网络导致的微小估计误差会降低 DIRformer 的潜力。相比之下,DiffIR 从第 T步开始,运行所有去噪迭代,以获得 \hat{Z}并将其传递到 DIRformer 进行联合优化:

\hat{Z}_{t-1} = \frac{1}{\sqrt{\alpha_t}} \left( \hat{Z}_t - \epsilon \sqrt{1 - \alpha_t} \right) + \sqrt{1 - \bar{\alpha}_t}

改进点1:全面执行反向扩散迭代,避免了传统方法中随机采样时间步导致的次优训练问题。 

其中 \epsilon 表示同样的噪声,我们使用 CPENS2 和去噪网络来预测噪声。值得注意的是,与传统扩散模型不同,我们的 DiffIRS2 删除了方差估计,这对精确的 IPR 估计和更好的性能很有帮助。

改进点2:去掉方差估计,简化模型结构,提高了对 IPR 的预测精度。

在扩散模型的反向过程中,我们首先使用 CPENS2 从低质量图像中提取条件向量 D \in \mathbb{R}^{4C'}

D = \text{CPENS2}(\text{PixelUnshuffle}(I_{LQ}))

其中 CPENS2 的结构与 CPENS1 相同,但第一层卷积的输入维度不同。然后我们使用去噪网络 \epsilon_\theta 在每个时间步 t 预测噪声:

\epsilon_\theta(\text{Concat}(\hat{Z}_t, t, D))

预测的噪声被代入获得 \hat{Z}_{t-1} 并开始下一次迭代。经过 TTT 次迭代后,我们获得最终估计的 IPR Z^∈R4C′\hat{Z} \in \mathbb{R}^{4C'}Z^∈R4C′。我们通过以下损失联合训练 CPENS2、去噪网络和 DIRformer:

L_{\text{diff}} = \frac{1}{4C'} \sum_{i=1}^{4C'} \left| \hat{Z}(i) - Z(i) \right|, \quad L_{\text{all}} = L_{\text{rec}} + L_{\text{diff}}

其中还可以在 L_{\text{all}} 中加入感知损失和对抗损失以提升视觉质量。

在推理阶段,我们只使用扩散过程的反向部分。CPENS2 从低质量图像中提取条件向量D,我们随机采样一个高斯噪声 \hat{Z}_T。去噪网络利用 \hat{Z}_T 和 D 经过 T 次迭代后估计出 IPR \hat{Z}。随后,DIRformer 利用该 IPR 对低质量图像进行修复。

扩散模型还是用到了加噪和去噪过程,不过就是少了解码器和编码器,因为输入的直接就是Z。之后预测的\hat{Z}通过DIRformer 进行图像修复。

4、实验 

4.1 实验设置

我们分别将该方法应用于三个典型的图像修复(Image Restoration, IR)任务:
(a) 图像修复(inpainting);
(b) 图像超分辨率(super-resolution, SR);
(c) 单张图像运动去模糊(single-image motion deblurring)。

我们的 DiffIR 模型采用 4 层的编码器-解码器结构。从第 1 层到第 4 层,DMTA 模块中的注意力头数量为[1, 2, 4, 8],通道数为 [48,96,192,384]。此外,在所有图像修复任务中,我们通过调整 DIRformer 中动态 transformer 块的数量,使 DiffIR 与现有的最新方法(SOTA)在参数量和计算成本上相当。具体地,从第 1 层到第 4 层,不同任务中的动态 transformer 块数量设置为:

  • 图像修复:[1,1,1,9];
  • 超分辨率:[13,1,1,1];
  • 去模糊:[3,5,6,6];

另外,根据之前的研究,我们在图像修复和超分辨率任务中引入了对抗损失(adversarial loss)和感知损失(perceptual loss)。CPEN 模块的通道数 C' 设置为 64。

在扩散模型的训练过程中,总时间步数 T 设置为 4(确实显著减少了时间步,正常的扩散T是1000,怪不得反向可以直接全部迭代)\beta_t\alpha_t = 1-\beta_t)从\beta_1 = 0.1线性递增到 \beta_T = 0.99。我们使用 Adam 优化器(\beta_1 = 0.9, \beta_2 = 0.99)进行模型训练。

4.2 图像修复任务的评估

我们在图像修复任务中按照 LaMa的相同设置对 DiffIR S2 进行训练和验证。具体而言,我们使用 Places-Standard  和 CelebA-HQ 数据集,分别以批量大小为 30 和图像块大小为 256 训练我们的 DiffIR 模型。我们将 DiffIR S2 与最新的图像修复方法(包括 ICT 、LaMa 和 RePaint)进行对比,使用 LPIPS 和 FID指标在验证集上评估性能。

定量结果如表 1 所示。可以看到,我们的 DiffIR S2 显著优于其他方法。特别是,DiffIR S2 在 PlacesCelebA-HQ 数据集上,使用宽遮罩时,相较于具有竞争力的 LaMa 方法,分别在 FID 指标上超出 0.27060.5583,并且消耗的总参数量和计算量与之相当。此外,与基于扩散模型(DM)的 RePaint 方法相比,DiffIR S2 仅消耗其 4.3% 的参数量和 0.1% 的计算资源,同时取得了更好的性能。这表明,DiffIR 能够充分且高效地利用扩散模型(DM)的数据估计能力完成图像修复任务。

定性结果如图 所示。我们的 DiffIR S2 能够生成比其他竞争性图像修复方法更加真实且合理的结构和细节。

4.3 图像超分辨率任务的评估

我们在图像超分辨率(SR)任务上对 DiffIR S2 进行训练和验证。具体来说,我们在 DIV2K(800 张图像)和 Flickr2K (2650 张图像)数据集上进行 4 倍超分辨率训练,批量大小设置为 64,低质量图像块的尺寸为 64×64。我们在五个基准数据集(Set5 Set14 General100 Urban100  和 DIV2K100 )上,使用 LPIPS PSNR 指标评估 DiffIR S2 和其他最新的基于 GAN 的超分辨率方法。

表 2 展示了 DiffIR S2 与最新基于 GAN 的超分辨率方法的性能和计算量(MultAdds)比较,包括 SFTGANSRGAN ESRGAN USRGANSPSR BebyGAN 。可以看到,DiffIR S2 达到了最佳性能。与具有竞争力的超分辨率方法 BebyGAN 相比,DiffIR S2 在 DIV2K100Urban100 数据集上的 LPIPS 指标分别领先 0.01510.0089,但仅消耗其 63% 的计算资源。此外,值得注意的是,DiffIR S2 在性能上显著超越了基于扩散模型的 LDM 方法,同时仅消耗 2% 的计算资源。

定性结果如图所示。DiffIR S2 在视觉质量上表现最佳,生成了包含更真实细节的图像。这些视觉对比结果与定量评估一致,进一步展示了 DiffIR 的优越性。DiffIR 能够高效地利用扩散模型的强大能力进行图像恢复。更多的视觉结果展示在补充材料中。

4.4 图像运动去模糊任务的评估

我们在 GoPro数据集上训练 DiffIR 模型用于图像运动去模糊任务,并在两个经典基准数据集(GoProHIDE )上对 DiffIR 进行评估。我们将 DiffIRS2 与最新的图像运动去模糊方法进行对比,包括 Restormer MPRNetIPT

定量结果(使用 PSNRSSIM 指标)如表所示从结果中可以看到,DiffIRS2 在运动去模糊任务中表现优越:

  • GoPro 数据集上,DiffIRS2 分别比 IPTMIMI-Unet+ 高出 0.68 dB0.54 dB
  • 分别在 GoProHIDE 数据集上,DiffIRS2 比 Restormer 高出 0.28 dB0.33 dB,且仅消耗其 78% 的计算资源。

这些结果表明了 DiffIR 在图像运动去模糊任务上的有效性。

定性结果如图所示,DiffIRS2 在视觉质量上表现最佳,生成的图像包含更多真实细节,与对应的高质量(HQ)图像更为接近。

 4.5 消融实验

DiffIRS2-V3与DiffIRS1的对比

DiffIRS2-V3实际上是表1中采用的DiffIRS2,而DiffIRS1是第一阶段的预训练网络,输入为真实图像。比较DiffIRS1和DiffIRS2-V3,我们可以看到DiffIRS2-V3与DiffIRS1的LPIPS相似,这意味着DM具有强大的数据建模能力,可以预测准确的IPR(图像修复特征)。

进一步验证DM的有效性

为了进一步证明DM的有效性,我们取消在DiffIRS2-V3中使用DM,得到DiffIRS2-V1。比较DiffIRS2-V1和DiffIRS2-V3,我们可以看到,使用DM的DiffIRS2-V3明显优于DiffIRS2-V1。这意味着DM学习到的IPR能够有效地引导DIRformer(图像修复网络)恢复低质量(LQ)图像。

探索更好的DM训练方案

我们比较了两种训练方案:传统的DM优化和我们提出的联合优化。由于传统DM方法需要多次迭代来估计大型图像或特征图,它们必须通过随机采样时间步来优化去噪网络,而无法与后面的解码器(即本文中的DIRformer)联合优化。由于DiffIR仅使用DM来估计紧凑的一维IPR向量,我们可以通过多次迭代来获得较为精确的结果。因此,我们可以通过运行去噪网络的所有迭代来获得IPR,并与DIRformer一起进行联合优化。比较DiffIRS2-V2和DiffIRS2-V3,DiffIRS2-V3明显优于DiffIRS2-V2,这证明了我们提出的联合优化方法在训练DM时的有效性。因为DM在IPR的最小估计误差可能导致DIRformer的性能下降,而联合训练DM和DIRformer可以解决这个问题。

插入噪声的影响

在传统的DM方法中,它们会在逆向DM过程中插入方差噪声,以生成更逼真的图像。与传统的DM方法预测图像或特征图不同,我们使用DM来估计IPR。在DiffIRS2-V4中,我们在逆向DM过程中插入噪声。正如我们所见,DiffIRS2-V3的表现优于DiffIRS2-V4。这意味着取消插入噪声可以更好地保证估计的IPR的准确性。

DM的损失函数

我们探索了哪些损失函数最适合引导去噪网络和CPENS2学习估计准确的IPR。从低质量图像中。我们定义了三个损失函数:(1) 定义Ldiff作为优化损失;(2) 采用L2来度量估计误差;(3) 使用Kullback-Leibler散度来度量分布相似性。

L_2 = \frac{1}{4C'} \sum_{i=1}^{4C'} (\hat{Z}(i) - Z(i))^2

L_{kl} = \sum_{i=1}^{4C'} Z_{\text{norm}}(i) \log \left( \frac{Z_{\text{norm}}(i)}{\hat{Z}_{\text{norm}}(i)} \right)

其中,\hat{Z} 和 Z \in \mathbb{R}^{4C'} 分别是从DiffIRS1和DiffIRS2提取的IPR,\hat{Z}_{\text{norm}}Z_{\text{norm}} \in \mathbb{R}^{4C'}是通过softmax操作分别归一化的\hat{Z}Z。我们分别在DiffIRS2上应用这些损失函数来学习直接从低质量图像中估计准确的IPR。然后,我们在CelebA-HQ数据集上进行评估,Ldiff的表现优于L2和Lkl。

迭代次数的影响

在这一部分,我们探索了DM中迭代次数对DiffIRS2性能的影响。我们设置了DiffIRS2中的不同迭代次数,并调整了公式中的\beta_t\alpha_t = 1 - \beta_t​),使得扩散过程后的 Z 为高斯噪声(即\bar{\alpha}_T \to 0)。随着迭代次数增加到3,DiffIRS2的性能会显著提高。当迭代次数大于4时,DiffIRS2的性能几乎保持稳定,意味着它达到了上限。此外,我们可以看到,我们的DiffIRS2比传统DM方法(需要超过200次迭代)具有更快的收敛速度。这是因为我们仅在IPR(一个紧凑的一维向量)上执行DM。

相关文章:

《DiffIR:用于图像修复的高效扩散模型》学习笔记

paper:2303.09472 GitHub:GitHub - Zj-BinXia/DiffIR: This project is the official implementation of Diffir: Efficient diffusion model for image restoration, ICCV2023 目录 摘要 1、介绍 2、相关工作 2.1 图像恢复(Image Rest…...

[Datawheel]利用Zigent框架编写智能体-2

书接上回 1. Zigent实现教程编写智能体 本节将通过 Zigent 框架实现一个教程编写智能体,其主要功能是输入教程主题,然后自动生成完整的教程内容。 设计思路: 先通过 LLM 大模型生成教程的目录,再对目录按照二级标题进行分块&…...

cursor重构谷粒商城05——docker容器化技术快速入门【番外篇】

前言:这个系列将使用最前沿的cursor作为辅助编程工具,来快速开发一些基础的编程项目。目的是为了在真实项目中,帮助初级程序员快速进阶,以最快的速度,效率,快速进阶到中高阶程序员。 本项目将基于谷粒商城…...

Django项目的创建及运行——Django学习日志(一)

1.命令行创建 (1)创建项目 django-admin startproject HelloWorld(这里的名称任意) (2)创建应用(app) 首先要进入到项目目录,比如我这里的项目目录为HelloWorld cd …...

gesp(C++六级)(1)洛谷:P10250:[GESP样题 六级] 下楼梯

gesp(C六级)(1)洛谷:P10250:[GESP样题 六级] 下楼梯 题目描述 顽皮的小明发现,下楼梯时每步可以走 1 1 1 个台阶、 2 2 2 个台阶或 3 3 3 个台阶。现在一共有 N N N 个台阶,你能帮小明算算有多少种方案…...

1.23学习

misc buuctf-小明的保险箱 打开附件是一个在线图片首先将其另存为,然后仅仅只是一个图片,而无其他信息,那么我们再进行binwalk或者foremost文件分离,得到了一个文件夹,其中含有一个压缩包但是是一个加密的&#xff0…...

atheris从安装到fuzz输入输出解读

1. 引入 模糊测试是一种自动化的软件测试技术,它通过自动生成大量随机数据作为输入来测试程序,以发现潜在的错误、漏洞或崩溃。atheris是一个专门用于CPython(Python的C语言实现)的模糊测试框架。 2. 安装atheris 参考1&#x…...

基于自然语言处理的垃圾短信识别系统

基于自然语言处理的垃圾短信识别系统 🌟 嗨,我是LucianaiB! 🌍 总有人间一两风,填我十万八千梦。 🚀 路漫漫其修远兮,吾将上下而求索。 目录 设计题目设计目的设计任务描述设计要求输入和输出…...

PAT甲级-1022 Digital Libiary

题目 题目大意 一个图书有图书id,书名,作者,关键字,出版商,出版时间6个信息。现要查询图书的ID,1对应通过书名查询,2对应作者,3对应关键字(不需要完全一致,包…...

GD32F470 USB虚拟串口

1. 硬件连接 确保GD32F470开发板的USB接口连接到PC的USB端口。开发板通常提供USB FS(全速)接口,可以直接使用。 2. 配置USB功能 需要配置USB时钟、GPIO和中断,以支持全速USB设备模式。 2.1 配置USB时钟 c复制 void usb_rcu_…...

25美赛ABCDEF题详细建模过程+可视化图表+参考论文+写作模版+数据预处理

详情见该链接!!!!!! 25美国大学生数学建模如何准备!!!!!-CSDN博客文章浏览阅读791次,点赞13次,收藏7次。通过了解比赛基本…...

【转帖】eclipse-24-09版本后,怎么还原原来版本的搜索功能

【1】原贴地址:eclipse - 怎么还原原来版本的搜索功能_eclipse打开类型搜索类功能失效-CSDN博客 https://blog.csdn.net/sinat_32238399/article/details/145113105 【2】原文如下: 更新eclipse-24-09版本后之后,新的搜索功能(CT…...

Elasticsearch 性能测试工具 Loadgen 之 002——命令行及参数详解

上一讲,我们讲解了 Loadgen 的极简部署方式、配置文件、快速使用从 0 到 1 方式。 本讲,我们主要解读一下 Loadgen 的丰富的命令行及参数含义。 有同学可能会说,上面不是介绍很清楚了吗?但,咱们还是有必要详细中文解读…...

DRG/DIP 2.0时代下基于PostgreSQL的成本管理实践与探索(下)

五、数据处理与 ETL 流程编程实现 5.1 数据抽取与转换(ETL) 在 DRG/DIP 2.0 时代的医院成本管理中,数据抽取与转换(ETL)是将医院各个业务系统中的原始数据转化为可供成本管理分析使用的关键环节。这一过程涉及从医院 HIS 系统中抽取患者诊疗数据,并对其进行格式转换、字…...

【设计模式-行为型】状态模式

一、什么是状态模式 什么是状态模式呢,这里我举一个例子来说明,在自动挡汽车中,挡位的切换是根据驾驶条件(如车速、油门踏板位置、刹车状态等)自动完成的。这种自动切换挡位的过程可以很好地用状态模式来描述。状态模式…...

想品客老师的第六天:函数

函数基础的部分写在这里 函数声明 在js里万物皆对象,函数也可以用对象的方式定义 let func new Function("title", "console.log(title)");func(我是参数title); 也可以对函数赋值: let cms function (title) {console.log(tit…...

hedfs和hive数据迁移后校验脚本

先谈论校验方法,本人腾讯云大数据工程师。 1、hdfs的校验 这个通常就是distcp校验,hdfs通过distcp迁移到另一个集群,怎么校验你的对不对。 有人会说,默认会有校验CRC校验。我们关闭了,为什么关闭?全量迁…...

面向通感一体化的非均匀感知信号设计

文章目录 1 非均匀信号设计的背景分析1.1 基于OFDM波形的感知信号1.2 非均匀信号设计的必要性和可行性1.2 非均匀信号设计的必要性和可行性 3 通感一体化系统中的非均匀信号设计方法3.1 非均匀信号的设计流程(1)均匀感知信号设计(2&#xff0…...

React将props传递给一个组件

React 组件通讯:从单向数据流到跨层级交互的深度实践 ——基于 Props 的通讯机制解析与高阶模式探索 一、Props 的本质:不可变数据管道 React 的 props(properties)机制构建了单向数据流的核心范式。每个父组件通过 props 向子…...

头歌实训作业 算法设计与分析-贪心算法(第2关:最优装载问题)

任务描述 有一批集装箱要装上一艘载重量为C的轮船,共有n个集装箱,其中集装箱i的重量为Wi。 最优装载问题要求确定在装载体积不受限制的情况下,将尽可能多的集装箱装上轮船。 测试说明 输入和输出说明: 第1行为集装箱数目n和载重限…...

HarmonyOS基于ArkTS卡片服务

卡片服务 前言 Form Kit(卡片开发框架)提供了一种在桌面、锁屏等系统入口嵌入显示应用信息的开发框架和API,可以将应用内用户关注的重要信息或常用操作抽取到服务卡片(以下简称“卡片”)上,通过将卡片添加…...

Elasticsearch 性能测试工具 Loadgen 之 001——部署及应用详解

在现代软件开发中,性能测试是确保应用程序稳定性和响应速度的关键环节。 今天,我们就来深入了解一款国产化功能强大的 Elasticsearch 负载测试工具——INFINI Loadgen。 一、INFINI Loadgen 简介 Github地址:https://github.com/infinilabs/l…...

Python算法详解:动态规划

动态规划(Dynamic Programming,简称 DP)是计算机科学中一种高效解决问题的算法思想。它通过将复杂问题分解为更小的子问题,记录中间结果,避免重复计算,从而提升效率。本文将从动态规划的基础思想出发&#…...

python3+TensorFlow 2.x(二) 回归模型

目录 回归算法 1、线性回归 (Linear Regression) 一元线性回归举例 2、非线性回归 3、回归分类 回归算法 回归算法用于预测连续的数值输出。回归分析的目标是建立一个模型,以便根据输入特征预测目标变量,在使用 TensorFlow 2.x 实现线性回归模型时&…...

lombok 没生效 java: 找不到符号 符号: 方法 setName(java.lang.String)

今天使用lombok 添加了 Data注解 set方法却没起效 解决方法 1 给lombok 添加版本号 再maven刷新下 <dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.8</version><optional>…...

uiautomator2教程

一、简介 uiautomator2 是一个 Python 库&#xff0c;用于 Android 的 UI 自动化测试&#xff0c;底层基于 Google uiautomator。 二、安装 1、安装adb 2、pip install uiautomator2 3、设备安装 atx - agent&#xff0c;python -m uiautomator2 init 4、安装weditor&…...

旅游风景的代码项目

敦煌莫高窟&#xff1a;用代码打开千年艺术的大门 ——一个零基础也能看懂的神奇项目 前言&#xff1a;当古老艺术遇上现代代码 想象一下&#xff0c;你坐在电脑前&#xff0c;指尖轻轻一点&#xff0c;就能穿越到敦煌莫高窟——看飞天的衣袂飘飘、听千年的驼铃声声。这不是科…...

【后端开发】字节跳动青训营之性能分析工具pprof

性能分析工具pprof 一、测试程序介绍二、pprof工具安装与使用2.1 pprof工具安装2.2 pprof工具使用 资料链接&#xff1a; 项目代码链接实验指南pprof使用指南 一、测试程序介绍 package mainimport ("log""net/http"_ "net/http/pprof" // 自…...

【测试】-- 认识测试

1. 软件测试定义 软件测试就是验证软件产品特性&#xff08;功能、性能、界面、易用性等&#xff09;是否满足用户的需求。 2. 测试的岗位 软件测试开发工程师&#xff08;测开&#xff09; 开发&#xff1a;开发测试效率工具&#xff08;自动化、性能测试、覆盖率等&#x…...

浏览器hid 和蓝牙bluetooth技术区别

HID与蓝牙技术区别 引言 在前端开发中&#xff0c;与外部设备的交互越来越重要&#xff0c;尤其是在移动设备和物联网设备日益普及的今天。HID&#xff08;Human Interface Device&#xff09;和蓝牙&#xff08;Bluetooth&#xff09;是两种常用的技术&#xff0c;用于实现设备…...

PCIE模式配置

对于VU系列FPGA&#xff0c;当DMA/Bridge Subsystem for PCI Express IP配置为Bridge模式时&#xff0c;等同于K7系列中的AXI Memory Mapped To PCI Express IP。...

mysql 学习3 SQL语句--整体概述。SQL通用语法;DDL创建数据库,查看数据库,删除数据库,使用数据库;

SQL通用语法 SQL语句分类 DDL data definition language : 用来创建数据库&#xff0c;创建表&#xff0c;创建表中的字段&#xff0c;创建索引。因此成为 数据定义语言 DML data manipulation language 有了数据库和表以及字段后&#xff0c;那么我们就需要给这个表中 添加数…...

Swing使用MVC模型架构

什么是MVC模式? MVC是一组英文的缩写,其全名是Model-View-Controller,也就是“模型-视图-控制器”这三个部分组成。这三个部分任意一个部分发生变化都会引起另外两个发生变化。三者之间的关系示意图如下所示: MVC分为三个部分,所以在MVC模型中将按照此三部分分成三…...

Java定时任务实现方案(二)——ScheduledExecutorService

这篇笔记&#xff0c;我们要来介绍实现Java定时任务的第二个方案&#xff0c;使用ScheduledExecutorService&#xff0c;以及该方案的优点和缺点。 ScheduledExecutorService是Java并发包java.util.concurrent中用于执行定时任务和周期性任务的接口&#xff0c;它拓展了Executo…...

Agent群舞,在亚马逊云科技搭建数字营销多代理(Multi-Agent)(下篇)

在本系列的上篇中&#xff0c;小李哥为大家介绍了如何在亚马逊云科技上给社交数字营销场景创建AI代理的方案&#xff0c;用于社交动态的生成和对文章进行推广曝光。在本篇中小李哥将继续本系列的介绍&#xff0c;为大家介绍如何创建主代理&#xff0c;将多个子代理挂载到主代理…...

Leecode刷题C语言之收集所有金币可获得的最大积分

执行结果:通过 执行用时和内存消耗如下&#xff1a; int dfs(int node, int parent, int f, int* coins, int k, int **children, int *childCount, int **memo) {if (memo[node][f] ! -1) {return memo[node][f];}int res0 (coins[node] >> f) - k;int res1 coins[no…...

STM32_SD卡的SDIO通信_基础读写

本篇将使用CubeMXKeil, 创建一个SD卡读写的工程。 目录 一、SD卡要点速读 二、SDIO要点速读 三、SD卡座接线原理图 四、CubeMX新建工程 五、CubeMX 生成 SD卡的SDIO通信部分 六、Keil 编辑工程代码 七、实验效果 实现效果&#xff0c;如下图&#xff1a; 一、SD卡 速读…...

新手理解:Android 中 Handler 和 Thread.sleep 的区别及应用场景

新手理解&#xff1a;Android 中 Handler 和 Thread.sleep 的区别及应用场景 Handler 是啥&#xff1f;Handler 的几个核心功能&#xff1a; Thread.sleep 是啥&#xff1f;Thread.sleep 的核心特点&#xff1a; 两者的区别它们的应用场景1. Handler 的应用场景2. Thread.sleep…...

C语言-----扫雷游戏

扫雷游戏的功能说明 &#xff1a; • 使⽤控制台实现经典的扫雷游戏 • 游戏可以通过菜单实现继续玩或者退出游戏 • 扫雷的棋盘是9*9的格⼦ • 默认随机布置10个雷 • 可以排查雷&#xff1a; ◦ 如果位置不是雷&#xff0c;就显⽰周围有⼏个雷 ◦ 如果位置是雷&#xff0c;就…...

监控与调试:性能优化的利器 — ShardingSphere

在分布式数据库系统中&#xff0c;监控和调试是确保系统高效运行的关键。ShardingSphere 提供了多种监控和调试工具&#xff0c;帮助开发者实时跟踪和优化性能&#xff0c;识别瓶颈&#xff0c;进行故障排查&#xff0c;从而提升系统的稳定性和响应速度。本文将介绍如何使用 Sh…...

Kubernetes相关知识入门详解

一、Pod的滚动升级 1.服务升级的一般思路&#xff1a;停止与该服务相关的所有服务pod&#xff0c;重新拉去更新后的镜像并启动。这种方法存在一个比较现实的问题是逐步升级导致较长时间的服务不可用。 2.Kubernetes滚动升级的思路&#xff1a;通过滚动升级的命令创建新的rc&…...

多层 RNN原理以及实现

数学原理 多层 RNN 的核心思想是堆叠多个 RNN 层&#xff0c;每一层的输出作为下一层的输入&#xff0c;从而逐层提取更高层次的抽象特征。 1. 单层 RNN 的数学表示 首先&#xff0c;单层 RNN 的计算过程如下。对于一个时间步 t t t&#xff0c;单层 RNN 的隐藏状态 h t h_t…...

Unity阿里云OpenAPI 获取 Token的C#【记录】

获取Token using UnityEngine; using System; using System.Text; using System.Linq; using Newtonsoft.Json.Linq; using System.Security.Cryptography; using UnityEngine.Networking; using System.Collections.Generic; using System.Globalization; using Cysharp.Thr…...

java+vue项目部署记录

目录 前言 一、java和vue 二、部署记录 1.获取代码 2.运行前端 3.运行后端 三、其他 1.nvm 总结 前言 近期工作需要部署一套javavue前后分离的项目&#xff0c;之前都略有接触&#xff0c;但属于不及皮毛的程度&#xff0c;好在对其他开发语言、html js这些还算熟&am…...

PID 控制算法(二):C 语言实现与应用

在本文中&#xff0c;我们将用 C 语言实现一个简单的 PID 控制器&#xff0c;并通过一个示例来演示如何使用 PID 控制算法来调整系统的状态&#xff08;如温度、速度等&#xff09;。同时&#xff0c;我们也会解释每个控制参数如何影响系统的表现。 什么是 PID 控制器&#xf…...

深入MapReduce——计算模型设计

引入 通过引入篇&#xff0c;我们可以总结&#xff0c;MapReduce针对海量数据计算核心痛点的解法如下&#xff1a; 统一编程模型&#xff0c;降低用户使用门槛分而治之&#xff0c;利用了并行处理提高计算效率移动计算&#xff0c;减少硬件瓶颈的限制 优秀的设计&#xff0c…...

在Spring Boot中使用SeeEmitter类实现EventStream流式编程将实时事件推送至客户端

&#x1f604; 19年之后由于某些原因断更了三年&#xff0c;23年重新扬帆起航&#xff0c;推出更多优质博文&#xff0c;希望大家多多支持&#xff5e; &#x1f337; 古之立大事者&#xff0c;不惟有超世之才&#xff0c;亦必有坚忍不拔之志 &#x1f390; 个人CSND主页——Mi…...

Qt实践:一个简单的丝滑侧滑栏实现

Qt实践&#xff1a;一个简单的丝滑侧滑栏实现 笔者前段时间突然看到了侧滑栏&#xff0c;觉得这个抽屉式的侧滑栏非常的有趣&#xff0c;打算这里首先尝试实现一个简单的丝滑侧滑栏。 首先是上效果图 &#xff08;C&#xff0c;GIF帧率砍到毛都不剩了&#xff09; QProperty…...

基于ESP32-IDF驱动GPIO输出控制LED

基于ESP32-IDF驱动GPIO输出控制LED 文章目录 基于ESP32-IDF驱动GPIO输出控制LED一、点亮LED3.1 LED电路3.2 配置GPIO函数gpio_config()原型和头文件3.3 设置GPIO引脚电平状态函数gpio_set_level()原型和头文件3.4 代码实现并编译烧录 一、点亮LED 3.1 LED电路 可以看到&#x…...

OpenCV文字绘制支持中文显示

OpenCV版本&#xff1a;4.4 IDE&#xff1a;VS2019 功能描述 OpenCV绘制文本的函数putText()不支持中文的显示&#xff0c;网上很多方法推荐的都是使用FreeType来支持&#xff0c;FreeType是什么呢&#xff1f;FreeType的官网上有介绍 FreeType官网 https://www.freetype.or…...