固定风格任意内容高分辨率实时风格转换
本篇博客中标黄的字属于吐槽
摘要
本文解决《A neural algorithm of artistic style》一文中的问题,即图像风格转换。1.对于这种问题一般都是使用一个神经网络根据逐像素loss( per-pixel loss)来完成的。2.有研究表明基于从训练好的神经网络中提取出的高级图像特征通过定义及优化感知loss( perceptual loss)可以生成高分辨率的图像。本文就基于上面的两点,使用perceptual loss来训练神经网络以实时地进行图像转换。同时我们还用高分辨率的图像进行了实验,使用感知loss( perceptual loss)(perceptual loss x1)来代替之前的逐像素loss( per-pixel loss)获得了较好的效果。
关键词: 风格转换;超分辨率;深度学习
1.引言
本文针对的是图像转换问题。
- 一般的方法是使用监督学习的方式训练一个神经网络,使用per-pixel loss来衡量输出与ground-truth的差异,这种方法在测试的时候很有效率,数据只需要经过一个训练好的网络中。でも!逐像素loss不能发现图中的感知信息(perceptual)的差异,比如如果两张图像只差一个像素的偏移,内容几乎一样但是per-pixel loss 却大不相同。
- 研究表明我们可以基于perceptual loss使用从训练好的网络里提取出的图像的高级特征来生成高分辨率的图像。最小化loss生成图像,但是解决这种优化问题有点慢。
所以本文横空出世!!
本文结合了上述两种方法的优点。我们使用perceptual loss(perceptual loss x2)来训练神经网络,这个perceptual loss方程基于预先训练好的网络中提取的高级特征!(论文作者内心os:机不机智!又是一篇top!) 这种方法比per-pixel loss更加鲁棒,在测试的时候也能到达实时。
我们的实验有两个任务:1.图像风格转换;2.对单个图像的超分辨率。这两个任务都不好做,1.风格转换没有正确或固定的输出;2.有很多张高分辨率的图像可以生成同一张低分辨率的图像。
我们的结果不管是质量上还是目标方程的值上都跟《A neural algorithm of artistic style》这篇文章差不多,但是我们速度上吊打它,比它快3个数量级。
2.相关工作
前馈神经网络图像转换
有好多人都用前馈神经网络来做图像转换,大多数使用per-pixel loss,本文也用前馈神经网络来做这事儿!
感知优化
有好多人都在用感知优化(perceptual optimization)来生成图像,这里的感知的东西来自于卷积网络提取出来的高级特征。
本文与参考文献[6]做的事差不多,只不过但是[6]使用per-pixel loss,而我们使用perceptual loss(perceptual loss x3)
3.方法
如图所示,我们的系统分为两部分:一个图片转换网络
f
W
f_W
fW和一个用来定义loss函数(
l
1
,
.
.
.
,
l
k
l_1,...,l_k
l1,...,lk)的loss网络
ϕ
\phi
ϕ。图片转换网络是一个深度残差卷积神经网络,它的权值参数是
W
W
W,它利用映射
y
^
=
f
W
(
x
)
\hat{y}=f_W(x)
y^=fW(x)来将输入图像
x
x
x转换成输出图像
y
^
\hat{y}
y^。loss 网络是训练好的图像分类网络(VGG),它定义了perceptual loss函数,该函数描述图片之间内容和风格的差距。loss网络在整个训练过程中参数保持不变。每个loss函数都计算出一个标量值
l
i
(
y
^
,
y
i
)
l_i(\hat{y},y_i)
li(y^,yi),该值衡量输出图像
y
^
\hat{y}
y^与目标图像
y
i
y_i
yi的差距。图片转换网络使用随机梯度下降的方式来最小化总loss函数。这个总loss函数是各个loss函数的带权合并:
loss 网络
ϕ
\phi
ϕ定义特征重建loss
l
f
e
a
t
ϕ
l^\phi_{feat}
lfeatϕ以及风格重建loss
l
s
t
y
l
e
ϕ
l^\phi_{style}
lstyleϕ分别衡量图片内容与风格上的差异。对于特定的输入图像
x
x
x,我们有content target
y
c
y_c
yc 和 style target
y
s
y_s
ys。对于风格转换部分,content target
y
c
y_c
yc就是输入
x
x
x, style target
y
s
y_s
ys就是输入的风格图像。输出的图像
y
^
\hat{y}
y^应该具有
x
=
y
c
x=y_c
x=yc的内容与
y
s
y_s
ys的风格。本文一种模型对应一种图像风格。对于单张图像超分辨率,输入的图像
x
x
x是低分辨率的,content target
y
c
y_c
yc是高分辨率的,此时不需要用到风格重建loss,本文一种模型对应一个超分辨率因子。
3.1 图像转换网络
本文的图像转换网络大致就抄袭参考文献[42]提出来的那个网络。(牛逼啊兄弟!) 本文不使用任何池化层,而使用一种新型卷积方式(strided convolutions)和反卷积在网络中进行上采样和下采样。我们的网络体由参考文献[44]用到的5个残差块组成,所有的非残差卷积层之后都进行空间批处理标准化以及ReLU激活函数以保证图像的像素值在[0,255]之间。除了第一层和最后一层使用9x9的卷积核之外,其他卷积层都使用3x3的卷积核。具体网络可以在补充材料中找到。
输入与输出 训练时,对于风格转换的输入和输出都是3x256x256的彩色图像。对于上采样因子为
f
f
f的超分辨率,输出是一个高分辨率的图像3x288x288,输入是低分辨率图像3x288/
f
f
fx288/
f
f
f。因为图像转换网络是全卷积的,在测试的时候可以使用任何分辨率图像作为输入。
上采样和下采样
对于上采样因子为
f
f
f的超分辨率,我们在
l
o
g
2
f
log_2f
log2f个1/2步长的卷积层之后使用残差块。对于图像转换网络,我们在残差块之后使用两个步长为2的卷积层用来对输入下采样然后再使用两个1/2步长的卷积层来上采样。【文中此处描述了上采样与下采样的好处】
残差连接
文献[43]提出使用残差连接训练深度网络对图像进行分类,提出残差连接可以使网络轻易地具有识别功能。所以我们的网络体由几个残差块组成,每个残差块包含3x3的卷积层。我们使用[44]中的残差块设计。
3.2 Perceptual Loss 函数
我们定义两个perceptual loss函数分别用来衡量两张图像的高级感知差距和语义差距。
特征重建loss
我们尽可能地生成与原图像相似的特征表示,该特征表示使用loss网络
ϕ
\phi
ϕ提取出来(本文中的loss网络是VGG16)。我们使用
ϕ
j
(
x
)
\phi_j(x)
ϕj(x)来表示loss网络
ϕ
\phi
ϕ的输入是x时的第j层网络激活层。如果j是一个卷积层,那么
ϕ
j
(
x
)
\phi_j(x)
ϕj(x)是一个shape为
C
j
×
H
j
×
W
j
C_j \times H_j \times W_j
Cj×Hj×Wj的feature map。那么特征重建loss就是特征表示的欧氏距离:
如下图所示,如果我们使用网络的浅层最小化特征重建loss,得到的图像跟原图几乎没差。而本文使用网络的深层,这样图像的内容和空间结构都保留下来,而颜色、纹理以及精密的形状则会丢失。
风格重建loss
特征重建loss得到的是图像的内容,而丢失了图像的颜色和细节等。这些都是由风格图像提供的,所以我们也需要得到它们。我们定义Gram 矩阵
G
j
ϕ
(
x
)
G_j^{\phi}(x)
Gjϕ(x)为
C
j
×
C
j
C_j \times C_j
Cj×Cj的矩阵:
我们可以将
ϕ
j
(
x
)
\phi_j(x)
ϕj(x) reshape 成一个
C
j
×
H
j
W
j
C_j \times H_jW_j
Cj×HjWj的矩阵
ψ
\psi
ψ,那么
G
j
ϕ
(
x
)
=
ψ
ψ
T
/
C
j
H
j
W
j
G_j^{\phi}(x)=\psi\psi^T/C_jH_jW_j
Gjϕ(x)=ψψT/CjHjWj。
风格重建loss等于输出与目标破图像的Gram矩阵的差值的Frobenius范数的平方。即:
如下图所示,当我们最小化风格重建loss的时候,几层指定的网络输出的结果保留了目标图像的风格特征而丢失了空间结构。越深的网络层次提取到越大尺度的特征。为了从多层网络J中进行风格重建,我们定义
l
s
t
y
l
e
ϕ
,
J
(
y
^
,
y
)
l_{style}^{\phi,J}(\hat{y},y)
lstyleϕ,J(y^,y)为多层网络生成loss的总和,其中
j
∈
J
j \in J
j∈J。
3.3 简单loss函数
除了上面的两个loss函数,我们还定义了两个简单的loss函数,其仅仅取决于低层像素信息。
像素Loss
像素loss是两张范式图像的欧式距离。(目标图像
y
y
y,输出图像
y
^
\hat{y}
y^)。若两者形状都为
C
×
H
×
W
C \times H \times W
C×H×W,那么像素loss定义为
l
p
i
x
e
l
(
y
^
,
y
)
=
∣
∣
y
^
−
y
∣
∣
2
2
/
C
H
W
l_{pixel}(\hat{y},y)=||\hat{y}-y||_2^2 /CHW
lpixel(y^,y)=∣∣y^−y∣∣22/CHW
总变差正则化
为了使输出图像的空间结构更加平滑,我们使用总变差正则化
l
T
V
(
y
^
)
l_{TV}(\hat{y})
lTV(y^)。
4.实现
https://github.com/RanFeng/fast-neural-style-tensorflow
参考
参考文献[6]《Understanding Deep Image Representations by Inverting Them》
参考文献[42]《Unsupervised representation learning with deep convolutional generative adversarial networks》
参考文献[43] 《Deep residual learning for image recognition.》
参考文献[44] Training and investigating residual nets. http://torch.ch/blog/2016/02/04/resnets.html
本网络使用的数据集下载链接:COCO dataset.
参考链接 https://www.jiqizhixin.com/articles/2018-05-15-5