【扩散模型】算法笔记:GDP——首个统一图像恢复与增强的算法Generative Diffusion Prior for Unified Image Restoration and Enhancem

【扩散模型】算法笔记:GDP——首个实现统一图像恢复的算法Generative Diffusion Prior for Unified Image Restoration and Enhancement

综述

论文题目:《Generative Diffusion Prior for Unified Image Restoration and Enhancement》

论文地址:https://arxiv.org/pdf/2304.01247.pdf

源码地址:https://github.com/Fayeben/GenerativeDiffusionPrior

论文出处:CVPR2023

针对领域:图像增强

主要思想

  图像恢复和增强任务的目的是逆转退化问题,提高图像质量,通常来说,恢复和增强任务可以分为两大类:

  • 线性逆问题:例如超分辨率重构(super-resolution)、图像去模糊(deblurring)、图像绘制(inpainting)、图像上色(colorization),其中的退化模型通常是线性且已知的;
  • 非线性或盲问题:例如低光增强(low-light enhancement)、HDR图像恢复(HDR image recovery),其中退化模型是非线性且未知的。

  对于特定的线性退化模型,图像恢复可以通过神经网络的端到端训练来解决。然而现实世界中,图像会面临多重、复杂的退化,会影响图像的生成过程。

  通过生成模型来寻求更一般的图像先验,并且在无监督的策略下处理图像恢复,其中不同退化模型的多个恢复任务可以在推理过程中解决(仅用一个模型解决多个退化任务)。例如,利用GAN在大量干净图像数据集上训练,学习了丰富的现实世界场景知识,通过GAN反演成功地解决了各种线性逆问题(论文链接);与此同时,扩散模型在GAN的基础上展示了效果非常好并且多样性较高的生成能力以及细节恢复能力。

  在本文中,作者提出了用于图像恢复和增强的GDP算法,利用训练好的扩散模型(DDPM)作为通用图像恢复和增强的有效先验,使用退化的图像作为指导。作为一个统一的图像恢复框架,GDP不仅适用于各种线性逆问题,而且第一次推广到非线性、盲目的图像恢复和增强任务。然而,解决盲目的逆问题并不容易,因为需要同时估计退化模型并且以高真度恢复干净图像。由于预训练的扩散模型具有生成先验,DDPM流形内的去噪自然地正则化了恢复图像的真实感和保真度,因此,作者采用了一种盲退化估计策略,在去噪过程中随机初始化和优化GDP退化模型的参数。此外,为了进一步提高图像的真实感和质量,作者系统地研究了一种有效的策略来指导扩散模型,在采样过程中,预训练的DDPM首先通过估计噪声 x t x_t xt,从噪声 x t x_t xt中预测出一个干净的图像 x ~ 0 \tilde{x}_0 x~0,在这个中间变量 x ~ 0 \tilde x_0 x~0上添加引导来控制DDPM的生成过程。此外,本文还提出了分层引导和基于补丁的生成策略,在这两个方法的帮助下,GDP可以恢复任意分辨率的图像,其中首先预测低分辨率的图像和退化模型,用于指导高分辨率图像的生成。

注:估计退化模型,也就是了解图像是如何被破坏的,例如去雾退化模型就是在原图上加雾。

  本文的贡献:

  • GDP是第一个统一的图像恢复算法,可以有效地使用在ImageNet上预训练的单个无条件DDPM,以无监督的方式为统一的图像恢复和增强产生多样化和高保真的输出;
  • GDP能够优化随机初始化的退化模型,从而形成一个强大的框架,用于解决任何盲目的图像恢复问题;
  • 为了实现任意大小的图像生成,作者提出了分层引导和基于patch的方法,极大地促进了GDP在自然图像生成方面的增强
  • 不同于传统的引导方式,GDP直接预测每一步给定的噪声图像的临时输出,并利用GDP直接指导下一步的图像生成。

在这里插入图片描述

方法

