Deep Back-Projection Networks For Super-Resolution:CVPR 2018
paper:https://arxiv.org/pdf/1803.02735v1.pdf code:https://github.com/alterzero/DBPN-Pytorch
1. Relative work
intro里边提到目前图像SR(超分辨率)的DL模型的四种。分别是
Predefined upsampling:在进行特征提取前就将图像插值Single upsampling:在输出前进行上采样(采用sub-pixel比较好?)Progressive upsampling:在特征提取过程中逐步上采样Iterative up and downsampling:迭代式的上采样及下采样(本文)
2. Method
核心:残差学习!!!!!
2.1 Up-projection unit
公式化
H
0
t
=
(
L
t
−
1
∗
p
t
)
↑
s
(
1
)
\quad H_{0}^{t}=\left(L^{t-1} * p_{t}\right) \uparrow_{s} \ \ \ \ (1)
H0t=(Lt−1∗pt)↑s (1)
L
0
t
=
(
H
0
t
∗
g
t
)
↓
s
(
2
)
\quad L_{0}^{t}=\left(H_{0}^{t} * g_{t}\right) \downarrow_{s} \ \ \ \ (2)
L0t=(H0t∗gt)↓s (2)
e
t
l
=
L
0
t
−
L
t
−
1
(
3
)
\quad e_{t}^{l}=L_{0}^{t}-L^{t-1} \ \ \ \ (3)
etl=L0t−Lt−1 (3)
H
1
t
=
(
e
t
l
∗
q
t
)
↑
s
(
4
)
\quad H_{1}^{t}=\left(e_{t}^{l} * q_{t}\right) \uparrow_{s} \ \ \ \ (4)
H1t=(etl∗qt)↑s (4)
H
t
=
H
0
t
+
H
1
t
(
5
)
\quad H^{t}=H_{0}^{t}+H_{1}^{t} \ \ \ \ (5)
Ht=H0t+H1t (5)
L
t
−
1
L^{t-1}
Lt−1 就是上一个Down-projection unit的输出,是当前迭代LR(low-resolution)的原型特征图,将其卷积并上采样得到当前迭代的HR(high-resolution)特征图原型
H
0
t
H_{0}^{t}
H0t得到HR特征图原型
H
0
t
H_{0}^{t}
H0t以后怎么得到当前迭代的最终版本的HR特征图呢?答案是学习残差,学习原型
H
0
t
H_{0}^{t}
H0t到最终版本H^{t}的残差
H
1
t
H^{t}_1
H1t怎么学习残差呢?首先将HR原型
H
0
t
H_{0}^{t}
H0t卷积并下采样得到增强版本的LR特征图
L
0
t
L_{0}^{t}
L0t。将增强版本的LR特征图
L
0
t
L_{0}^{t}
L0t与LR原型
L
t
−
1
L^{t-1}
Lt−1 相减得到LR的残差
e
t
l
e_{t}^{l}
etl自然地,将LR残差
e
t
l
e_{t}^{l}
etl卷积并上采样便得到了HR残差
H
1
t
H_{1}^{t}
H1t。得到HR残差以后,done
2.2 Down-projection unit
公式化
L
0
t
=
(
H
t
∗
g
t
′
)
↓
s
(
6
)
L_{0}^{t}=\left(H^{t} * g_{t}^{\prime}\right) \downarrow_{s} \ \ \ \ (6)
L0t=(Ht∗gt′)↓s (6)
H
0
t
=
(
L
0
t
∗
p
t
′
)
↑
s
(
7
)
H_{0}^{t}=\left(L_{0}^{t} * p_{t}^{\prime}\right) \uparrow_{s} \ \ \ \ (7)
H0t=(L0t∗pt′)↑s (7)
e
t
h
=
H
0
t
−
H
t
(
8
)
e_{t}^{h}=H_{0}^{t}-H^{t} \ \ \ \ (8)
eth=H0t−Ht (8)
L
1
t
=
(
e
t
h
∗
g
t
′
)
↓
s
(
9
)
L_{1}^{t}=\left(e_{t}^{h} * g_{t}^{\prime}\right) \downarrow_{s} \ \ \ \ (9)
L1t=(eth∗gt′)↓s (9)
L
t
=
L
0
t
+
L
1
t
(
10
)
L^{t}=L_{0}^{t}+L_{1}^{t} \ \ \ \ (10)
Lt=L0t+L1t (10)down-projection unit的目的是根据上一次迭代的HR特征得到表征力更强的LR特征为下一次的up-projection做准备
H
t
H^{t}
Ht 就是上一个Up-projection unit的输出,是当前迭代HR(low-resolution)的原型特征图,将其卷积并下采样
L
0
t
L_{0}^{t}
L0t得到当前迭代的LR(high-resolution)特征图原型得到LR特征图原型
L
0
t
L_{0}^{t}
L0t以后怎么得到当前迭代的最终版本的LR特征图呢?答案是学习残差,学习原型
L
0
t
L_{0}^{t}
L0t到最终版本H^{t}的残差
L
1
t
L^{t}_1
L1t怎么学习残差呢?首先将LR原型
L
0
t
L_{0}^{t}
L0t卷积并上采样得到增强版本的HR特征图
H
0
t
H_{0}^{t}
H0t。将增强版本的HR特征图
H
0
t
H_{0}^{t}
H0t与HR原型
H
t
H^{t}
Ht相减得到HR的残差
e
t
h
e_{t}^{h}
eth自然地,将HR残差
e
t
h
e_{t}^{h}
eth卷积并下采样便得到了LR残差
L
1
t
L_{1}^{t}
L1t。得到LR残差以后,done显然,是up-projection unit的一个逆过程
2.3 Dense Up-projection Unit
Dense Up-projection Unit与Up-projection Unit的唯一区别在于输入。Dense Up-projection Unit的输入为浅层的每一个Down-projection unit的输出concat后的特征图。concat以后经过1*1的卷积层降维,再进入一个普通的Up-projection Unit。Dense Down-projection Unit同理
2.4 Network Architecture
Initial feature extraction:通过两个3*3的卷积层进行初始化的特征提取Back-projection stages:交替式的Up-projection Unit和Down projection Unit积木Reconstruction:将所有Up-projection Unit的输出HR特征图concat起来然后进入一个3*3的卷积层,得到最后的HR图片
2.5 Details
使用大卷积核
2x enlargement:conv 6*6 filters,strides 2 ,padding 24x enlargement:conv 8*8 filters,strides 4 ,padding 28x enlargement:conv 12*12 filters,strides 8 ,padding 2 抛弃BatchNorm以及DropoutOptimizer:adam with momentum 0.9 and weight decay 1e-4Loss:MSE
2.6 Supplement
本文源码中采用ConvTranspose2d上采样,也可以采用Sub-Pixel(pytorch中为nn.PixelShuffle)进行上采样Sub-Pixel由Real-Time Single Image and Video Super-Resolution Using an Efficient Sub-Pixel Convolutional Neural Network 提出