这篇文章的总体网络架构和DCSCN这篇很类似:通过构建一个具有skip connection结构的end-to-end的CNN网络。
文章推出的新模型被称之为SRDenseNet
,其利用Dense块作为基本结构,使用skip connection来结合低层特征信息和高层特征信息,然后通过反卷积网络进行图像重建,从而实现
L
R
→
H
R
LR\to HR
LR→HR的转变,并且也说明不同深度层的特征之间包含的信息是互补的。
参考文档:
①深度学习端到端超分辨率方法发展历程
Image Super-Resolution Using Dense Skip Connections
Abstract
- 作者引入稠密块作为SRDenseNet的基本结构。
Skip connection
将各个level的特征直接与图像重建输入端相连,此外Dense skip connection可以缓解网络深度带来的梯度消失问题。- SRDenseNet在Urban100、Set5、Set14、B100四个数据集上实现了SOAT的表现力。
1 Introduction
深度学习的方法在当时超分领域已经有了很好的表现,甚至一些全CNN网络已经有SOAT的表现力。
深度网络带来的好处:
- 因为感受野是和图像深度成正比的,图像深度越深,则相应深度的特征向量就能携带更多的信息,我们可以利用这些信息去预测出高分辨率图像。但是深度加深会带来梯度消失问题,因此作者采用skip connection的方式去缓解。
- Dense skip connection可以将低层与高层的特征信息融合起来,让信息跨层流动,来为图像重建带来更全面的信息。
- Skip connection让图像重建端得以重复利用feature map,让不同level的特征信息互为补充。而不是那种只是将卷积层相互串接的形式,它会造成网络学习到一些feature map中冗余的信息。
2 Related work
略
3 Method
整个SRDenseNet分为四部分:
- 卷积层。用于提取图像的低层特征信息。
- Dense块。用于提取图像高层特征信息。
- 反卷积层。用于学习上采样。
- 重建层。用于输出HR图像。
除了重建层以外,每个卷积层之后都要跟一个ReLU函数:
X
i
=
m
a
x
(
0
,
w
i
⋅
X
i
−
1
+
b
i
)
.
X_i = max(0, w_i\cdot X_{i-1} + b_i).
Xi=max(0,wi⋅Xi−1+bi).
现在我们来构建Loss:
设网络参数空间为:
Θ
=
{
W
i
,
B
i
}
\Theta = \{W_i,B_i\}
Θ={Wi,Bi},给定数据集
{
I
L
k
,
I
H
k
}
\{I_L^k,I_H^k\}
{ILk,IHk},采用MSE损失函数:
l
(
Θ
)
=
1
N
∑
k
=
1
N
∣
∣
F
(
I
L
k
,
Θ
)
−
I
H
k
∣
∣
2
2
.
l(\Theta) = \frac{1}{N}\sum^N_{k=1}||F(I_L^k,\Theta) - I_H^k||^2_2.
l(Θ)=N1k=1∑N∣∣F(ILk,Θ)−IHk∣∣22.
Note:
- F F F就是SRDenseNet网络所代表的非线性映射关系。
- 选用 M S E MSE MSE一个重要原因是其和PSNR的格式很接近,我们对MSE做优化相当于直接提升PSNR。
3.1 DenseNet blocks
如上图所示,是一个Dense块的内部结构,Dense块各个层之间的skip connection是通过concat在一起的,而Resnet块是通过求和加在一起的。这样的好处在于可以缓解梯度消失的问题以及加强了信息在各个layer之间的流动。从上图中可以看出,为了可以达到concat,每一张feature map都是同样的size。
上图这个Dense块可以分2个角度来看:
- 整个块分为8个layers,第 i i i个layer产生 16 × i 16\times i 16×i张feature map,最后一层产生128张特征图作为块的输出。
- 每一个层layer里面有一定数量的深度为 k = 16 k=16 k=16的feature map单元,论文中交代了 k k k是growth rate。不同的layer之间,具有相同数字标号的单元通过skip connection进行连接,也就是上图中五颜六色的线;且第 i i i个layer中标号 j ( j = 1 , 2 , ⋯ 8 ) j(j=1,2,\cdots8) j(j=1,2,⋯8)的输入为: X i j = m a x ( 0 , w i ⋅ [ X 1 j , X 2 j , ⋯ , X i − 1 j ] + b i ) X_i^j = max(0, w_i\cdot[X_1^j,X_2^j, \cdots,X_{i-1}^j] + b_i) Xij=max(0,wi⋅[X1j,X2j,⋯,Xi−1j]+bi)其中中括号中表示的各个layer输入的concat。
我们将整个网络拆分来看:
从上图中我们可以看出,后一层的网络是由前一层网络concat过来,再和前一层经过
m
a
x
(
0
,
w
⋅
[
X
1
,
X
2
,
⋯
]
)
max(0, w\cdot[X_1, X_2, \cdots])
max(0,w⋅[X1,X2,⋯])的结果合并而来的,因此对于每一层来说只有通道数为16的那一个单元是重新学习的,其余的都是之前层学习得到的,因此我们可以说这个新的单元和旧的单元所学的东西互为补充。
3.2 Deconvolution layers
以往的算法类似于SRCNN是直接对原图像进行Bicubic插值,然后用CNN进行特征提取等操作,但是这样会带来计算复杂度、计算资源消耗的增加;并且如DCSCN里说的那样,当up-scale-factor较大时,直接对原图像进行插值所提取的特征并不会比直接对原图像进行特征提取来的信息更多。
因此,结合前人的经验,本文将和DCSCN一样,将上采样放到反卷积子网络中去学习一个上采样滤波器,从而可以学习到一些图像细节。反卷积子网络其实就是个卷积网络,通过上采样的方式去预测出我们所需的
H
R
HR
HR图像。
总结一下反卷积子网络的好处:
- 首先,避免了对上采样的图像进行特征提取,从而可以降低计算复杂度,加速SR的重建过程。比如假设up-scale-factor= r r r,则计算资源的消耗将降低 r 2 r^2 r2。
- 其次,同样的网络深度下,本文的方法所产生的感受野是SRCNN的做法的 r 2 r^2 r2倍。感受野的增加会让重建端掌握更多的上下文信息,从而可以更好的预测出高分辨率图像。
在SRDenseNet中,反卷积子网络是由2个连续的 3 × 3 3\times 3 3×3卷积核组成,最后输出的通道数为256的feature map。
3.3 Combination of feature maps
在SRDenseNet中,有2处skip connection:一种是上面讲的Dense块中的跳跃连接,还有一种就是接下去要讲的在整个网络中,块和重建端之间的skip connection。
上图是三种结合各个level中feature map的方式,其中第三种 ( c ) (c) (c)是本文所采取的结合方式,作者在后续实验中也证明了,第三种带来的表现力要比前两种要好,证明了不同深度层的特征之间包含的信息是互补的。
描述下在 ( c ) (c) (c)中的前向过程:
- 首先,输入的低分辨率图像经过第一层CNN提取处低层的特征信息。
- 然后经过8个Dense块提取高层特征信息。
- 通过skip connection的方式将各个level的特征信息直接和反卷积子网络端相连。
- 中间加了一层Bottleneck layer是为了降低前面特征图concat导致图像张数(通道数)太多而带来的高计算复杂度问题,通过 1 × 1 1\times 1 1×1卷积层进行缩减。
- 接下来就是反卷积子网络,用于学习出一个上采样滤波器。
- 最后就是网络重建端,就是一个CNN网络,使用 3 × 3 3\times 3 3×3卷积核以及输出通道为1。
3.4 Bottleneck and Reconstruction layers
所谓的Bottleneck layer
其实就是用
1
×
1
1\times 1
1×1卷积核去缩小前面大量concat特征图带来高计算复杂度问题。通过这一层,feature map的数量减小到256,然后将这256张图通过反卷积子网络进行训练从而将
L
R
LR
LR图像转换成
H
R
HR
HR图像,并通过重建层最终转换成一张高分辨率图像。
这里补充下 1 × 1 1\times 1 1×1卷积核的性质:
- 相当于全连接层,外接激活函数来增加网络非线性度。
- 输入输出的map大小不变,但是可以用来改变通道。
- 最小卷积核,所含参数少。
4 Experiments
4.1 Datasets and metrics
作者从Imagenet从抽取5000张图片作为训练集;
Set5、Set14、B100、Urban100作为测试集;
PSNR/SSIM作为图像质量评价指标;
up-scale-factor=4
;
只对单幅图像的亮度通道做训练。
4.2 Implementation details
接下去是实验过程中的一些细节说明:
- H R HR HR图片是从无重叠目标的图片中裁剪出 100 × 100 100\times 100 100×100的子图,而 L R LR LR图片是将 H R HR HR图片通过up-scale-factor=4的双三次下采样得到的。
- 对于Ycbcr图像只训练亮度通道。
- Dense块的growth rate=16。
- 滤波器的大小统一设置成 3 × 3 3\times 3 3×3。
- 使用ReLU做激活函数且使用Adam做优化。
- 学习率初始化成1e-4,然后30个epoches之后变成1e-5。
- mini-batch设置成32.
- 60个epoches之后,如果训练没有提升表现力,则停止训练。
4.3 Benefit of feature combination
从上面图和表的结果来看,结合所有level的信息的SRDenseNet_All(比如低层特征、8个Dense块的高层特征)可以学习到不同层带来的补充信息,也就是说每一个level的特征图像都可以为图像重建带来表现力的提升。
4.4 Comparison with state-of-the-art methods
上图是SRDenseNet和其他算法的比较,从实验结果来看,SRDenseNet取得了最佳的表现。
5 Discussion and future work
①:SRDenseNet能取得上述的表现得益于网络深度,这是因为:
- 感受野的大小与网络深度成正比,故SRDenseNet这种深度网络模型可以在 L R LR LR图像中捕获非常多的细节去预测出 H R HR HR图像。
- 使用了多个非线性激活函数,来使得 L R → H R LR\to HR LR→HR的这种映射具有很好的拟合能力。
②:但是深度网络的深度也会带来梯度消失问题,因此作者采用Dense块,稠密块中的skip connection可以缓解这一问题。更重要的是,在稠密块中,随着层的加深,后一层会在前一层的已学习到的feature map中进一步学习到一个通道数为growth rate=16的特征图,这样就带来了补充信息的学习,解决了之前单一串联CNN网络会学习到冗余的特征信息的缺陷,而且实验证明这种方式确实带来了表现力的提升。
③:使用连续的反卷积网络可以增加图像重建的表现力,它可以学习到一个上采样滤波器。
④:实验证明:low-level和high-level,即将低层和8个Dense块提取的高层特征信息进行skip connection可以为图像重建成 H R HR HR带来更多丰富的信息。
⑤:SRDenseNet也具有较快的训练和推断速率:
- Bottleneck layer使用 1 × 1 1\times 1 1×1的卷积层来减小前期concat导致的过多feature map的问题,减少了计算复杂度。
- 将反卷积层用于特征提取层之后,而不是像SRCNN那样先上采样再特征提取,这样也是减小计算复杂度的一种方式。
- Dense块中使用growth rate=16,意味着每一层只需要学习通道数为16的feature map就可以了,因为后一层只比前一层多一个通道数为16的特征图,其余的都在前一层学习过了。