(SRMD)CVPR-2018:Learning a Single Convolutional Super-Resolution Network for Multiple Degradations

学习用于多种退化的单个的卷积超分辨率网络

代码地址:GitHub - cszn/SRMD: Learning a Single Convolutional Super-Resolution Network for Multiple Degradations (CVPR, 2018) (Matlab)

摘要

之前存在的问题:

(1)现有的基于CNN的SISR方法大多假设LR图像是从HR图像双三次下采样的,因此,当真实退化不符合此假设时,会导致性能差。

(2)他们缺乏通过使用单一模型处理多种退化的可伸缩性。

因此,提出了一个具有dimensionality stretching strategy(维度扩展策略)的通用框架,使单个卷积超分辨率网络能够考虑SISR退化过程中的两个关键因素:模糊核和噪声级,作为输入。因此,SR可以处理多个甚至空间变化的退化。

一、介绍

在典型的SISR框架中,LR图像y被建模为以下退化过程的输出: 

n通常是标准偏差(噪声级)σ的加性高斯白噪声。

 本文的重点:

(i)能否学习单个模型来有效处理多个甚至空间变化的退化?

(ii)是否可以使用合成数据来训练实用性强的模型?

对于第一个问题:作者认为可以通过将LR输入、模糊核和噪声级作为CNN的输入来解决这个问题,但是它们的维数不匹配使得设计单个卷积超分辨率网络变得困难。因此引入了一种维度拉伸策略,该策略有助于网络处理关于模糊核和噪声的多个甚至空间变化的退化。

对于第二个问题:对具有不同模糊核和噪声级组合的大量退化类型进行采样以覆盖退化空间。在实际场景中,即使退化更复杂(例如,噪声为非噪声),也可以选择最佳拟合的退化模型,而不是双三次退化,以此产生更好的结果。

主要贡献

(1)提出了一个简单但有效且可扩展的深度CNN框架,适用于多种甚至空间变化的退化,从而朝着开发实用的基于CNN的SR的实际应用迈出了实质性的一步。

(2)提出了一种新的维度拉伸策略来解决LR输入图像、模糊核和噪声级之间的维度不匹配问题。该策略也可以扩展到其他任务,如去模糊。

(3)从合成训练数据学习的卷积超分辨率网络不仅可以在合成LR图像上产生与最先进的SISR方法竞争的结果,而且在真实LR图像上产生视觉上合理的结果。

二、方法

2.1 Degradation Model

退化模型:

n通常为加性高斯白噪声(AWGN)。

 Blur kernel

最流行的选择是由标准偏差或核宽度参数化的各向同性高斯模糊核

经验和理论分析表明,精确模糊核的影响比复杂图像先验知识的影响大得多。具体来说,当假定的核比真实核更平滑时,恢复的图像会过度平滑。另一方面,当假定的内核比真实内核更尖锐时,就会出现高频振铃伪影。

 Noise

在不去除噪声的情况下直接超分辨噪声输入会放大不需要的噪声,导致视觉上不愉快的结果。最简单的方法是先去噪,然后提高分辨率。但是去噪预处理步骤往往会丢失细节信息,并会降低后续的超分辨率性能。因此,非常希望联合执行去噪和超分辨率。

Downsampler

本文考虑了直接下采样和双三次下采样器,因为当k是delta核且噪声水平为零时,公式(1) 转化为双三次退化模型。需要指出的是,与一般退化模型中的模糊核和噪声不同,下采样点是固定的。

2.2 A Perspective from MAP Framework

MAP:maximum a posteriori (最大后验估计)

可以通过解决以下MAP问题来估计LR图像y的HR对应物:

 第一项是保真项,第二项为正则项。

公式(3)传达了两点:

(i)估计解不仅应符合退化过程,而且还应具有干净的HR图像所需的特性;

(ii)\widehat{x}是LR图像y、模糊核k、噪声级σ和权衡参数λ的函数。

