风格迁移是CV的一个应用,通过融合风格图片和内容图片,实现图片的风格变换,“人人都是艺术家”
最早在论文《A Neural Algorithm of Artistic Style》中提出,但是这种方法是用“训练”的思想来做风格迁移,每次都要单独训练,速度很慢
快速风格迁移由《Perceptual Losses for Real-Time Style Transfer Super-Resolution》提出,主要是将风格迁移的训练和应用分离,可以快速应用
如https://github.com/hzy46/fast-neural-style-tensorflow 分享了几个案例
以及论文里给的例子
下面说具体原理
1. 图片的风格迁移问题,是给定原始图片
和风格图
片,得到转换了风格的图片
的过程
2. 则原始图片
表示了内容Content(C);风格图
表示了风格Style(S);转换了风格的图片
表示生成的图片
3. 那么生成目标图片的损失函数就是内容损失
和风格损失
的加权和
J(G)=αJcontent(C,G)+βJstyle(S,G)
J
(
G
)
=
α
J
c
o
n
t
e
n
t
(
C
,
G
)
+
β
J
s
t
y
l
e
(
S
,
G
)
4. 注意到现有的CV模型如VGG16,各个卷积层本质上已经是对图片进行了
特征提取
,且高阶的层包含了
内容信息
,低阶的层包含了
纹理的信息
,各个特种层之间的相关关系表达了
风格信息
5. 内容信息用两个图在某一层的取值差来表示
lϕ,jfeat(ŷ ,y)=1CjHjWj‖ϕj(ŷ )−ϕj(y)‖22
l
f
e
a
t
ϕ
,
j
(
y
^
,
y
)
=
1
C
j
H
j
W
j
‖
ϕ
j
(
y
^
)
−
ϕ
j
(
y
)
‖
2
2
ϕ ϕ 表示预训练模型如VGG16;
j j 表示第j个卷积层;
表示图x在模型 ϕ ϕ 的第j层的激活值;
ŷ y ^ 表示生成图G;
y y 表示原始图C;
表示特征图的尺寸,分别为通道数、高、宽
6. 风格信息用两个图在某一层的值得Gram矩阵的差值来表示,总的风格信息应有选定的多个层求和得到
lϕ,jstyle(ŷ ,y)=‖Gϕj(ŷ )−Gϕj(y)‖2F
l
s
t
y
l
e
ϕ
,
j
(
y
^
,
y
)
=
‖
G
j
ϕ
(
y
^
)
−
G
j
ϕ
(
y
)
‖
F
2
F F 表示Frobenius norm,F-范数,一种矩阵范数
表示图x在模型 ϕ ϕ 的第j层的激活值的Gram矩阵
7. 风格信息包含了颜色、纹理、模式等样式,并期望融合这些样式来表达风格,Gram矩阵最终尺寸为c*c
Gϕj(x)c,c′=1CjHjWj∑h=1Hj∑w=1Wjϕj(x)h,w,cϕj(x)h,w,c′
G
j
ϕ
(
x
)
c
,
c
′
=
1
C
j
H
j
W
j
∑
h
=
1
H
j
∑
w
=
1
W
j
ϕ
j
(
x
)
h
,
w
,
c
ϕ
j
(
x
)
h
,
w
,
c
′
Gϕj(x)c,c′ G j ϕ ( x ) c , c ′ 表示特征图中 c,c′ c , c ′ 两个通道间的Gram矩阵/相关性
ϕj(x)h,w,c ϕ j ( x ) h , w , c 表示图x在模 ϕ ϕ 中第j层的激活值(特征图)的高、宽、通道坐标为h,w,c位置的值
大意为卷积提取了某一方面的特征,如纹理层、颜色层等,通过上式融合不同的特征,两种特征共现越频繁相关性越大、数值越大,以此来表示一个图的风格信息。
8. 最后回到论文的流程图,整体结构
生成网络
和
损失网络
组成,前者是要训练的目标,用于风格转移图片;后者用于计算损失;训练王成后,对于同一种风格,可以随意更换内容图片进行风格转移(暂时的理解)
x x 表示输入的图片,这里和一致
fW f W 表示生成网络,权重参数为 W W
表示风格图片
ŷ y ^ 表示风格迁移后的图片
yc y c 表示原始的内容图片,与 x x <script type="math/tex" id="MathJax-Element-26">x</script>一致
则此图表示,取其中四个层的结果计算风格,取高阶一个层的结果计算内容。
实践https://zhuanlan.zhihu.com/p/24383274
https://blog.csdn.net/j2IaYU7Y/article/details/79622135
https://blog.csdn.net/u010900574/article/details/53427544