赞
踩
图像风格迁移即把图像A的风格和图像B的内容按照一定比例结合,输出具备图像A风格和图像B内容的图像C.
[github传送门1]https://github.com/anishathalye/neural-style
[github传送门2]https://github.com/Quanfita/Neural-Style/tree/master/examples
系列文章
(二)快速图像风格转换
(三)快速图像风格转换代码解析
(四)快速图像风格迁移训练模型载入及处理图像
图像风格迁移包括:
图形内容获取即图像特征提取,目前较成熟的特征提取非卷积神经网络莫属,图像风格迁移使用VGGNet提取图像特征.原始图像使用VGG处理,图像特征值可从每一层提取VGGNet抽取图像特征,输出内容分类.
看图说话:VGGNet 16层模型为例.
VGGnet浅层网络提取检测点,线,亮度等较简单的特征,还原图像效果较好,特征值基本保留了原始图像内容的形状,位置,颜色和纹理等信息,深层网络提取较为复杂的特征,如物体轮廓,即图像中物体的形状和位置,但是丢失了部分颜色和纹理信息.
因此,提取图像内容使用VGGNet浅层计算的特征值,通过提取的特征值还原内容图.
还原方法:梯度下降法,即利用梯度下降计算内容损失函数.
序号 | 变量 | 说明 |
---|---|---|
1 | p ⃗ \vec{p} p | 原始图像 |
2 | x ⃗ \vec{x} x | 生成图像 |
3 | l l l | 卷积层数 |
4 | P i j l P_{ij}^{l} Pijl | 原始图像 p ⃗ \vec{p} p 在第 l l l层卷积上的"原始"特征值,即每一个卷积层的输入,还未进行卷积计算, i i i为卷积的第i个通道, j j j表示卷积的第 j j j个位置,通常卷积的值为三维arrary(height, width, channel),若将图片拉伸成一个向量,则对应 i i i为channel, j j j为height × \times ×width |
4 | F i j l F_{ij}^{l} Fijl | 原始图像
p
⃗
\vec{p}
p
在第
l
l
l层卷积上经过卷积核filter 计算出的特征值,
i
i
i为卷积的第i个通道,
j
j
j表示卷积的第
j
j
j个位置,通常卷积的值为三维arrary(height, width, channel),若将图片拉伸成一个向量,则对应
i
i
i为channel,
j
j
j为height
×
\times
×width |
5 | L c o n t e n t ( p ⃗ , x ⃗ , l ) L_{content}(\vec{p},\vec{x},l) Lcontent(p ,x ,l) | 内容损失函数 |
内容损失为:
L
o
s
s
c
o
n
t
e
n
t
(
p
⃗
,
x
⃗
,
l
)
=
1
2
∑
i
,
j
(
F
i
j
l
−
P
i
j
l
)
2
Loss_{content}(\vec{p},\vec{x},l)=\frac{1}{2}\sum_{i,j}(F_{ij}^{l}-P_{ij}^{l})^2
Losscontent(p
,x
,l)=21i,j∑(Fijl−Pijl)2
结果:
图形风格使用卷积层特征值的格拉姆(Gram)矩阵表示.
Gram矩阵:
n
n
n维欧式空间任意
k
k
k(
k
≤
n
k\leq n
k≤n)个向量,
α
1
⃗
,
α
2
⃗
,
⋯
 
,
α
k
⃗
\vec{\alpha_1},\vec{\alpha_2},\cdots,\vec{\alpha_k}
α1
,α2
,⋯,αk
内积组成的矩阵:
Δ
(
α
1
⃗
,
α
2
⃗
,
⋯
 
,
α
k
⃗
)
=
[
(
α
1
⃗
,
α
1
⃗
)
(
α
1
⃗
,
α
2
⃗
)
⋯
(
α
1
⃗
,
α
k
⃗
)
(
α
2
⃗
,
α
1
⃗
)
(
α
2
⃗
,
α
2
⃗
)
⋯
(
α
2
⃗
,
α
k
⃗
)
⋮
⋮
⋱
⋮
(
α
k
⃗
,
α
1
⃗
)
(
α
k
⃗
,
α
2
⃗
)
⋯
(
α
k
⃗
,
α
k
⃗
)
]
\Delta(\vec{\alpha_1},\vec{\alpha_2},\cdots,\vec{\alpha_k})=
即为
k
k
k个向量
α
1
⃗
,
α
2
⃗
,
⋯
 