因此,(non-blind)SISR的MAP解可以表示为:

 由于数据保真度项对应于退化过程,因此退化的精确建模对于SISR的成功起着关键作用。

 由于λ可以被δ吸收,所以(4)可以重写为:

 从MAP框架的观点来看,SISR的目标是学习映射函数(4),而不是\widehat{x}=F(y;Θ)。然而,通过CNN直接对(4)建模并非易事。原因在于三个输入y、k和σ具有不同的维数。在下一小节中,将提出一个简单的维度拉伸策略来解决这个问题。

 2.3 Dimensionality Stretching

提出的维度拉伸策略如下图:

 假设输入由大小为p×p的模糊核、噪声级σ和大小为W×H×C的LR图像组成,其中C表示通道数。模糊核首先矢量化为大小为p^2×1的向量,然后通过主成分分析(PCA)技术降维到t维空间。然后,将这个t维向量和噪声级串连(用v表示,t+1维),拉伸成大小为W×H×(t+1)的退化映射,其中第i个映射的所有元素都是vi。

这个退化映射可以与LR图像串联,使CNN能够处理三个输入。考虑到退化映射可能是非均匀的,这种简单的策略可以很容易地用于处理空间变化的退化。

2.4 提出的网络

 将串联的LR图像与退化映射作为输入。

 采用3×3卷积层级联来执行非线性映射。每一层由三种类型的操作组成:卷积(Conv)、校正线性单元(ReLU)和批量归一化(BN)。

具体来说,“Conv+BN+ReLU”用于每个卷积层,但最后一个卷积层由单个“Conv”操作组成。最后,在亚像素卷积层之后是最后一个卷积层,以将大小为W×H×s^2C的多个HR子图像转换为大小为sW×sH×C的单个HR图像。

对于所有比例因子2、3和4,卷积层的数量设置为12,每个层中的特征映射数量设置为128。

分别学习每个比例因子的模型。特别是,我们还学习了无噪声退化模型,即SRMDNF,方法是去除第一个卷积滤波器中噪声级映射的连接,并使用新的训练数据进行微调。

网络设计中既没有使用残差学习,也没有使用双三次插值LR图像的原因:

首先,有了适度的网络深度和先进的CNN训练和设计,如ReLU、BN和Adam,很容易在没有残差学习的情况下训练网络。其次,由于退化涉及噪声,双三次插值LR图像会加剧噪声的复杂性,从而增加训练的难度。

2.5 Why not Learn a Blind Model?

(看不懂)

为了增强CNN在SISR中的实用性,最直接的方法似乎是用合成的训练数据学习一个blind model。然而,这种盲模型的性能不如预期。首先,当模糊核模型复杂时,性能严重退化。例如,运动模糊。这个现象可以用下面的例子来解释:

给定HR图像、模糊核和相应的LR图像,将HR图像向左移动一个像素和将模糊核向右移动一个像素,将得到相同的LR图像。因此,LR图像可以对应于具有像素偏移的不同HR图像。这反过来会加剧像素平均问题,通常会导致过度平滑的结果。其次,没有专门设计的体系结构设计的blind model泛化能力较差,在实际应用中表现较差。

相比之下,多重退化的非盲模型受像素平均问题的影响较小,具有更好的泛化能力。首先,退化映射包含扭曲信息,因此可以使网络具有空间变换能力。为清楚起见,可以将模糊核和噪声级引起的退化映射视为空间变换器的输出。第二,通过使用退化映射锚定模型,非盲模型很容易推广到看不见的退化,并且能够控制数据保真度项和正则化项之间的折衷。

三、实验

3.1 Training Data Synthesis and Network Training

对于模糊核,遵循具有固定核宽的各向同性高斯核模型。其中,尺度因子2、3和4的核宽范围分别设置为[0.2,2]、[0.2,3]和[0.2,4]。以0.1的步幅对核宽进行采样。核大小固定为15×15。为了进一步扩展退化空间,还考虑了更一般的核,即各向异性高斯,其特征是一个高斯概率密度函数N(0,Σ),具有零均值和变协方差矩阵Σ。该高斯核的空间由Σ特征向量的旋转角度和相应特征值的比例决定。设置旋转角度范围为[0,π]。特征值的缩放:对于缩放因子2、3和4分别设置为0.5到6、8和10。