扩散模型

  扩散模型主要将复杂的数据分布 x 0 ∼ p d a t a x_0\sim p_{data} x0pdata逐渐添加噪声,转为简单的噪声分布 x T ∼ p l a t e n t = N ( 0 , I ) x_T\sim p_{latent}=N(0,I) xTplatent=N(0,I),并且从噪声中恢复数据,其中 N N N为高斯分布,DDPM主要包括扩散过程和恢复过程。

  扩散过程是一个马尔科夫链,逐步破坏原始图像数据 x 0 x_0 x0,直到他在 T T T个扩散时间步长变为高斯噪声,对应会采样得到 T T T个破坏程度不同的数据 x 1 , … , x T x_1,\dots,x_T x1,,xT,扩散过程的定义为高斯迁移:
q ( x 1 , … , x T ∣ x 0 ) = Π t = 1 T q ( x t ∣ x t − 1 ) q(x_1,\dots,x_T|x_0)=\Pi^T_{t=1}q(x_t|x_{t-1}) q(x1,,xTx0)=Πt=1Tq(xtxt1)
其中 t t t表示扩散步数, q ( x t ∣ x t − 1 ) = N ( x t ; 1 − β t x t − 1 , β t I ) q(x_t|x_{t-1})=N(x_t;\sqrt{1-\beta_t}x_{t-1},\beta_tI) q(xtxt1)=N(xt;1βt xt1,βtI) β t \beta_t βt为固定的或可学习的方差表,任何步长 x t x_t xt都可以通过下面的公式直接从 x 0 x_0 x0采样得到:
x t = α ‾ t x 0 + 1 − α ‾ t ϵ x_t=\sqrt{\overline \alpha_t}x_0+\sqrt{1-\overline{\alpha}_t}\epsilon xt=αt x0+1αt ϵ
其中 ϵ ∼ N ( 0 , 1 ) \epsilon\sim N(0,1) ϵN(0,1) α t = 1 − β t \alpha_t=1-\beta_t αt=1βt α ‾ t = Π i = 1 t α i \overline\alpha_t=\Pi^t_{i=1}\alpha_i αt=Πi=1tαi。扩散模型论文中也曾指出, q ( x t ∣ x 0 ) = N ( x t ; α ‾ t x 0 , ( 1 − α ‾ t ) I ) q(x_t|x_0)=N(x_t;\sqrt{\overline \alpha_t}x_0,(1-\overline \alpha_t)I) q(xtx0)=N(xt;αt x0,(1αt)I),随着 t t t的增大(慢慢变成 T T T), α ‾ t \overline\alpha_t αt逐渐变为0,同时 q ( x t ∣ x 0 ) q(x_t|x_0) q(xtx0)逐渐趋向于高斯分布,即逐渐变为完全的噪声。

  反向过程同样也是一个马尔科夫链,迭代地对一个高斯噪声去噪,得到一幅清晰的图像。从噪声 x T ∼ N ( 0 , I ) x_T\sim N(0,I) xTN(0,I)到清晰图像 x 0 x_0 x0的过程可以定义为:
p θ ( x 0 , … , x T − 1 ∣ x t ) = Π t = 1 T p θ ( x t − 1 ∣ x t ) p θ ( x t − 1 ∣ x t ) = N ( x t − 1 ; μ θ ( x t , t ) , ∑ θ I ) p_\theta(x_0,\dots,x_{T-1}|x_t)=\Pi^T_{t=1}p_\theta(x_{t-1}|x_t)\\ p_\theta(x_{t-1}|x_t)=N(x_{t-1};\mu_\theta(x_t,t),\sum_\theta I) pθ(x0,,xT1xt)=Πt=1Tpθ(xt1xt)pθ(xt1xt)=N(xt1;μθ(xt,t),θI)
其中 μ θ ( x t , t ) \mu_\theta(x_t,t) μθ(xt,t)是我们想要通过神经网络 θ \theta θ去估计的目标,方差 ∑ θ \sum_\theta θ可以是一个随着时间 t t t(采样步)变化的常数,也可以是一个可学习的参数, μ θ \mu_\theta μθ可以通过如下公式得到:
μ θ ( x t , t ) = 1 α t ( x t , − β t 1 − α ‾ t ϵ θ ( x t , t ) ) \mu_\theta(x_t,t)=\frac{1}{\sqrt{\alpha_t}}(x_t,-\frac{\beta_t}{\sqrt{1-\overline\alpha_t}}\epsilon_\theta(x_t,t)) μθ(xt,t)=αt 1(xt,1αt βtϵθ(xt,t))
  在实践中,通常从 x t x_t xt中预测 x ~ 0 \tilde x_0 x~0,之后使用 x ~ 0 \tilde x_0 x~0 x t x_t xt x t − 1 x_{t-1} xt1进行采样:
x ~ 0 = x t α ‾ t − 1 − α ‾ t ϵ θ ( x t , t ) α ‾ t \tilde x_0=\frac{x_t}{\sqrt{\overline \alpha_t}}-\frac{\sqrt{1-\overline \alpha_t}\epsilon_\theta(x_t,t)}{\sqrt{\overline \alpha_t}} x~0=αt xtαt 1αt ϵθ(xt,t)
q ( x t − 1 ∣ x t , x ~ 0 ) = N ( x t − 1 ; μ ~ t ( x t , x ~ 0 ) , β t I ) q(x_{t-1}|x_t,\tilde x_0)=N(x_{t-1};\tilde\mu_t(x_t,\tilde x_0),\beta_t I) q(xt1xt,x~0)=N(xt1;μ~t(xt,x~0),βtI)

  其中 μ ~ t ( x t , x ~ 0 ) = α ‾ t − 1 β t 1 − α t ‾ + α t ( 1 − α t − 1 ‾ ) 1 − α ‾ t x t \tilde \mu_t(x_t,\tilde x_0)=\frac{\sqrt{\overline \alpha_{t-1}}\beta_t}{1-\overline {\alpha_t}}+\frac{\sqrt{\alpha_t}(1-\overline{\alpha_{t-1}})}{1-\overline \alpha_t}x_t μ~t(xt,x~0)=1αtαt1 βt+1αtαt (1αt1)xt β ~ t = 1 − α ‾ t − 1 1 − α ‾ t β t \tilde \beta_t=\frac{1-\overline \alpha_{t-1}}{1-\overline \alpha_t}\beta_t β~t=1αt1αt1βt

生成扩散先验模型(GDP)

  在本文中,作者的目标就是利用训练好的扩散模型作为统一图像恢复和增强的有效先验,特别是处理种类繁多的图像退化问题。假设退化图像 y y y通过退化模型 D D D得到: y = D ( x ) y=D(x) y=D(x),其中 x x x表示原始图像。作者使用存储在某个先验中的 x x x统计量,在 x x x的空间中搜索最匹配 y y y x x x(也就是找出 y y y对应的清晰图像 x x x),在本文中,作者将重点研究放在更通用的图像先验,即在大规模自然图像上训练的扩散模型用于图像合成,扩散模型的反向去噪过程可以退化为以 y y y为条件的图像生成过程,具体来说,反向去噪分布 p θ ( x t − 1 ∣ x t ) p_\theta(x_{t-1}|x_t) pθ(xt1xt),可以用于构成条件分布 p θ ( x t − 1 ∣ x t , y ) p_\theta(x_{t-1}|x_t,y) pθ(xt1xt,y)
