风格迁移一直是很多读者感兴趣的内容之一,近日,网友Reiichiro Nakano公开了自己的一个实现:用TensorFlow.js在浏览器中部署可进行任意图像风格迁移的模型。让我们一起去看看吧!
GitHub:github.com/reiinakano/arbitrary-image-stylization-tfjs
小工具:reiinakano.github.io/arbitrary-image-stylization-tfjs/
所谓风格迁移,指的是神经网络通过迁移算法,用另一种风格(通常是画)重新“绘制”一张图像中的内容(通常是照片)。现如今,能在浏览器中实时进行风格迁移的项目有很多,但它们中的大多数都需要针对每种风格训练独立的神经网络,所以用户的选择大大受限。
Reiichiro Nakano提供的模型突破了以往模型的局限,它能将任何风格图像分解为表示其风格的100维向量,然后把这些向量结合照片信息一起馈送到另一个神经网络,以产生最终的风格化图像。
首先,我们来看看这个风格迁移模型的具体效果:
一种风格下的风格迁移
两种风格下的风格迁移
演示网站
上图是小编在作者开发的演示网站里测试的结果,感兴趣的读者可以前去一试。可以发现,虽然谈不上特别令人惊艳,但迁移的整体效果还是非常不错的,更可贵的是,它支持任意图像、任意风格的迁移,允许手动上传图片。
如果硬要说有什么不足,那就是网站的延迟有点高(选取图像/风格后无法及时跳转,也许是水管不行)。此外,在对构图空旷的图像(如加州金门大桥)进行风格迁移时,我们发现粗粝线条风格(如bricks)容易弱化主体线条,使迁移后的图像几乎没有内容。
为了实现这个项目,作者参考的是2017 BMVC的一篇Oral Paper:Exploring the structure of a real-time, arbitrary neural artistic stylization network(arXiv:1705.06830)。
这篇论文结合灵活的风格迁移技术和快速网络传输,提出了一种允许使用任何内容/风格图像对进行实时风格化的网络。在包含约80,000幅画作的语料库上经过训练后,论文模型不仅在训练过的风格上表现出色,还能够推广到从未见过的风格和照片。也就是说,这是一个能以完全无监督的方式学习平滑的、结构丰富的嵌入空间,以及与风格绘画相关联的语义信息的模型。
一般来说,风格迁移模型的输入有两个,一是包含图像内容的照片c,二是包含图像风格的绘画s。这类算法假定图像的内容和风格可以定义如下:
如果模型从两幅图像中提取到的高级特征欧氏距离接近,则两个图像的内容相似。
如果模型从两幅图像中提取到的低级特征有相同的空间统计,则两个图像的内容相似。
根据这两个定义,风格迁移的优化目标可以表示为:
其中Lc(x, c)和Ls(x, s)分别是内容和风格的损失函数,λs是风格损失函数经拉格朗日乘数加权后表示的相对权重。
论文作者改进了这一做法。他们在风格迁移网络前添加了一个预测网络P(·),它以任意风格的图像作为输入,并预测归一化常数的嵌入向量→S,这样做的优势是模型能把学到的迁移方法推广到其他图像上。
论文模型架构
从本质上来说,这个模型直接学习的是从风格图像到风格参数的映射。在Kaggle Painter By Numbers(内容)和Describable Textures Dataset(风格)两个数据集上进行了训练后,模型输出的风格迁移效果如下图(左)所示:
网络是联合训练的,但它只用少量训练图像就模拟了多种风格,这意味着我们没有必要为每种风格单独设定拉格朗日乘数λs。 也就是说,同一个损失加权就足以在所有绘画风格和纹理上产生合理的结果。上图(右)则证明,该模型能够预测以前从未见到的风格和纹理样式,它们在质量上与训练集样本的风格和纹理几乎一致。
在GitHub上,开源项目的Reiichiro Nakano向开发者重点提了一些注意事项。
问:我的数据安全吗?你会看到我提交的图片吗?
当你在演示网站里测试风格迁移时,你的数据和图片只会在你自己的计算机上留下痕迹。事实上,这也是在浏览器中运行神经网络的主要优势之一。我只是把模型和代码发给你,由你在自己的浏览器上运行模型。
问:如果我想下载,模型一共多大?
风格神经网络的大小是9.6MB,迁移网络大概有7.9MB。它们在任何风格上都有效,所以你只用下一次就可以了。
问:你的模型和论文模型一模一样吗?
不完全一样,论文的风格网络用的是Inception-v3(大约96.2MB),太大了。所以在把模型移植到浏览器上之前,我用MobileNet-v2从预训练的Inception-v3网络中提取了知识,把大小缩小到了论文的1/10。
问:风格组合的具体方法是什么?
由于风格网络可以把每种风格映射成100维的风格向量,所以我们只需对内容和风格图像的风格向量进行加权平均,把计算结果作为迁移网络的输入,即可获得新风格向量。
实时、任意图像风格迁移论文:arxiv.org/abs/1705.06830
关于任意图像风格迁移的Magenta repo:github.com/tensorflow/magenta/tree/master/magenta/models/arbitraryimagestylization
MobileNetV2论文:arxiv.org/abs/1801.04381
神经网络知识“蒸馏”:arxiv.org/abs/1503.02531
TensorFlow.js:js.tensorflow.org/
Google Colaboratory:colab.research.google.com/notebooks/welcome.ipynb#recent=true