虽然在本文中采用了双三次下采样器,但是直接下采样器训练模型也是很简单的。或者也可以通过近似直接下采样器来包含退化。具体来说,给定一个模糊核k_d,在直接下采样器中↓d,通过使用data-driven method方法解决以下问题,以此可以在双三次下采样↓b下找到相应的模糊核k_b

在本文中,还包括了比例因子3的这种退化。 

 一旦模糊核被定义或学习,我们就统一采样大量的核并聚合它们来学习PCA投影矩阵。

尺度因子3的一些典型模糊核和一些PCA特征向量的可视化如下图:

第一行是六个典型的模糊核:各向同性高斯(前两个),各向异性高斯(中间两个)和估计的直接下采样(后两个),尺度因子为3。

第二行是PCA特征向量的前六个最大的特征值。

 给定一幅HR图像,先用模糊核k对其进行模糊处理,然后用比例因子s进行双三次下采样,再加上噪声水平σ的AWGN来合成LR图像

损失函数

 3.2 Experiments on Bicubic Degradation

我们的目标是学习单个网络处理多种退化,而不是只处理双三次退化。但为了展示维数拉伸策略的优势,本文还将该方法与其他基于cnn的双三次退化方法进行了比较。

用ImageNet数据集对特定模型进行双三次退化训练,SRMD在小尺度下与VDSR取得了相当的结果,并且在大尺度下优于VDSR。SRResNet在尺度因子4上的表现略优于SRMDNF。为了进一步与VDSR等其他方法进行比较,还训练了一个SRMDNF模型(for scale factor 3),它仍然可以胜过其他竞争方法。可能的原因是有多个退化的SRMDNF在MAP框架中具有相同的先验,有利于内隐先验学习,从而有利于PSNR的提高。

本文提出的方法与其他方法相比具有非常强的性能。 

4.3 Experiments on General Degradations

在本节中,评估了在一般退化上所提出的方法的性能。只考虑各向同性高斯模糊核。

为了进一步证明该方法的可扩展性,本文还引入了另一种被广泛使用的退化,它涉及到7×7高斯核的宽度为1.6,以及尺度因子为3的直接下采样器。

将该方法与VDSR、两种基于模型的方法(即NCSR和IRCNN)以及一种级联去噪-SISR方法(即DnCNN [56]+SRMDNF)进行了比较。

 观察和分析上表:

(1)当假设的双三次退化与真实的双三次退化偏离时,VDSR的性能会严重下降。

(2)SRMD比NCSR和IRCNN产生了更好的结果,并优于DnCNN+SRMDNF。特别是SRMD相对于DnCNN+SRMDNF的PSNR增益随着核宽的增大而增大,验证了联合去噪和超分辨率的优势。

(3)第三,通过设置适当的模糊核,该方法在直接下采样的退化处理中具有良好的性能。可视比较如图6所示。可以看到,NCSR和IRCNN比VDSR产生了更赏心悦目的结果,因为它们假定的退化与真实的匹配。然而,它们无法恢复像SRMD和SRMDNF那样尖锐的边缘。

 4.4 Experiments on Spatially Variant Degradation

为了证明SRMD在空间变换退化中的有效性,我们合成了一种带有空间变异模糊核和噪声水平的LR图像。下图显示了针对空间变换退化的SRMD的可视化结果。

(a)噪声级和高斯模糊核宽映射。(b)放大的LR图像。(c)尺度因子为2的SRMD结果。

可以看出,提出的SRMD在恢复潜在HR图像方面是有效的。注意,模糊核被假定为各向同性高斯分布。

4.5 Experiments on Real Images

为了找到视觉质量好的退化参数,采用grid search strategy(网格搜索策略),而不是采用任何模糊核或噪声级估计方法。其中,以0.1为步幅均匀采样核宽至2.4,以5为步幅均匀采样,噪声等级为0至75。