log ⁡ p θ ( x t − 1 ∣ x t , y ) = log ⁡ ( p θ ( x t − 1 ∣ x t ) p ( y ∣ x t ) ) + K 1 ≈ log ⁡ p ( r ) + K 2 \log{p_\theta(x_{t-1}|x_t,y)}=\log{(p_\theta(x_{t-1}|x_t)p(y|x_t))}+K_1\approx \log{p(r)} + K_2 logpθ(xt1xt,y)=log(pθ(xt1xt)p(yxt))+K1logp(r)+K2
其中, r ∼ N ( r ; μ θ ( x t , t ) + ∑ g , ∑ ) r\sim N(r;\mu_\theta(x_t,t)+\sum_g,\sum) rN(r;μθ(xt,t)+g,) g = ∇ x t log ⁡ p ( y ∣ x t ) g=\nabla x_t\log{p(y|x_t)} g=xtlogp(yxt) ∑ = ∑ θ ( x t ) \sum=\sum_\theta(x_t) =θ(xt) K 1 K_1 K1 K 2 K_2 K2可以视为常数, p θ ( y ∣ x t ) p_\theta(y|x_t) pθ(yxt)可以看作是 x t x_t xt被降噪后得到质量与 y y y一致的图像的概率,作者提出了一个启发式近似:
p ( y ∣ x t ) = 1 Z exp ⁡ ( − [ s L ( D ( x t ) , y ) + λ Q ( x t ) ] ) p(y|x_t)=\frac1Z\exp{(-[sL(D(x_t),y)+\lambda Q(x_t)])} p(yxt)=Z1exp([sL(D(xt),y)+λQ(xt)])
其中 L L L表示图像距离度量, Z Z Z为归一化因子, s s s为一个控制指导幅度的比例因子。直观地来说,这一定义鼓励 x t x_t xt与损坏的图像 y y y一致,从而让 p ( y ∣ x t ) p(y|x_t) p(yxt)获得较高的概率, Q Q Q为可选的质量增强损失,用于增强GDP的灵活性,可以用来控制某些属性(如亮度)或增强去噪图像的质量, λ \lambda λ是调节图像质量的比例因子,两边的梯度计算可以表示为:
log ⁡ p ( y ∣ x t ) = − log ⁡ Z − s L ( D ( x t ) , y ) − λ Q ( x t ) ∇ x t log ⁡ p ( y ∣ x t ) = − s ∇ x t L ( D ( x t ) , y ) − λ ∇ x t Q ( x t ) \log{p(y|x_t)}=-\log Z-sL(D(x_t),y)-\lambda Q(x_t)\\ \nabla_{x_t}\log{p(y|x_t)}=-s\nabla_{x_t}L(D(x_t),y)-\lambda\nabla_{x_t}Q(x_t) logp(yxt)=logZsL(D(xt),y)λQ(xt)xtlogp(yxt)=sxtL(D(xt),y)λxtQ(xt)
其中距离度量 L L L和可选的质量损失 Q Q Q会在后文中介绍。

在这里插入图片描述

注:扩散模型的推理过程就是逐步去噪的过程,逐步将完全的高斯噪声变为清晰图像,在这里,作者让退化图像 y y y作为指导,让高斯噪声在去噪的过程中逐步往 y y y图像所指导的分布上去靠拢,由于预训练的扩散模型具有清晰图像的先验知识,因此可以天然地生成 y y y对应的清晰图像。至于怎么指导扩散模型的推理过程,就是后面需要讨论的内容了。

  通过利用 − ( s ∑ ∇ x t L ( D ( x t ) , y ) + λ ∑ ∇ x t Q ( x t ) ) -(s\sum\nabla_{x_t}L(D(x_t),y)+\lambda\sum\nabla_{x_t}Q(x_t)) (sxtL(D(xt),y)+λxtQ(xt)),对无条件分布平均值进行平移,可以近似地得到条件迁移 p θ ( x t − 1 ∣ x t , y ) p_{\theta}(x_{t-1}|x_t,y) pθ(xt1xt,y)和条件迁移 p θ ( x t − 1 ∣ x t ) p_\theta(x_{t-1}|x_t) pθ(xt1xt)

