风格迁移是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)

4. 注意到现有的CV模型如VGG16,各个卷积层本质上已经是对图片进行了特征提取,且高阶的层包含了内容信息,低阶的层包含了纹理的信息,各个特种层之间的相关关系表达了风格信息
5. 内容信息用两个图在某一层的取值差来表示
lfeatϕ,j(y^,y)=1CjHjWjϕj(y^)ϕj(y)22

ϕ表示预训练模型如VGG16;
j表示第j个卷积层;
ϕj(x)表示图x在模型ϕ的第j层的**值;
y^表示生成图G;
y表示原始图C;
CjHjWj表示特征图的尺寸,分别为通道数、高、宽
6. 风格信息用两个图在某一层的值得Gram矩阵的差值来表示,总的风格信息应有选定的多个层求和得到
lstyleϕ,j(y^,y)=Gjϕ(y^)Gjϕ(y)F2

F表示Frobenius norm,F-范数,一种矩阵范数
Gjϕ(x)表示图x在模型ϕ的第j层的**值的Gram矩阵
7. 风格信息包含了颜色、纹理、模式等样式,并期望融合这些样式来表达风格,Gram矩阵最终尺寸为c*c
Gjϕ(x)c,c=1CjHjWjh=1Hjw=1Wjϕj(x)h,w,cϕj(x)h,w,c

Gjϕ(x)c,c表示特征图中c,c两个通道间的Gram矩阵/相关性
ϕj(x)h,w,c表示图x在模ϕ中第j层的**值(特征图)的高、宽、通道坐标为h,w,c位置的值
大意为卷积提取了某一方面的特征,如纹理层、颜色层等,通过上式融合不同的特征,两种特征共现越频繁相关性越大、数值越大,以此来表示一个图的风格信息。
8. 最后回到论文的流程图,整体结构生成网络损失网络组成,前者是要训练的目标,用于风格转移图片;后者用于计算损失;训练王成后,对于同一种风格,可以随意更换内容图片进行风格转移(暂时的理解)
x表示输入的图片,这里和yc一致
fW表示生成网络,权重参数为W
ys表示风格图片
y^表示风格迁移后的图片
yc表示原始的内容图片,与 x一致
快速风格迁移
则此图表示,取其中四个层的结果计算风格,取高阶一个层的结果计算内容。

实践https://zhuanlan.zhihu.com/p/24383274
https://blog.csdn.net/j2IaYU7Y/article/details/79622135
https://blog.csdn.net/u010900574/article/details/53427544

相关文章: