Unified Dynamic Convolutional Network for Super-Resolution with Variational Degradations 作为2020年的一篇关于超分辨率的顶会(CVPR)文章,本文提出了一种用于超分的动态卷积(dynamic convolutions)方法,并将其用到了前人的基础框架(SRMD)上组建了一种新的超分辨率框架。
文章切入点:
在非盲情况下的单图像超分辨率问题下,以往的超分辨率模型大多是事先人为规定某种或是某几种下采样方法的组合,这样做虽然可以在训练的时候在这类下采样超分辨率取得不错的效果,但是将训练好的模型应用到其他的下采样图时,性能却常常会急剧下降。说到底,训练后的模型仅仅记住的是某一类下采样到其超分辨率的分布。
解决这种训练下采样分布和测试下采样分布不同而导致模型性能下降的一种方法是 通过在训练下采样和测试下采样之间搭建一个桥梁,将测试下采样分布映射为训练下采样分布,进而再输入到上采样网络中,2020年顶会上使用这种方法的有Correction Filter for Single Image Super-Resolution: Robustifying Off-the-Shelf Deep Super-Resolvers,Unpaired Image Super-Resolution using Pseudo-Supervision等,另一种方法是通过辅助网络,使得模型以一种循环映射的方式训练,从而让万能的网络自己拟合任意未知的下采样,2020年顶会使用这种方法的有Closed-loop Matters: Dual Regression Networks for Single Image Super-Resolution。尽管这些方法通过花哨的网络框架来实现了网络的盲训练,但即使这些最先进的网络,他们依然存在一个无可修正的缺点:一旦训练完成,网络的参数也就固定下来了,而面对真实图像中各种各样分布的低分辨率图像,一个固定参数的网络难免显得力不从心。
文章创新点:
为了改变传统超分辨率网络一旦训练结束,参数便被固定,无法对后续测试的各种各样分布的低分辨率图像进行自适应超分辨率的问题,本文提出了一种专门用于超分辨率的动态卷积方法,并以此为基础,对2018年的SRMD网络进行了魔改,形成了一种新的非盲的超分辨率网络。这种网络最大的特点就是训练结束后,网络的“卷积核”可以根据输入的图像进行动态调整,从而适应不同的低分辨率图像。此外,为了对动态卷积的训练过程进行监督,本文还提出了配套使用的 multi-stage loss。
网络结构和具体实现:
先来说一下网络的整体结构,从本文开始的图看,网络大致可以分为两部分,一部分是特征提取网络(一连串蓝色部分)和优化网络(一连串蓝色部分)。特征提取网络就是一系列
f
e
a
t
u
r
e
n
=
f
e
a
t
u
r
e
n
−
1
+
C
o
n
v
(
R
e
L
U
(
C
o
n
v
(
f
e
a
t
u
r
e
n
−
1
)
)
)
feature^n = feature^{n-1}+Conv(ReLU(Conv(feature^{n-1})))
featuren=featuren−1+Conv(ReLU(Conv(featuren−1)))的残差块,目的在于提取图像的全局特征和局部特征。这里读者可能会对特征提取网络的输入部分
D
D
D比较疑惑,其实读过SRMD这篇文章的就知道,这个输入其实完全是SRMD的方法,让我们来给出
D
D
D的具体结构:
由于本文是一种非盲的超分辨率模型,如果将一个组合下采样的过程看做是:
I
L
R
=
(
I
H
R
⊗
k
)
↓
s
+
n
I_{LR} = (I_{HR} ⊗ k) ↓_ s + n
ILR=(IHR⊗k)↓s+n
其中
k
k
k是高斯模糊核,
↓
s
↓_s
↓s是
s
s
s倍下采样,
n
n
n是加性高斯白噪声(AWGN)。那么
D
D
D就是讲
k
k
k向量化展开(k.reshape(-1,1))成一个一维向量,之后通过PCA降维成一个
1
×
t
1 \times t
1×t的向量,之后将噪声等级添加到这个向量后面,组成一个
1
×
(
t
+
1
)
1 \times (t+1)
1×(t+1)的向量,最后,通过将向量的每个元素展成一个
H
×
W
H \times W
H×W的平面,其中H和W就是低分辨率图像的长和宽。然后我们就得到了一个
(
1
+
t
)
×
H
×
W
(1+t) \times H \times W
(1+t)×H×W的下采样信息图,也就是
D
D
D。在知道了
D
D
D后,我们将其和低分辨率图像
I
0
I^0
I0进行concat操作,最后将这个
(
1
+
t
+
C
)
×
H
×
W
(1+t+C) \times H \times W
(1+t+C)×H×W的东西输入到特征提取网络中。
接下来就到了本文的重点了,后半部分的优化网络。
整体来看这部分网络的流程图,这部分网络的每个单元不仅需要输入前面单元输出的优化图(第m个单元输出结果为
I
m
I^m
Im,输入
I
m
−
1
I^{m-1}
Im−1,
I
0
I^0
I0是原始低分辨率图像),而且需要输入之前特征提取网络所提取的图像特征。图像特征与前一个单元的输入结果结合后,会经过条线。在说第一条线时,我们有必要先来说一下本文提出的两种动态卷积:
第一种动态卷积是适用于卷积图像和生成图像维度不变的情况下的,通过生成的动态卷积核对对应位置的像素进行卷积,数学表示为:
I
o
u
t
(
i
,
j
)
=
∑
u
=
−
∆
∆
∑
v
=
−
∆
∆
K
i
,
j
(
u
,
v
)
⋅
I
i
n
(
i
−
u
,
j
−
v
)
I_{out} (i,j) =\sum_{u=-∆}^∆\sum_{v=-∆}^∆K _{i,j} (u,v)·I_{in} (i−u,j −v)
Iout(i,j)=u=−∆∑∆v=−∆∑∆Ki,j(u,v)⋅Iin(i−u,j−v)
其中
(
i
,
j
)
(i,j)
(i,j)就是像素坐标,
∆
∆
∆是动态卷积单个卷积核的长度的一半(这里个人认为卷积核应该需要为奇数,并且在∆是卷积核/2向下取整),
K
i
,
j
K_{i,j}
Ki,j是动态卷积整个卷积核(维度为
H
×
W
×
(
k
×
k
)
H \times W \times (k \times k)
H×W×(k×k)对应上图绿色立方体)的第
i
,
j
i,j
i,j个元素(
1
×
1
×
(
k
×
k
)
1 \times 1 \times (k \times k)
1×1×(k×k)),经过reshape后成为的
k
×
k
×
1
k \times k \times 1
k×k×1的小核。这里需要说明一点,作者提出对于图像的不同通道,第一种动态卷积核默认是通道权重共享的,个人认为这里如果计算量可以接受,可以将动态卷积整个卷积核维度生成为
H
×
W
×
(
k
×
k
×
C
)
H \times W \times (k \times k \times C)
H×W×(k×k×C)。
第二种动态卷积核是适用于卷积图像进行上采样的情况下的,通过生成的动态卷积核对对应位置的像素进行上采样卷积,数学表示为:
I
o
u
t
(
i
×
r
+
x
,
j
×
r
+
y
)
=
∑
x
=
0
r
−
1
∑
y
=
0
r
−
1
∑
u
=
−
∆
∆
∑
v
=
−
∆
∆
K
i
,
j
,
x
,
y
(
u
,
v
)
⋅
I
i
n
(
i
−
u
,
j
−
v
)
,
I_{out}(i × r + x,j × r + y) = \sum_{x=0}^{r-1} \sum_{y=0}^{r-1}\sum_{u=-∆}^∆ \sum_{v=-∆}^∆K_{i,j,x,y}(u,v) · I_{in}(i − u,j − v),
Iout(i×r+x,j×r+y)=x=0∑r−1y=0∑r−1u=−∆∑∆v=−∆∑∆Ki,j,x,y(u,v)⋅Iin(i−u,j−v),
(注意这里原文有错误,求和号上面应该是r-1)通俗的来讲,就是对于低分辨率图
(
i
,
j
)
(i,j)
(i,j)处,我以它为中心,通过将对应的动态卷积小核作用在上面,生成额外的像素点作为超分辨率结果,例如
K
i
,
j
,
x
,
y
(
u
,
v
)
K_{i,j,x,y}(u,v)
Ki,j,x,y(u,v)会对低分辨率图像上以
u
,
v
u,v
u,v为中心的区域进行卷积,结果作为高分辨率图像的第$i × r + x,j × r + y $个坐标点像素。由于上采样动态卷积大核非常大,所以所接触的上级信息已经非常稀疏,所以这里一定要进行通道权重共享,以避免出现维数灾难。
现在让我们思维再回到前面,在知晓了动态卷积核的由来之后,前面第一条线的一系列操作实际上就是在通过维度调整和特征提取来生成这个核。在生成动态卷积核后,这个核会反过来作用在一开始的输入图像上,并且作用结果称之为
O
m
O^m
Om。
第二条线是经过两次卷积(
3
×
3
×
16
和
3
×
3
×
3
3 \times 3 \times 16 和 3 \times 3 \times 3
3×3×16和3×3×3)后,通道整合形成强化高频率细节图,具体的原理参考 Y. Jo, S. W. Oh, J. Kang, and S. J. Kim, “Deep video super-resolution network using dynamic upsampling filters without explicit motion compensation,” in Proc. IEEE Conf. Computer Vision and Pattern Recognition (CVPR), pp. 3224-3232, 2018。这里要注意的是,生成的细节图要根据第一条线来确定是否进行上采样,来保证与
O
m
O^m
Om维度对其。
最后
O
m
O^m
Om和高频细节进行像素加法,得到的结果就是这个动态卷积单元输出的图像。
。。。。。。。。。。。。。。。。。。。。。。。。。分割线。。。。。。。。。。。。。。。。。。。。。。。。。。。。
然后再来讲一下本文提出的配套的损失函数—— multistage loss:
L
o
s
s
=
∑
m
=
1
M
F
(
I
m
,
I
H
R
)
Loss =\sum_{m=1}^MF(I^m ,I_{HR})
Loss=m=1∑MF(Im,IHR)
我们前面说过在优化网络的每个阶段,动态卷积单元都会输出一个优化图像,为了对每个阶段都进行监督,本文特此提出了这个损失函数,将每个阶段的输出与真实结果进行比较,很简单,很有效。
个人感想和疑问
通读本文的框架,给人最大的感受就是整个流程中多次进行了融合,因此需要时刻注意维度对其。我们知道特征提取网络的输出维度是固定不变的,然而后面每个动态卷积单元的输入图像
I
i
I^i
Ii的维度则是变化的,因此为了和输入的提取特征F进行融合,就要先对
I
i
I^i
Ii进行维度调整,此外强化高频率细节图和动态卷积大核也是需要根据后面的流程来确定是否需要进行亚像素卷积获得。也就是说本文虽然最大的优点是没有在低分辨率图像上采样使用亚像素卷积,然而却在其他地方多次使用。
然后在模型的实现上还有一个细节之处,就是在实现4倍超分的时候,作者并没有直接一步到位,而是分成了2倍再2倍,其实这也类似于亚像素卷积时的技巧。
再者就是一个疑问:对于多阶段损失,从作者给出的形式来看,似乎只关心流程中分辨率和HR图像相等的生成图像,然而对于分辨率低于HR的图像则并没有给出监督,个人认为这里应该将真实HR图像降采样(不添加噪声和模糊),使用降采样的真实LR图像与流程中生成的相匹配分辨率的图像进行求损失,已达到对每个动态卷积阶段都进行监督。
写在后面
读过本文后,又粗略的读了一下2018年CVPR动态卷积应用于视频超分的一篇文章:Deep Video Super-Resolution Network Using Dynamic Upsampling Filters Without Explicit Motion Compensation。这里个人感觉本文的绝大多数方法可以在这篇视频超分中找到影子,例如两种动态卷积,例如一些细节:动态卷积权重是否要通道共享,卷积结果是否要添加残差(本文添加的是高频细节图)来提升边缘锋利度。不同之处是视频超分的文章由于要涉及到视频的时间轴,所以对于 X t X_t Xt图像,他将前后N的时间点的图像综合考虑来生成动态卷积大核与残差图像来作用于 X t X_t Xt上。