文章目录
- 1、神经风格迁移
- 2、生成图片的代价函数
- THE END
1、神经风格迁移
\qquad
神经风格迁移就是将一幅原有的图片(content picture, C),对照着一幅风格图片(style picture, S),生成一幅新的图片(generated picture, G),如下图所示:
2、生成图片的代价函数
\qquad
生成图片的代价函数由两部分组成,一部分称为内容代价(content cost),另一部分称为风格代价(style cost),
J
(
G
)
=
α
J
c
o
n
t
e
n
t
(
C
,
G
)
+
β
J
s
t
y
l
e
(
S
,
G
)
J(G) = \alpha J_{content}(C,G)+\beta J_{style}(S,G)
J(G)=αJcontent(C,G)+βJstyle(S,G)
\qquad
神经风格迁移图片生成的过程如下所示:
- 初始化生成图片G为一幅白噪声图,并规定图片G的尺寸,e.g., 100×100×3
- 使用梯度下降算法来优化生成图片G的代价函数,并更新图片G:
G : = G − ∂ ∂ G J ( G ) G:=G-\frac{\partial }{\partial G}J(G) G:=G−∂G∂J(G)
\qquad 内容代价函数的定义方式如下所示:
- [1] 选择一个卷积神经网络中的某一层 l l l, l l l不要太深也不要太浅
- [2] 使用一个预先训练好的卷积网络,如VGG network
- [3] 令 a [ l ] ( C ) a^{[l](C)} a[l](C)和 a [ l ] ( G ) a^{[l](G)} a[l](G)分别表示内容图片C和生成图片G在神经网络第 l l l层的激活值
- [4] 如果
a
[
l
]
(
C
)
a^{[l](C)}
a[l](C)和
a
[
l
]
(
G
)
a^{[l](G)}
a[l](G)十分相似,则内容图片和生成图片有相似的内容,
J c o n t e n t ( C , G ) = 1 2 ∣ ∣ a [ l ] ( C ) − a [ l ] ( G ) ∣ ∣ 2 J_{content}(C,G)=\frac{1}{2}||a^{[l](C)}-a^{[l](G)}||^2 Jcontent(C,G)=21∣∣a[l](C)−a[l](G)∣∣2
\qquad
要定义风格代价函数,首先需要介绍风格矩阵,表示表示输入图片在神经网络某一层
l
l
l不同通道之间激活值的相关系数矩阵,如令
a
i
,
j
,
k
[
l
]
a_{i,j,k}^{[l]}
ai,j,k[l]表示在第
k
k
k个通道下,
(
i
,
j
)
(i, j)
(i,j)位置的激活值。令
G
[
l
]
(
S
)
G^{[l](S)}
G[l](S)表示风格图片在第
l
l
l层的风格矩阵,其维度为
n
c
[
l
]
×
n
c
[
l
]
n_c^{[l]}×n_c^{[l]}
nc[l]×nc[l],其中
n
c
[
l
]
n_c^{[l]}
nc[l]表示第
l
l
l层的通道数量。
\qquad
风格图片S的风格矩阵
G
[
l
]
(
S
)
G^{[l](S)}
G[l](S)中每一个元素的定义方式如下所示:
G
k
,
k
′
[
l
]
(
S
)
=
∑
i
=
1
n
H
[
l
]
∑
j
=
1
n
W
[
l
]
a
i
,
j
,
k
[
l
]
(
S
)
a
i
,
j
,
k
′
[
l
]
(
S
)
G_{k,k'}^{[l](S)}=\sum_{i=1}^{n_H^{[l]}}\sum_{j=1}^{n_W^{[l]}}a_{i,j,k}^{[l](S)}a_{i,j,k'}^{[l](S)}
Gk,k′[l](S)=i=1∑nH[l]j=1∑nW[l]ai,j,k[l](S)ai,j,k′[l](S)
\qquad
生成图片G的风格矩阵
G
[
l
]
(
G
)
G^{[l](G)}
G[l](G)中每一个元素的定义方式如下所示:
G
k
,
k
′
[
l
]
(
G
)
=
∑
i
=
1
n
H
[
l
]
∑
j
=
1
n
W
[
l
]
a
i
,
j
,
k
[
l
]
(
G
)
a
i
,
j
,
k
′
[
l
]
(
G
)
G_{k,k'}^{[l](G)}=\sum_{i=1}^{n_H^{[l]}}\sum_{j=1}^{n_W^{[l]}}a_{i,j,k}^{[l](G)}a_{i,j,k'}^{[l](G)}
Gk,k′[l](G)=i=1∑nH[l]j=1∑nW[l]ai,j,k[l](G)ai,j,k′[l](G)
\qquad
第
l
l
l层的风格代价函数的定义如下所示:
J
s
t
y
l
e
[
l
]
(
S
,
G
)
=
1
(
2
n
H
[
l
]
n
W
[
l
]
n
C
[
l
]
)
2
∑
k
∑
k
′
(
G
k
,
k
′
[
l
]
(
S
)
−
G
k
,
k
′
[
l
]
(
G
)
)
2
J_{style}^{[l]}(S,G)=\frac{1}{(2n_H^{[l]}n_W^{[l]}n_C^{[l]})^2}\sum_k\sum_{k'}(G_{k,k'}^{[l](S)}-G_{k,k'}^{[l](G)})^2
Jstyle[l](S,G)=(2nH[l]nW[l]nC[l])21k∑k′∑(Gk,k′[l](S)−Gk,k′[l](G))2
\qquad
通常风格代价函数需要对所有神经网络层中的进行累和,表示整个网络的风格代价函数:
J
s
t
y
l
e
(
S
,
G
)
=
∑
l
λ
[
l
]
J
s
t
y
l
e
[
l
]
(
S
,
G
)
J_{style}(S,G)=\sum_l \lambda^{[l]} J_{style}^{[l]}(S,G)
Jstyle(S,G)=l∑λ[l]Jstyle[l](S,G)