Plug-and-Play Image Restoration with Deep Denoiser Prior
论文地址:https://arxiv.org/abs/2008.13751
代码地址:https://github.com/cszn/DPIR
目录
Abstract
目标:突破即插即用图像恢复的上限。
主导策略:降噪器隐式地作为基于模型的方法的图像先验。
目前缺乏合适的先验降噪器,阻碍了即插即用图像恢复的性能。
本文思路:
通过训练一个灵活高效的CNN去噪器设置基准深度去噪先验,将它作为模块插入基于HQS的迭代算法,从而可以解决各种图像复原问题。
图像退化模型:
𝐲 = 𝒯 ( 𝐱 ) + 𝐧 𝐲=𝒯(𝐱)+𝐧 y=T(x)+n
其中,𝒯为噪声不相关的退化操作,𝐧为标准差为𝜎的加性高斯白噪声。
- 当𝒯为恒等操作,IR任务对应去噪问题
- 当𝒯为二维卷积, IR任务对应去模糊问题
- 当𝒯为卷积下采样复合, IR任务对应超分辨问题
- 当𝒯为彩色滤波阵列(CFA)masking操作, IR任务对应彩图去马赛克问题
Introduction
即插即用IR算法思路:
借助变量分裂算法(ADMM/HQS),分别处理数据项(保真项)和先验项(正则项),先验项只对应一个去噪子问题。
目前即插即用IR算法缺点:
- 采用不同降噪器去覆盖一个广泛的噪声级,或者使用在一个特定的噪声级上训练的单个降噪器;
- 深度降噪器不够强大,性能受限的原因不清楚;
- 对工作机制缺乏深入的实证理解。
本文思路:
- 受到FFDNet的启发,将噪声级别图作为输入,通过单个模型处理广泛的噪声级别;
- 利用ResNet和U-Net提高效率;
- 提出周期性几何自集成策略,不增加额外的计算负担的同时提高性能。
本文贡献:
- 训练了一个灵活高效的深度CNN去噪器,优于最好的深度高斯降噪模块;
- 对于基于HQS的即插即用IR在参数设置、中间结果和经验收敛方面进行了彻底分析;
- 在去模糊、超分辨和去马赛克任务中表现非常好。
Method
半二次方分裂法(HQS):
将正则项中的原始变量进行变量替换,增加拉格朗日乘子项和二次惩罚项,从而去耦合。
x ^ = a r g m i n x 1 2 σ 2 ∣ ∣ y − 𝒯 ( x ) ∣ ∣ 2 + λ R ( x ) \hat{x} = argmin{_x}{\frac{1}{2\sigma^2}\lvert\lvert{y-𝒯(x)}\rvert\rvert^2+\lambda R(x)} x^=argminx2σ21∣∣y−T(x)∣∣2+λR(x)
注:对比IRCNN中的部分在数据项部分增加了一个 σ 2 \sigma^2 σ2的分母,对应的是输入的噪声级别图的噪声水平 σ \sigma σ。
引入辅助变量z,将惩罚项中的x替换成z:
L μ ( x , z ) = 1 2 σ 2 ∣ ∣ y − 𝒯 ( x ) ∣ ∣ 2 + λ R ( z ) + μ 2 ∣ ∣ z − x ∣ ∣ 2 L_{\mu}(x,z)=\frac{1}{2\sigma^2}\lvert\lvert{y-𝒯(x)}\rvert\rvert^2+\lambda R(z)+\frac{\mu}{2}\lvert\lvert{z-x}\rvert\rvert^2 Lμ(x,z)=2σ21∣∣y−T(x)∣∣2+λR(z)+2μ∣∣z−x∣∣2
迭代求解:
x k = a r g m i n x ∣ ∣ y − 𝒯 ( x ) ∣ ∣ 2 + μ σ 2 ∣ ∣ x − z k − 1 ∣ ∣ 2 x_k=argmin_x{\lvert\lvert{y-𝒯(x)}\rvert\rvert^2}+\mu\sigma^2\lvert\lvert{x-z_{k-1}}\rvert\rvert^2 xk=argminx∣∣y−T(x)∣∣2+μσ2∣∣x−zk−1∣∣2
z k = a r g m i n z 1 2 ( λ μ ) 2 ∣ ∣ z − x k ∣ ∣ 2 + R ( z ) z_k=argmin_z{\frac{1}{2(\sqrt{\frac{\lambda}{\mu}})^2}\lvert\lvert{z-x_k}\rvert\rvert^2+R(z)} zk=argminz2(μλ)21∣∣z−xk∣∣2+R(z)
将 α k ≜ λ σ 2 / σ k 2 α_k≜λσ^2/σ_k^2 αk≜λσ2/σk2代入公式:
x k = a r g m i n x ∣ ∣ y − 𝒯 ( x ) ∣ ∣ 2 + α k ∣ ∣ x − z k − 1 ∣ ∣ 2 x_k=argmin_x{\lvert\lvert{y-𝒯(x)}\rvert\rvert^2}+\alpha_k\lvert\lvert{x-z_{k-1}}\rvert\rvert^2 xk=argminx∣∣y−T(x)∣∣2+αk∣∣x−zk−1∣∣2
z k = a r g m i n z 1 2 ( λ μ ) 2 ∣ ∣ z − x k ∣ ∣ 2 + R ( z ) z_k=argmin_z{\frac{1}{2(\sqrt{\frac{\lambda}{\mu}})^2}\lvert\lvert{z-x_k}\rvert\rvert^2+R(z)} zk=argminz2(μλ)21∣∣z−xk∣∣2+R(z)重写成对应于通过噪声水平为 λ μ \frac{\lambda}{\mu} μλ的高斯降噪器对图像 x k x_k xk进行去噪:
z k = D e n o i s e ( x k , λ μ ) z_k=Denoise(x_k,\sqrt{\frac{\lambda}{\mu}}) zk=Denoise(xk,μλ)
CNN Denoiser:
像FFDNet一样将噪声级别图和噪声图像输入。
网络细节:
具有四个尺度U-Net结构网络
- Strided conv 跨步卷积 下采样
- Transpose conv 转置卷积 上采样
- 每个尺度的SConv和TConv之间有一个恒等跳过连接
- Conv层(Conv/SConv/TConv)都没有激活函数
- 每个残差块仅包含一个ReLU
- 所有层都没有偏置
周期几何自集成策略:
基于翻转和旋转几何自集成:
通过翻转和旋转对输入图像进行变换生成八幅图像,将图像送入模型得到相应恢复图像,最终获得逆变换后的平均结果。
周期几何自集成:
每连续八次迭代应用一次,但不进行最后的平均操作。
注:源代码中实现过程为迭代次数i%8为零时输出原图像,否则从1~7有对图像进行不同的旋转翻转等处理。
DPIR算法:
算法步骤:
输入:深度去噪先验模型,退化图像y,退化操作𝒯,图像噪声级𝜎,第k次迭代的去噪先验模型噪声水平𝜎𝑘,平衡参数𝜆。
输出:恢复图像𝑧𝑘
1由y初始化𝑧0,预计算
α
k
≜
λ
σ
2
/
σ
k
2
α_k≜λσ^2/σ_k^2
αk≜λσ2/σk2
2 k由1到K:
x
k
=
a
r
g
m
i
n
x
∣
∣
y
−
𝒯
(
x
)
∣
∣
2
+
α
k
∣
∣
x
−
z
k
−
1
∣
∣
2
x_k=argmin_x{\lvert\lvert{y-𝒯(x)}\rvert\rvert^2}+\alpha_k\lvert\lvert{x-z_{k-1}}\rvert\rvert^2
xk=argminx∣∣y−T(x)∣∣2+αk∣∣x−zk−1∣∣2
z
k
=
D
e
n
o
i
s
e
(
x
k
,
λ
μ
)
z_k=Denoise(x_k,\sqrt{\frac{\lambda}{\mu}})
zk=Denoise(xk,μλ)
(使用DRUNet去噪器降噪,应用周期几何自集成策略)
一些设置:
训练设置:
数据集选择:400 BSD images,4744 Waterloo Exploration Database,900 DIV2K dataset,2750 Flick2K dataset。
Noise level map是和噪声图像一样大的均匀填充噪声水平𝜎的图。训练时从[0,50]中随机选择噪声级进行训练。
使用Adam优化器最小化去噪图像与groundtruth之间的L1 Loss。(比L2 Loss更稳定)
参数设置:
可调参数:惩罚参数𝜇,正则化参数λ,迭代次数K。
K由用户指定,噪声级
σ
k
\sigma_k
σk范围为[0,50],
μ
k
\mu_k
μk逐步增大,
μ
k
=
λ
/
(
σ
k
2
)
\mu_k=\lambda/(\sigma_k^2)
μk=λ/(σk2),
对验证集进行网格搜索选择最佳λ,范围在[0.19,0.55]。
注: σ k \sigma_k σk,作者已经设置好 初始 σ 0 \sigma_0 σ0为49,然后逐步下降到0,具体情况在fig5 和 table5。
针对不同任务的封闭解: