What is Style Transfer
Style Transfer, 风格转移,即把图片A变成图片B的风格,但保持图片A的内容不变,举个栗子,假设下图左是你自己的作品,中图是梵高的星空,右图则是风格转移算法的结果。

How to do it?
风格转移的实现方法很多,复杂的算法使用到GANs,其结果会非常的精美,但会需要(十分)强大的算力(和钱)。一些改进的方法能够显著将GANs类模型的计算成本控制在合理范围,例如将一张图片切割成很多小的方块,对每个小块进行风格转移,最后再将它们拼起来。
但实际上存在一种更简单更快速的方法——不需要用到GANs、只需要借助pre-trained image classification CNN,即可完成风格转换。理解其原理之前,必须先简单提一下CNN是如何完成image classification的,我们知道CNN classifier是由很多很多的CNN神经网络组成的,不同的CNN的kernel size不一样,较浅的layers的kernel size都比较小,这样可以抓取一些细微的特征,例如动物的毛发、金属表面的质感等等,较深的layers的kernel size会逐渐增大,这样可以抓取一些更完整的特征,例如眼睛、尾巴、车轮等等。可以发现,刚刚描述的较浅的layers描述的接近于一张图片的styles——油画画笔的texture、色块的分布等等,而较深的layers则描述的更多的是一张图片的内容——眼睛、尾巴、车轮等等。于是一个简单的风格转移模型就是利用CNN classifier不同的layer抓取的内容不一这个特点来实现快速、低成本的风格转移。
具体实现方法
需要利用的工具:VGG19(in Tensorflow), Python
(我们甚至不需要GPU)
Flow
-
将input图片feed进一个pre-trained image architecture, like VGG or ResNet.
-
计算Loss:
1)Content:把content image的content layer, Fl∈Rm,nF^{l} \in \mathcal{R}^{m ,n}Fl∈Rm,n提取出来,将content layer变平成一个向量fl∈Rm∗n,1\mathbf{f}^{l} \in \mathcal{R}^{m*n,1}fl∈Rm∗n,1;将生成的图片Pl∈Rm,nP^{l} \in \mathcal{R}^{m ,n}Pl∈Rm,n也做同样的变平处理成一个向量pl∈Rm∗n,1\mathbf{p}^{l} \in \mathcal{R}^{m*n,1}pl∈Rm∗n,1,那么content loss就是fl\mathbf{f}^{l}fl和pl\mathbf{p}^{l}pl的Euclidean Norm:Lcontent(p,f,l)=12∑i,j(Fi,jl−Pi,jl)2L_{content}(\mathbf{p},\mathbf{f},l)=\frac{1}{2}\sum_{i,j}(F_{i,j}^l-P_{i,j}^l)^2L

风格转移技术通过保留输入图片内容并应用另一图片风格,实现艺术效果。本文介绍了一种无需GANs、仅利用预训练的VGG19图像分类模型的快速方法。通过计算内容损失和风格损失,调整输入图片像素,实现风格转换。内容损失关注图像内容的一致性,风格损失则衡量局部纹理的相似性。在Tensorflow中加载VGG19模型,选择特定层计算损失,通过梯度下降更新输入图片,从而达到风格转移目的。
最低0.47元/天 解锁文章
1856

被折叠的 条评论
为什么被折叠?