SRMD可以比其他方法产生更有视觉可信性的HR图像。具体来说,从图8可以看出,VDSR的性能受到压缩伪影的严重影响。虽然Waifu2x可以成功去除压缩伪影,但无法恢复锐利的边缘。相比之下,SRMD不仅可以去除伪影,而且可以产生锐利的边缘。

从图9可以看出,VDSR和SelfEx都倾向于产生过平滑的结果,而SRMD可以恢复清晰的图像,具有更好的清晰图像的强度和梯度统计。

四、总结

(1)提出了一个有效的超分辨率网络,具有高可扩展性,可通过一个单一的模型处理多种退化。

(2)现有的基于cnn的SISR方法不同,本文的SR同时以LR图像及其退化映射作为输入。

(3)退化映射是通过对退化参数(即模糊核和噪声级)进行简单的维数拉伸得到的。

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
class LinearMaskedCoupling(nn.Module): """ Coupling Layers """ def __init__(self, input_size, hidden_size, n_hidden, mask, cond_label_size=None): super().__init__() # stored in state_dict, but not trained & not returned by nn.parameters(); similar purpose as nn.Parameter objects # this is because tensors won't be saved in state_dict and won't be pushed to the device self.register_buffer('mask', mask) # 0,1,0,1 # scale function # for conditional version, just concat label as the input into the network (conditional way of SRMD) s_net = [nn.Linear(input_size + (cond_label_size if cond_label_size is not None else 0), hidden_size)] for _ in range(n_hidden): s_net += [nn.Tanh(), nn.Linear(hidden_size, hidden_size)] s_net += [nn.Tanh(), nn.Linear(hidden_size, input_size)] self.s_net = nn.Sequential(*s_net) # translation function, the same structure self.t_net = copy.deepcopy(self.s_net) # replace Tanh with ReLU's per MAF paper for i in range(len(self.t_net)): if not isinstance(self.t_net[i], nn.Linear): self.t_net[i] = nn.ReLU() def forward(self, x, y=None): # apply mask mx = x * self.mask # run through model log_s = self.s_net(mx if y is None else torch.cat([y, mx], dim=1)) t = self.t_net(mx if y is None else torch.cat([y, mx], dim=1)) u = mx + (1 - self.mask) * (x - t) * torch.exp( -log_s) # cf RealNVP eq 8 where u corresponds to x (here we're modeling u) log_abs_det_jacobian = (- (1 - self.mask) * log_s).sum( 1) # log det du/dx; cf RealNVP 8 and 6; note, sum over input_size done at model log_prob return u, log_abs_det_jacobian 帮我解析代码
07-13
这段代码定义了一个名为LinearMaskedCoupling的类,该类继承自nn.Module。LinearMaskedCoupling是一种coupling层,用于在流式生成模型中实现可逆转换。下面对代码进行解析: 在__init__方法中,有以下几个参数: - input_size:输入数据的维度大小 - hidden_size:隐藏层的维度大小 - n_hidden:隐藏层的数量 - mask:掩码,用于指定哪些输入特征是要保留的(值为1),哪些是要忽略的(值为0) - cond_label_size:条件标签的维度大小,用于条件版本的生成(可选参数,默认为None) 在__init__方法中,首先调用父类nn.Module的构造函数super().__init__()。然后使用register_buffer方法注册了一个名为mask的缓冲区(buffer),用于存储掩码。这样做的目的是将mask保存在模型的state_dict中,但不作为需要训练的参数返回。 接下来定义了scale function和translation function。两者具有相同的结构,都是由一系列线性层和激活函数组成。其中,scale function用于计算尺度参数log_s,translation function用于计算平移参数t。 在forward方法中,首先根据掩码对输入x进行掩码操作,得到mx。然后根据是否有条件标签y,将mx与y进行拼接,作为输入传递给scale function和translation function,分别计算尺度参数log_s和平移参数t。 最后,根据RealNVP论文中的公式,通过对mx进行逆变换操作,得到u。同时计算对数绝对行列式的Jacobian矩阵(log_abs_det_jacobian)。 最终,函数返回u和log_abs_det_jacobian。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值