Deep Multi-scale Convolutional Neural Network for Dynamic Scene Deblurring 论文阅读
用于动态场景去模糊的深度多尺度卷积神经网络
摘要
针对一般动态场景的非均匀盲去模糊是一个具有挑战性的计算机视觉问题,因为模糊不仅来源于多个物体运动,还来源于相机抖动和场景深度变化。为了去除这些复杂的运动模糊,传统的基于能量优化的方法依赖于简单的假设,例如模糊核是部分均匀或局部线性的。此外,最近的基于机器学习的方法也依赖于在这些假设下生成的合成模糊数据集。这使得传统的去模糊方法在模糊核难以近似或参数化的情况下(例如物体运动边界)无法有效去除模糊。在这项工作中,我们提出了一种多尺度卷积神经网络,以端到端的方式恢复由各种原因引起的模糊图像。同时,我们提出了模仿传统由粗到精方法的多尺度损失函数。此外,我们提出了一个新的大规模数据集,该数据集提供了由高速相机拍摄获得的真实模糊图像及其对应的清晰地面实况图像对。通过使用在该数据集上训练的模型,我们通过实证证明,我们的方法在动态场景去模糊方面不仅在质量上,而且在数量上都达到了最先进的性能。
1. 引言
运动模糊是拍照时最常见的一种伪影类型。相机抖动和快速物体运动会降低图像质量,产生不期望的模糊图像。此外,深度变化、运动边界处的遮挡等各种原因使得模糊更加复杂。单幅图像去模糊问题是在给定一幅模糊图像的情况下估计未知的清晰图像。早期的研究集中于去除由简单的平移或旋转相机运动引起的模糊。最近的工作尝试处理动态环境中由深度变化、相机抖动和物体运动引起的一般非均匀模糊。这些方法大多基于以下模糊模型 [28, 10, 13, 11]。
B=KS+n, \mathbf{B} = \mathbf{KS} + \mathbf{n}, B=KS+n,
其中 B\mathbf{B}B、S\mathbf{S}S 和 n\mathbf{n}n 分别是向量化的模糊图像、潜在清晰图像和噪声。K\mathbf{K}K 是一个大型稀疏矩阵,其每一行包含一个作用于 S\mathbf{S}S 以生成模糊像素的局部模糊核。在实践中,模糊核是未知的。因此,盲去模糊方法试图同时估计潜在清晰图像 S\mathbf{S}S 和模糊核 K\mathbf{K}K。
为每个像素寻找模糊核是一个严重不适定问题。因此,一些方法尝试基于对模糊来源的简单假设对模糊模型进行参数化。在 [28, 10] 中,他们假设模糊仅由 3D 相机运动引起。然而,在动态场景中,由于存在多个运动物体以及相机运动,核估计更具挑战性。因此,Kim 等人 [14] 提出了一种动态场景去模糊方法,联合分割和去模糊非均匀模糊图像,允许在分割区域内估计复杂(非线性)的核。此外,Kim 和 Lee [15] 将模糊核近似为局部线性,并提出了一种联合估计潜在图像和局部线性运动的方法。然而,这些模糊核近似仍然不准确,特别是在运动突变和遮挡的情况下。值得注意的是,这种错误的核估计会直接影响潜在图像的质量,导致不期望的振铃伪影。
最近,卷积神经网络 (CNNs) 已被应用于包括去模糊问题在内的众多计算机视觉问题中,并显示出有希望的结果 [29, 25, 26, 1]。由于没有可用于监督学习的真实模糊图像和地面实况清晰图像对,它们通常使用通过卷积合成模糊核生成的模糊图像。在 [29, 25, 1] 中,使用具有均匀模糊核的合成模糊图像进行训练。而在 [26] 中,训练分类 CNN 来估计局部线性模糊核。因此,基于 CNN 的模型仍然只适用于某些特定类型的模糊,对于更常见的空间变化模糊存在限制。
因此,所有现有方法在能够推广并实际使用之前仍存在许多问题。这主要是由于使用了简单且不真实的模糊核模型。因此,为了解决这些问题,在这项工作中,我们提出了一种新颖的端到端深度学习方法用于动态场景去模糊。
首先,我们提出了一种多尺度 CNN,它直接恢复潜在图像,而不假设任何受限的模糊核模型。特别是,多尺度架构被设计用来模仿传统的由粗到精优化方法。与其他方法不同,我们的方法不估计显式的模糊核。因此,我们的方法避免了由核估计误差引起的伪影。其次,我们使用适合由粗到精架构的多尺度损失来训练所提出的模型,这极大地提高了收敛性。此外,我们通过采用对抗损失 [9] 进一步改善了结果。第三,我们提出了一个新的包含地面实况清晰图像的真实模糊图像数据集。为了获得用于训练的无核模型数据集,我们采用了 [17] 中介绍的数据集采集方法。由于模糊过程可以通过快门时间内清晰图像的积分来建模 [17, 21, 16],我们使用高速相机捕捉动态场景的一系列清晰帧,并通过考虑伽马校正将它们平均以生成模糊图像。
通过在所提出的数据集上进行训练并添加适当的增强,我们的模型可以隐式地处理一般的局部模糊核。由于损失项优化结果使其接近地面实况,它甚至能恢复模糊核极其复杂的被遮挡区域,如图 1 所示。我们使用数百万对图像块训练了我们的模型,并在动态场景去模糊方面取得了显著改进。大量的实验结果表明,所提出方法的性能在定性和定量评估上都远远优于最先进的动态场景去模糊方法。
相关工作
有几种方法采用 CNN 进行去模糊 [29, 26, 25, 1]。Xu 等人 [29] 提出了一种图像反卷积 CNN,用于在非盲设置下去模糊图像。他们基于可分离核特性构建了一个网络,即(逆)模糊核可以分解为少量重要滤波器。此外,他们通过将去噪网络 [7] 模块连接到他们提出的网络末端,以融合该模块来减少噪声和颜色饱和度等视觉伪影。另一方面,Schuler 等人 [25] 提出了一种基于 CNN 的盲去模糊方法。他们提出的网络模仿了传统的基于优化的去模糊方法,并以由粗到精的方式迭代特征提取、核估计和潜在图像估计步骤。为了获得用于网络训练的清晰和模糊图像对,他们使用高斯过程生成均匀模糊核,并将它们卷积到从 ImageNet 数据集 [3] 收集的清晰图像上,合成了大量模糊图像。然而,他们报告称由于其次优架构,对于大模糊存在性能限制。
与 Couzinie-Devy 等人 [2] 的工作类似,Sun 等人 [26] 提出了一种序列去模糊方法。首先,他们使用 73 个候选模糊核生成模糊和清晰图像块对。接下来,他们训练分类 CNN 来测量局部图像块特定模糊核的可能性。然后,通过优化一个由 CNN 似然和平滑先验组成的能量模型,获得平滑变化的模糊核。最终的潜在图像估计使用传统的优化方法 [30] 执行。
图 1: (a) 输入模糊图像。(b) Sun 等人 [26] 的结果。© 我们的去模糊结果。我们的结果显示出清晰且无伪影的物体边界。
请注意,所有这些方法都需要一个精确的核估计步骤来恢复潜在清晰图像。相比之下,我们提出的模型被训练为直接生成潜在图像,而无需估计模糊核。
在其他计算机视觉任务中,多种形式的由粗到精架构或多尺度架构已被应用 [8, 6, 4, 23, 5]。然而,并非所有多尺度 CNN 都被设计为能产生最优结果,类似于 [25]。在深度估计、光流估计等任务中,网络通常产生分辨率小于输入图像分辨率的输出 [8, 6, 5]。这些方法即使使用多尺度架构,也难以处理长距离依赖性。
因此,我们构建了一个多尺度架构,既能保留细粒度的细节信息,也能保留来自更粗尺度的长距离依赖性。此外,我们通过使用多尺度损失训练网络,确保中间层网络以显式方式帮助最终阶段。
动态场景去模糊的无核学习
传统上,在估计潜在图像之前找到模糊核是至关重要的。基于 CNN 的方法也不例外 [25, 26]。然而,估计核涉及几个问题。首先,假设简单的核卷积无法建模几个具有挑战性的情况,如遮挡区域或深度变化。其次,除非模糊模型经过精心设计,否则核估计过程微妙且对噪声和饱和度敏感。此外,错误估计的核会导致潜在图像中出现伪影。第三,在动态场景中为每个像素寻找空间变化的核需要大量的内存和计算。
因此,我们在模糊数据集生成和潜在图像估计中都采用无核方法。在模糊图像生成中,我们遵循近似相机成像过程的思路,而不是假设特定的运动或寻找或设计复杂的模糊核。我们捕捉连续的清晰帧并进行积分来模拟模糊过程。详细过程在第 2 节描述。请注意,我们的数据集仅由模糊和清晰图像对组成,局部核信息隐式嵌入其中。在图 2 中,我们将我们的无核模糊图像与使用均匀模糊核合成的传统图像进行了比较。值得注意的是,我们的方法生成的模糊图像展示了由运动的人和静态背景引起的真实且空间变化的模糊,而传统方法合成的模糊图像则没有。对于潜在图像估计,我们不假设模糊来源,仅在我们的模糊和清晰图像对上训练模型。因此,我们提出的方法在去模糊中不会受到与核相关问题的困扰。
2 模糊数据集
我们没有选择对清晰图像进行卷积的核进行建模,而是选择记录随时间积分以生成模糊图像的清晰信息。当相机传感器在曝光期间接收光线时,每一时刻的清晰图像刺激会被累积,生成模糊图像 [13]。然后,积分信号通过非线性 CRF(相机响应函数)转换为像素值。因此,该过程可以通过累积来自高速视频帧的信号来近似。
模糊累积过程可以建模如下:
B=g(1T∫t=0TS(t)dt)≃g(1M∑i=0M−1S[i]),(2)B=g\left(\frac{1}{T}\int_{t=0}^{T}S(t)dt\right)\simeq g\left(\frac{1}{M}\sum_{i =0}^{M-1}S[i]\right),(2)B=g(T1∫t=0TS(t)dt)≃g(M1i=0∑M−1S[i]),(2)
其中 TTT 和 S(t)S(t)S(t) 分别表示曝光时间和时刻 ttt 清晰图像的传感器信号。类似地,MMM 和 S[i]S[i]S[i] 分别表示曝光时间内采样的帧数和第 iii 帧清晰帧信号。ggg 是将清晰潜在信号 S(t)S(t)S(t) 映射到观测图像 S^(t)\hat{S}(t)S^(t) 的 CRF,即 S^(t)=g(S(t))\hat{S}(t)=g(S(t))S^(t)=g(S(t)),或 S^[i]=g(S[i])\hat{S}[i]=g(S[i])S^[i]=g(S[i])。在实践中,我们只有观测到的视频帧,而原始信号和 CRF 是未知的。
已知当涉及非线性 CRF 时,非均匀去模糊会变得非常困难,必须考虑非线性性。然而,目前,没有可用的 CRF 估计技术适用于具有空间变化模糊的图像 [27]。当未给出地面实况 CRF 时,一个常见的实用方法是使用 γ=2.2\gamma=2.2γ=2.2 的伽马曲线近似 CRF,如下所示,因为它被认为是已知 CRF 的近似平均值 [27]。
g(x)=x1/γ,(3)g(x)=x^{1/\gamma},(3)g(x)=x1/γ,(3)
因此,通过校正伽马函数,我们从观测图像 S^[i]\hat{S}[i]S^[i] 获得潜在帧信号 S[i]=g−1(S^[i])S[i] = g^{-1}(\hat{S}[i])S[i]=g−1(S^[i]),然后使用公式 (2) 合成相应的模糊图像 BBB。
我们使用 GOPRO4 Hero Black 相机生成我们的数据集。我们用 GOPRO 相机拍摄 240 fps 的视频,然后平均不同数量(7 - 13)的连续潜在帧以产生不同强度的模糊。例如,平均 15 帧模拟了以 1/16 快门速度拍摄的照片,而相应的清晰图像快门速度为 1/240。值得注意的是,每个模糊图像对应的清晰潜在图像被定义为用于生成模糊图像的清晰帧序列中的中间帧。最终,我们的数据集由 3214 对分辨率为 1280x720 的模糊和清晰图像组成。所提出的 GOPRO 数据集可在我们的网站https://github.com/SeungjunNah/DeepDeblur_release上公开获取。
3 提出的方法
在我们的模型中,更精细尺度的图像去模糊得到了更粗尺度特征的辅助。为了在保留精细尺度信息的同时利用粗粒度和中粒度信息,我们网络的输入和输出采用高斯金字塔的形式。请注意,大多数其他由粗到精网络以单幅图像作为输入和输出。
模型架构
除了多尺度架构,我们还采用了稍加修改的残差网络结构 [12] 作为我们模型的构建块。与普通 CNN 相比,使用残差网络结构可以实现更深的架构。此外,由于模糊和清晰图像对在数值上相似,让参数仅学习差异是高效的。我们发现移除原始残差构建块中快捷连接(shortcut connection)之后的整流线性单元(ReLU)可以提高训练时的收敛速度。我们将修改后的构建块称为 ResBlock。原始的和我们修改后的构建块在图 3 中进行了比较。
通过堆叠足够多的带有 ResBlocks 的卷积层,每个尺度的感受野被扩大。细节将在以下段落中描述。为了一致性,我们按分辨率递减的顺序定义尺度级别(即级别 111 为最精细尺度)。除非另有说明,我们总共使用 K=3K=3K=3 个尺度。在训练时,我们将输入和输出高斯金字塔图像块的分辨率设置为 {256×256,128×128,64×64}\{256\times 256,128\times 128,64\times 64\}{256×256,128×128,64×64}。连续尺度之间的比例是 0.50.50.5。对于所有卷积层,我们将滤波器大小设置为 5×55\times 55×5。由于我们的模型是全卷积的,在测试时,图像块大小可以根据 GPU 内存允许而变化。整体架构如图 4 所示。
图 2: (a) 地面实况清晰图像。(b) 通过卷积均匀模糊核生成的模糊图像。© 通过平均清晰帧生成的模糊图像。在这种情况下,模糊主要由人物运动引起,背景保持原样。模糊核是非均匀的、形状复杂的。然而,当通过卷积均匀核合成模糊图像时,背景也会变得模糊,就好像模糊是由相机抖动引起的一样。为了对动态场景模糊进行建模,需要我们的无核方法。
图 3: (a) 原始残差网络构建块。(b) 我们网络的修改构建块。我们没有使用批量归一化层,因为我们用大小为 2 的小批量训练模型,这比通常的批量归一化所需批量小。我们凭经验发现,在块输出之前移除整流线性单元在性能方面是有益的。
最粗尺度网络
网络的最前端是最粗尺度网络。第一层卷积层将 1/4 分辨率、64×6464\times 6464×64 大小的图像转换为 64 个特征图。然后,堆叠 19 个 ResBlocks,后面是最后一层卷积层,该层将特征图转换为输入维度。每个卷积层通过零填充保持分辨率。总共有 40 层卷积层。每个尺度级别的卷积层数量被确定,以使整个模型总共有 120 层卷积层。因此,最粗尺度网络的感受野足够大以覆盖整个图像块。在该阶段结束时,生成最粗尺度的潜在清晰图像。此外,来自最粗尺度输出的信息被传递到下一个更精细尺度的网络阶段。为了将最粗尺度的输出转换为适应下一个更精细尺度的输入大小,输出图像块通过一个反卷积 [22] 层(其他多尺度方法使用重塑 [8] 或上采样 [4, 6, 23])。由于清晰和模糊图像块共享低频信息,通过反卷积学习合适的特征有助于消除冗余。在我们的实验中,使用反卷积比上采样表现出更好的性能。然后,反卷积特征与更精细尺度的模糊图像块连接起来作为输入。
更精细尺度网络
更精细尺度的网络基本上具有与最粗尺度网络相同的结构。但是,第一层卷积层不仅接收其自身的模糊输入图像,还接收来自前一阶段的清晰特征,以连接的形式输入。每个卷积滤波器大小为 5×55\times 55×5,特征图数量与最粗尺度相同。除了最后一个最精细尺度外,在进入下一阶段之前都有一个反卷积层。在最精细尺度上,恢复原始分辨率的清晰图像。
训练
我们的模型在所提出的 GOPRO 数据集上进行训练。在 3214 对图像中,2103 对用于训练,其余用于测试。为了防止网络过拟合,采用了多种数据增强技术。在几何变换方面,图像块被随机水平翻转、垂直翻转以及旋转 90 度。在颜色方面,RGB 通道被随机排列。考虑到图像退化,HSV 颜色空间中的饱和度乘以 [0.5, 1.5] 范围内的随机数。此外,向模糊图像添加高斯随机噪声。为了使我们的网络对不同强度的噪声具有鲁棒性,噪声的标准差也从高斯分布 N(0,(2/255)2)N(0,(2/255)^{2})N(0,(2/255)2) 中随机采样。然后,将超出 [0, 1] 范围的值进行裁剪(clip)。最后,减去 0.5 以使输入和输出值范围以零为中心,范围变为 [-0.5, 0.5]。
图 4: 多尺度网络架构。BkB_{k}Bk、LkL_{k}Lk、SkS_{k}Sk 分别表示模糊图像、潜在图像和地面实况清晰图像。下标 kkk 表示高斯金字塔中的第 kkk 级尺度,其下采样到 1/2k1/2^{k}1/2k 比例。我们的模型以模糊图像金字塔作为输入,输出估计的潜在图像金字塔。每个中间尺度的输出都被训练为清晰的。在测试时,选择原始尺度的图像作为最终结果。
在优化网络参数时,我们结合两种损失来训练模型:多尺度内容损失和对抗损失。
多尺度内容损失
基本上,由粗到精方法期望每个中间输出都成为相应尺度的清晰图像。因此,我们训练网络,使中间输出形成清晰图像的高斯金字塔。均方误差(MSE)准则应用于金字塔的每一层。因此,损失函数定义如下:
Lcont=12K∑k=1K1ckwkhk∥Lk−Sk∥2,(4)\mathcal{L}_{cont}=\frac{1}{2K}\sum_{k=1}^{K}\frac{1}{c_{k}w_{k}h_{k}}\|L_{k}-S_{ k}\|^{2},(4)Lcont=2K1k=1∑Kckwkhk1∥Lk−Sk∥2,(4)
其中 Lk,SkL_{k},S_{k}Lk,Sk 分别表示尺度级别 kkk 的模型输出和地面实况图像。每个尺度的损失通过通道数 ckc_{k}ck、宽度 wkw_{k}wk 和高度 hkh_{k}hk(即元素总数)进行归一化。
对抗损失
最近,对抗网络被报道能够生成清晰逼真的图像 [9, 4, 24]。遵循 [24] 中介绍的架构,我们构建了如表 1 所示的判别器。判别器以最精细尺度的输出或地面实况清晰图像作为输入,并分类它是去模糊后的图像还是清晰图像。
对抗损失定义如下:
Ladv=ES∼psharp(S)[logD(S)]+EB∼pbinary(B)[log(1−D(G(B)))],(5)\begin{split}\mathcal{L}_{adv}&=\underset{S\sim p _{sharp}(S)}{\mathbb{E}}[\log D(S)]+\\ &\underset{B\sim p_{binary}(B)}{\mathbb{E}}[\log(1-D(G(B)))], \end{split}(5)Ladv=S∼psharp(S)E[logD(S)]+B∼pbinary(B)E[log(1−D(G(B)))],(5)
其中 GGG 和 DDD 分别表示生成器(即图 4 中的我们的多尺度去模糊网络)和判别器(分类器)。在训练时,GGG 试图最小化对抗损失,而 DDD 试图最大化它。
最后,通过结合多尺度内容损失和对抗损失,生成器网络和判别器网络被联合训练。因此,我们的最终损失项是:
Ltotal=Lcont+λ×Ladv,(6)\mathcal{L}_{total}=\mathcal{L}_{cont}+\lambda\times\mathcal{L}_{adv},(6)Ltotal=Lcont+λ×Ladv,(6)
其中权重常数 λ=1×10−4\lambda=1\times 10^{-4}λ=1×10−4。
我们使用 ADAM [18] 优化器进行训练,小批量大小为 2。学习率从 5×10−55\times 10^{-5}5×10−5 开始自适应调整。在 3×1053\times 10^{5}3×105 次迭代后,学习率降低到先前学习率的 1/10。整个训练需要 9×1059\times 10^{5}9×105 次迭代才能收敛。
4 实验结果
我们使用 torch7 库实现了我们的模型。所有后续实验均在配备 i7-6700K CPU 和 NVIDIA GTX Titan X (Maxwell) GPU 的台式机上进行。
GOPRO 数据集
我们在提出的 GOPRO 数据集上评估模型的性能。我们的测试数据集包含 1111 对图像,约占总数据集的 1/31/31/3。我们在定性和定量两方面将结果与最先进的方法 [15, 26] 进行比较。我们的结果在图像质量方面显示出显著改进。一些去模糊结果如图 5 所示。我们从 Sun 等人 [26] 的结果中注意到,在模糊呈非线性形状或位于运动边界的区域,去模糊并不成功。Kim 和 Lee [15] 的结果在未找到强边缘的情况下也失败了。相比之下,我们的结果避免了那些与核估计相关的问题。表 2 显示了竞争方法以及我们不同尺度级别 kkk 的模型在测试数据上的 PSNR、SSIM 定量评估结果。同时比较了运行时间。我们观察到,在 PSNR 和 SSIM 方面,K=2K=2K=2 的系统产生最佳结果,而 K=3K=3K=3 的系统速度最快。
Köhler 数据集
Köhler 数据集 [19] 包含 4 幅清晰图像,每幅图像对应 12 幅不同模糊程度的图像。这些模糊是通过回放记录的 6D 相机运动产生的,假设线性 CRF。我们报告了在此数据集上的定量结果,见表 3。我们的模型通过在公式 (2) 中将 ggg 设置为恒等函数进行训练。我们注意到,K=2K=2K=2 的系统在 PSNR 方面产生最佳结果,而 K=3K=3K=3 的系统展现出最佳的 MSSIM 结果。
表 1: 判别器的模型参数。每个卷积层后接 LeakyReLU 激活层。
图 5. GOPRO 数据集上的测试结果。从上到下:模糊图像,Sun 等人 [26] 的结果,Kim 和 Lee [15] 的结果,以及我们提出的方法的结果。
3889
Lai 等人的数据集
Lai 等人 [20] 通过卷积非均匀模糊核并施加几种常见退化来生成合成数据集。他们也记录了 6D 相机轨迹来生成模糊核。然而,他们的模糊图像和清晰图像与我们的数据集在对齐方式上不同,这使得简单的图像质量度量(如 PSNR 和 SSIM)与感知质量的相关性降低。因此,我们在图 6 中展示定性比较。显然,我们的结果避免了振铃伪影,同时保留了波浪涟漪等细节。
5 结论
在本文中,我们提出了一种用于估计清晰图像的盲去模糊神经网络。与以往研究不同,我们的模型避免了与核估计相关的问题。所提出的模型遵循由粗到精的方法,并在多尺度空间中进行训练。我们还构建了一个真实的地面实况模糊数据集,实现了高效的监督学习和严格的评估。实验结果表明,我们的方法在定性和定量上都优于最先进的方法,同时速度快得多。
表 3: Köhler 数据集上的定量比较。该数据集有其自己的评估代码,因此我们报告多尺度 SSIM (MSSIM) 而不是 SSIM。
图 6: 在数据集 [20] 上的去模糊结果。顶行显示 Sun 等人 [26] 的结果,底行显示我们的结果。
表 2: GOPRO 数据集上的定量去模糊性能比较。KKK 表示尺度级别。