1. Contribution
本篇论文在归纳时,仍将当前基于CNN的去模糊方法归纳为两种形式,多尺度和尺度递归。认为这两种方案是将”从粗到精”方案扩展到深度CNN场景。尽管如此,仍存在许多挑战:
- 在粗到精方案下,由于滤波器尺寸较大,大多数网络使用大量训练参数。因此,多尺度和尺度递归方法导致昂贵的运行时间,并且难以改善去模糊质量。(这一点在有篇论文里使用多层小卷积核代替单层大卷积核,从而减少了参数量)
- 在多尺度方法中增加极低分辨率输入的网络深度似乎不会改善去模糊性能。
贡献点:
- 提出了一种类似于空间金字塔匹配(SPM)的端到端CNN分层模型,该模型在从细到粗的网格中执行去模糊,从而利用多块局部到粗操作。每个较精细级别通过将其残差图像贡献给较粗糙级别以残差方式起作用,从而允许网络的每个级别聚焦在不同的模糊尺度上。
- 确定了当前深度去模糊模型对叠加深度的限制,并介绍了克服这一限制的新叠加方法。
- 我们研究了编码器-解码器对之间的权重共享对层次结构的影响,并提出了一种DMPHN的内存友好型变体。
1.1 Encoder-decoder Architecture
编码器结构同之前的两篇文章也有很大的相似的地方。尽管原文没有明说,但是从encoder-decoder的结构中可以看出,采用的基本模块仍然是ResBlock,即ResNet原基本单元去掉BN和最后一层ReLu的结果。
和纯粹堆叠ResBlock(多尺度去模糊那篇论文)不同,借鉴了尺度递归那篇文章的结构,即在每一个基本模块前添加一个卷积层。
通道数的策略基本不变,依此经历3-32-64-128-128-64-32-3的变化。再有的变化就是卷积核的尺寸变成了3*3,减小了参数量。在原来两篇论文中都采用的较大尺寸的卷积核。
连续3年的论文说明,这几年采用的encoder-decoder框架都是极其相似的,但也都是微调的结果。
1.2 Network Architecture
同之前的多尺度和尺度递归的网络结构不同,本文提出是一种被称为分层多块的网络结构。原文称这一块借鉴了文章【Beyond bags of features: Spatial pyramid matching for recognizing natural scene categories】IEEE 2006,原文章是用于自然场景分类的,在处理的过程中将一张图片分成多个patch,然后分别对每个patch进行特征的提取处理,再将不同的patch组合起来。
现在想想VIT的做法有点借鉴这种做法的意思。从时间年限来看,VIT提出的时间是2020年,也就是说本论文应该不是受到了VIT的做法而得到的启发;应该就是从更早的2006年的SPM文章中得到的启发。
因此,这一部分最大的特点就是对原图打patch,使得一张图片可以分成如1,2,4,8个patch的图片,认为同一张图在打成不同的patch的情况下属于不同的尺度。不同的是,这里认为处理的是从精到粗,处理的顺序是先从patch多的开始处理,处理后将左右相邻的两个小patch融合,成为和上一尺度的一个patch相同大小的patch。
在特征融合方面,上面的表述已经说明了在不同尺度输出后,会和上一尺度的输入进行融合;该网络结构的另一处特征融合体现在中间特征的融合,中间特征的产生,认为是本层尺度经过特征提取后与下层中间特征的加和。这就需要考虑形状的问题。下层中间特征的形状已经是输入时的patch扩大后的结果了。patch的扩大都是在最后一步进行的操作,在之前的操作中,patch大小保持不变。
1.3 Stacked Multi-Patch Network
在多尺度论文中,图像金字塔采用了三个尺度的图像,这就不禁让人联想到为什么仅采用了三个尺度,更多的尺度能否有效,事实上据说使用更小的尺度会导致精度提高很小,但参数量增大较多的情况。
本文提出的方案也有类似的现象,具体表现为,倘若给一张图片打上更多的patch,即每一个patch如果更小的话,对精度的提升也就很小了,因此本文针对这样的现象提出了一个新颖的堆叠策略,来进一步提高模型效果。这一策略就是不再对单一的一个DMPHN进行深度或尺度的拓展,而是想办法堆叠多个DMPHN进行工作。具体分为两种堆叠方式。
Stack-DMPHN:这种方式相当于是对DMPHN进行直接的级联,即第一个DMPHN的输出作为第二个DMPHN的输入,呈串联结构。但也会将前一个DMPHN不同尺度的信息传给下一个DMPHN相应的尺度。
2. Loss
2.1 单一结构
这里的Loss仅采用了最后一个尺度,即最终恢复出潜在图像部分的Loss,而不是像之前论文中对每个尺度的Loss都进行了计算。经文章分析是这样的,这里想采用的是类似残差式的学习,也就是说它不必要求前几个尺度都要恢复出和gt一致的图片。
2.2 堆叠结构
堆叠结构的Loss是将每一个子模型的输出的Loss进行求和,加入堆叠两次单一结构,就是对两个单一结构输出部分分别求取Loss,将两部分Loss相加。
Experiment
Train
单张NVIDIA Tesla P100 GPU(JDG 3900+)
训练3000epochs
无具体时间
Dataset
GoPro dataset
2103对训练,1111对测试
VideoDeblurring dataset
共71个视频,61个用于训练,10个用于测试
评价指标
- PSNR
- SSIM
- Size
- Time
相关方法
【Deep multi-scale convolutional neural network for dynamic scene deblurring】CVPR 2017
【Learning a convolutional neural network for non-uniform motion blur removal】CVPR 2015
【Scale-recurrent network for deep image deblurring】CVPR 2018
【Dynamic scene deblurring using spatially variant recurrent neural networks】 CVPR 2018