,
α
k
⃗
\vec{\alpha_1},\vec{\alpha_2},\cdots,\vec{\alpha_k}
α1
,α2
,⋯,αk
的格拉姆矩阵.
矩阵内积:行向量乘以列向量,结果是一个数,也称点积,表示为:
(
α
1
⃗
,
α
2
⃗
)
=
α
1
⃗
T
α
2
⃗
(\vec{\alpha_1},\vec{\alpha_2})=\vec{\alpha_1}^T\vec{\alpha_2}
(α1
,α2
)=α1
Tα2
序号 | 变量 | 说明 |
---|---|---|
1 | p ⃗ \vec{p} p | 原始图像 |
2 | x ⃗ \vec{x} x | 生成图像 |
3 | l l l | 卷积层数 |
4 | A i j l A_{ij}^{l} Aijl | 原始图像 p ⃗ \vec{p} p 在第 l l l层卷积上的"原始"Gram矩阵,即每一个卷积层的输入,还未进行卷积计算, i i i为卷积的第i个通道, j j j表示卷积的第 j j j个位置,通常卷积的值为三维arrary(height, width, channel),若将图片拉伸成一个向量,则对应 i i i为channel, j j j为height × \times ×width |
5 | G i j l G_{ij}^{l} Gijl | 原始图像
p
⃗
\vec{p}
p
在第
l
l
l层卷积上经过卷积核filter 计算出的Gram矩阵,
i
i
i为卷积的第i个通道,
j
j
j表示卷积的第
j
j
j个位置,通常卷积的值为三维arrary(height, width, channel),若将图片拉伸成一个向量,则对应
i
i
i为channel,
j
j
j为height
×
\times
×width |
6 | L c o n t e n t ( p ⃗ , x ⃗ , l ) L_{content}(\vec{p},\vec{x},l) Lcontent(p ,x ,l) | 内容损失函数 |
7 | N l N_l Nl | 第 l l l层卷积通道数, 1 ≤ i ≤ N l 1\leq i \leq N_l 1≤i≤Nl |
8 | M l M_l Ml | 第 l l l层卷积图像尺寸 M l = h e i g h t × w i d t h M_l=height\times width Ml=height×width, 1 ≤ j ≤ M l 1\leq j \leq M_l 1≤j≤Ml |
Gram矩阵元素:
G
i
,
j
l
=
∑
k
F
i
k
l
F
j
k
l
G_{i,j}^{l}=\sum_{k} F_{ik}^{l} F_{jk}^{l}
Gi,jl=k∑FiklFjkl
其中,
F
i
l
=
(
F
i
1
l
,
F
i
2
l
,
⋯
 
,
F
i
j
l
,
⋯
 
,
F
i
M
l
l
)
F_{i}^{l}=(F_{i1}^l,F_{i2}^l, \cdots,F_{ij}^l, \cdots, F_{iM_l}^{l})
Fil=(Fi1l,Fi2l,⋯,Fijl,⋯,FiMll)
Gram矩阵在一定程度上可以反应原始图像的"风格",风格损失函数为
L
o
s
s
s
t
y
l
e
(
p
⃗
,
x
⃗
,
l
)
Loss_{style}(\vec{p},\vec{x},l)
Lossstyle(p
,x
,l)
内容损失为:
L
o
s
s
s
t
y
l
e
(
p
⃗
,
x
⃗
,
l
)
=
1
4
N
l
2
M
l
2
∑
i
,
j
(
A
i
j
l
−
F
i
j
l
)
2
Loss_{style}(\vec{p},\vec{x},l)=\frac{1}{4N_{l}^{2}M_{l}^{2}}\sum_{i,j}(A_{ij}^{l}-F_{ij}^{l})^2
Lossstyle(p
,x
,l)=4Nl2Ml21i,j∑(Aijl−Fijl)2
其中,
1
4
N
l
2
M
l
2
\frac{1}{4N_{l}^{2}M_{l}^{2}}
4Nl2Ml21是归一化项,防止风格损失比内容损失过大.实际应用,有多层风格损失,加权值作为风格损失,即:
L
o
s
s
s
t
y
l
e
(
p
⃗
,
x
⃗
)
=
∑
l
w
l
L
o
s
s
s
t
y
l
e
(
p
⃗
,
x
⃗
,
l
)
Loss_{style}(\vec{p},\vec{x})=\sum_{l}w_{l}Loss_{style}(\vec{p},\vec{x},l)
Lossstyle(p
,x
)=l∑wlLossstyle(p
,x
,l)
其中,
w
l
w_l
wl为第l层卷积的权重.
结果:
将图像A的内容和图像B的风格相融合,即可获取图像C,C包含A的内容和B的风格.融合损失函数:
L
o
s
s
t
o
t
a
l
(
p
⃗
,
a
⃗
,
x
⃗
)
=
α
L
o
s
s
c
o
n
t
e
n
t
(
p
⃗
,
x
⃗
)
+
β
L
o
s
s
s
t
y
l
e
(
a
⃗
,
x
⃗
)
Loss_{total}(\vec{p}, \vec{a}, \vec{x})=\alpha Loss_{content}(\vec{p},\vec{x})+\beta Loss_{style}(\vec{a}, \vec{x})
Losstotal(p
,a
,x
)=αLosscontent(p
,x
)+βLossstyle(a
,x
)
其中,
α
,
β
\alpha,\beta
α,β是平衡内容损失和风格损失的超参数,如果
α
\alpha
α偏大,还原的图像包含的内容较多,
β
\beta
β偏大,还原的图像包含风格较多.
迁移结果.
[参考文献]
[1]A Neural Algorithm of Artistic Style
[2]Very Deep Convolutional Networks for Large-Scale Image Recognition
[3]https://blog.csdn.net/czp_374/article/details/81185603
[4]https://blog.csdn.net/juanjuan1314/article/details/79731457
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。