注:

  • 这里使用损失所产生的梯度来对图像分布做迁移,也就是将随机生成的图像分布一步步迁移到 y y y对应清晰图像的分布;
  • 作者发现添加指导的方式和方差 ∑ \sum 的组合会对重构图像产生负面影响,因此后面删去了方差的作用。

单一图像指导

  超分重构、绘图、上色、去模糊以及光照任务都使用单图像引导。

  方差 ∑ \sum 对指导的影响:在以往的条件扩散模型中,对采样过程中的均值位移采用方差 ∑ \sum ,但是在作者的工作中,作者发现方差 ∑ \sum 可能会对实验中生成的图像质量产生负面影响。因此,本文在引导去噪的过程中除去方差,来提高性能,引导去噪的过程可以通过可变尺度 s ^ \hat s s^来实现。

  关于 x t x_t xt的指导:首先,最简单的方法就是直接在 x t x_t xt上应用指导,也就是设计损失,让退化后的 x t x_t xt趋向于 y y y(直接拉进 D ( x t ) D(x_t) D(xt) y y y),流程图如上图b所示,过程如下所示:

在这里插入图片描述

  但是这样做往往效果并不是很好, x t x_t xt是一个具有特定噪声大小的噪声图像,但 y y y通常是由没有噪声的清晰图像退化而来,对带噪图像 x t x_t xt直接执行退化的话,算法难以知道所生成的退化图像是由退化模型 D D D造成的还是原始图像本身带的,因此难以衡量 D ( x t ) D(x_t) D(xt) y y y之间的距离,直接用 M S E MSE MSE损失或者感知损失强行拉近的话,将使 x t x_t xt偏离原来的噪声轨迹,会导致所生成的图像质量低下。

注:因为要评估退化模型 D D D,所以要在原来的扩散流程上引入一个新的分支,用于评估退化模型。

  关于 x ~ 0 \tilde x_0 x~0的指导:为了解决上述问题,作者系统地研究了应用于 x ~ 0 \tilde x_0 x~0的条件信号。在采样过程中,预训练的DDPM模型通常先估计 x t x_t xt中的噪声(利用 x t x_t xt和时间步 t t t预测噪声源),从噪声图像 x t x_t xt预测一张干净图像 x ~ 0 \tilde x_0 x~0(相当于一个中间态)。之后利用预测的 x ~ 0 \tilde x_0 x~0 y y y计算损失,利用损失优化退化模型 D D D,并且再利用损失产生的梯度生成图像“引导”(guidance),最后让图像“引导”与 x t x_t xt一起对下一步潜在的 x t − 1 x_{t-1} xt1进行采样,具体过程如下表所示:

在这里插入图片描述

  核心思想就是在中间变量 x ~ 0 \tilde x_0 x~0上添加引导来控制DDPM的推理过程,通常是利用梯度来逐步做引导,很类似梯度下降法中的操作,流程图如下图所示:

在这里插入图片描述

  已知的退化:这类任务通常是退化函数已知的任务,例如:去噪和超分辨率重构可以表示为 y = ( x ⊗ k ) ↓ s y=(x\otimes k)\downarrow_s y=(xk)s,假设低分辨率图像 L R LR LR通过如下过程获得:首先将高分辨率图像与高斯核(或点扩散函数) k k k做卷积得到模糊图像 x ⊗ k x\otimes k xk;之后对模糊图像执行比例因子为 s s s的下采样操作 ↓ s \downarrow_s s。图像修复(inpainting)的目的是恢复图像的缺失像素,相应的退化变化是将原始图像与二值掩模 m m m相乘: φ ( x ) = x ⊙ m \varphi(x)=x\odot m φ(x)=xm,其中 ⊙ \odot 表示哈达玛积。图像上色任务目的是将灰度图像 y ∈ R H × W y\in R^{H\times W} yRH×W还原为具有RGB三色通道的彩色图像 x ∈ R 3 × H × W x\in R^{3\times H\times W} xR3×H×W,为了从彩色图像 x x x得到 y y y,退化变化 φ \varphi φ只是保留 x x x亮度的灰度变换。

  未知的退化:在真实世界中,很多图像都经历非常复杂的图像退化过程,其中退化模型或者退化模型的参数是未知的。在这种情况下,需要同时估计原始图像和退化模型参数,例如弱光增强任务和HDR图像恢复任务可以视为具有未知退化模型的任务。在这里,作者设计了一个简单,并且有效的降解模型来模拟复杂的降解:
y = f x + M y=fx+M y=fx+M
其中光因子 f f f为标量,光掩码为与 x x x相同维数的向量, f f f为退化模型的未知参数,我们之所以可以使用单一的退化模型就是因为只要 f f f M M M大小相同,任意一对损坏图像和对应的高质量图像之间的变换都可以被 f f f M M M捕获。如果他没有相同的大小,则可以先将 x x x的大小调整为与 y y y相同的大小,之后再应用这个变换。注意:这种退化模型通常是非线性的,因为 f f f M M M的构建依赖于 x x x y y y之间的关系,我们需要对每个单独的损坏图像估计 f f f M M M,首先随机初始化它,之后在DDPM的推理过程中同步优化它们(也就是优化预设的退化模型 D D D),进一步估计出 f f f M M M。(如上面的算法2所示)

扩展版本

  多图指导:部分任务需要根据多个输入来重建恢复图像,例如HDR任务中,根据曝光度为高、中、低的三组图像来重建一张HDR图像。对此,作者额外扩展了之前的单图指导算法,在逆向过程中,有三张损坏的图像来引导生成,从而随机初始化和优化3张LDR图像的三对盲参数。

在这里插入图片描述

  恢复任意尺寸图像:预训练的扩散模型只能输出固定大小的图像,而各种图像恢复任务的图像大小是不同的,本文采用基于patch的方法来解决这一问题,将原始图像划分成同样大小的patch,之后分别做恢复。通过这种基于补丁策略的优点可以将GDP算法扩展到恢复任意分辨率的图像,从而促进GDP的通用性。

在这里插入图片描述

注:一张图裁剪成不同的patch,分别做恢复,这也是导致算法推理过程很慢的一个重要原因。

损失函数

  在GDP中,损失函数主要用于优化退化模型 D D D,同时损失产生的梯度用于对扩散模型的推理过程进行指导(guidance),一旦损失很大,说明扩散模型推理得到的图像分布与 y y y差异比较大,需要较大的引导校正过来,因此可以用梯度来指导生成图像的迁跃过程。推理到最后,退化模型可以很好地模拟当前输入图像的退化现象,同时扩散模型在推理过程可以逐步生成 y y y对应的清晰图像。

  损失可以主要分为重构损失和质量增强损失两大部分,恢复损失用于恢复条件信号中包含的信息,质量增强损失用于提高最终输出的质量。

  恢复损失:恢复损失可以是MSE、SSIM损失、感知损失或者其他用于图像恢复的损失,在这里,作者只采用MSE损失作为恢复损失。

  质量增强损失
  1)曝光控制损失:用于控制微光图像增强的曝光水平,提高GDP的通用性:
L e x p = 1 U ∑ k = 1 U ∣ R k − E ∣ L_{exp}=\frac1U\sum^U_{k=1}|R_k-E| Lexp=U1k=1URkE
其中 U U U表示大小为 8 × 8 8\times8 8×8的不重叠区域的个数, R R R为重构图像中局部区域的平均强度数值(也就是局部的均值,用平均池化实现), E E E设置为RGB色彩空间中的灰度级,实验中可以通过调节E来控制亮度。

  2)颜色恒定损失:利用颜色恒定性损失来校正恢复图像中潜在的颜色偏差,并且在着色任务中连接三个调整通道之间的关系,表示为:
L c o l = ∑ ∀ ( m , n ) ∈ ϵ ( Y m − Y n ) 2 , ϵ = { ( R , G ) , ( R , B ) , ( G , B ) } L_{col}=\sum_{\forall(m,n)\in\epsilon}(Y^m-Y^n)^2,\epsilon=\{(R,G),(R,B),(G,B)\} Lcol=(m,n)ϵ(YmYn)2,ϵ={(R,G),(R,B),(G,B)}
其中 Y m Y^m Ym表示恢复图像中 m m m个通道的平均强度值, ( m , n ) (m,n) (m,n)为一对通道。

  3)照明平滑损失:为了保持所优化的光照掩模M中相邻像素之间的单调关系,对每个光照方差M使用一个照明平滑损失:
L t v M = 1 N ∑ n = 1 N ∑ c ∈ ζ ( ∣ ∇ h M n c ∣ 2 + ∣ ∇ v M n c ∣ 2 ) , ζ = { R , G , B } L_{tv_M}=\frac1N\sum^N_{n=1}\sum_{c\in\zeta}(|\nabla_hM^c_n|^2+|\nabla_vM^c_n|^2),\zeta=\{R,G,B\} LtvM=N1n=1Ncζ(hMnc2+vMnc2),ζ={R,G,B}
其中 N N N为迭代次数, ∇ h \nabla_h h ∇ v \nabla_v v分别表示水平和垂直梯度操作。

  损失并不一定是通用的,需要根据具体任务做筛选,具体而言,图像着色任务利用颜色恒定损失来获得更自然的颜色,同时,弱光增强需要失去色恒性(也就是增强前后的颜色不一致);此外,弱光增强任务利用照明平滑度损失使估计的光掩模更平滑,曝光控制损失使我们能够手动控制恢复图像的亮度。

注:以上仅是笔者个人见解,若有问题,欢迎指正。

### 使用扩散模型进行图像增强的方法 #### 方法概述 扩散模型作为一种强大的生成模型,在图像处理领域展现了卓越的能力。对于图像增强任务,扩散模型可以通过逐步去除噪声并恢复细节来改善低质量图像的质量[^1]。 #### 技术原理 具体来说,扩散模型采用了一种逆向过程来进行图像修复或增强: - **前向扩散阶段**:在这个过程中,原始图像是逐渐被加入高斯白噪音的过程所破坏; - **反向采样阶段**:这是实际用于重建清晰图像的关键部分。该网络学习预测每一步中的噪声成分,并尝试将其移除以接近未损坏的状态。此步骤会反复执行直到获得满意的输出为止[^3]。 #### 实现方法 以下是利用Python编程语言结合PyTorch框架实现基于扩散模型的简单图像增强流程的一个例子: ```python import torch from torchvision import transforms as T from diffusers import UNet2DModel, DDIMScheduler # 假设使用DDIM调度器 def enhance_image(image_path): transform = T.Compose([ T.Resize((512, 512)), T.ToTensor(), ]) image = Image.open(image_path).convert('RGB') noisy_image = add_noise(transform(image)) # 添加人工制造的噪声 model = UNet2DModel.from_pretrained("path_to_model") # 加载预训练好的UNet模型 scheduler = DDIMScheduler(beta_start=0.00085, beta_end=0.012) with torch.no_grad(): timesteps = list(range(0, scheduler.config.num_train_timesteps)) for i in reversed(timesteps): # 反向迭代时间步数 noise_pred = model(noisy_image.unsqueeze(0), timestep=i)['sample'] clean_img = scheduler.step( noise_pred.squeeze(), i, noisy_image )['prev_sample'] noisy_image = clean_img return clean_img.cpu().numpy() ``` 这段代码展示了如何加载一张图片、对其进行加噪处理以及应用一个预先训练过的U-Net架构下的扩散模型来进行去噪操作,最终返回经过增强后的图像数组形式的结果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

视觉萌新、

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

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

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

打赏作者

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

抵扣说明:

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

余额充值