几千年来,人类文化的一个非常重要的特征就是艺术。没有其他物种能够创造出与Leo da Vinci或Van Gogh的画作有些相似的东西。甚至很多人都难以创造出这种品质的艺术品。直到最近,随着神经风格迁移的引入,能够采用图像的风格,然后将其应用于另一个图像的内容。这使得计算机能够创建如上图所示的图像,这是斯坦福大学胡佛塔的图片,由梵高的Starry Night风格化。在本文中将讨论神经风格迁移,然后讨论快速风格迁移。
(左:梵高星夜) - (右:胡佛塔)
内部工作
在计算机视觉领域,卷积神经网络一直被用于从自动驾驶汽车到医疗诊断的应用。CNN由卷积层(检测图像中的图案和物体)组成,最后是完全连接的层(预测)。在这里真正需要的是通过卷积层捕获的信息。
在预先训练的CNN(例如VGG19网络)中,前16层是卷积层,捕获特征。
Conv1_1直到Conv5_4全部用于特征提取
最后几层(FC1,FC2,softmax)仅用于返回图像中存在的不同对象的概率。实际上并不需要这些图层来进行样式转换,因为不打算对图像进行分类。网络起点附近的图层可以学习真正的低级功能,如边角。在网络中向上移动,获得诸如形状之类的特征,直到最终达到高级特征,这些特征是整个对象,例如人的面部或动物的形状。
CNN中不同级别的功能
目标是将特定图像的样式以及特定图像的内容转换为新的图像风格化图像。为了实现这种双重优化,需要计算两次损失。一次为了风格,一次为内容。
内容损失功能
通过测量CNN输出图像与地面实况图像的相似度来计算内容损失,地面实况图像是它试图达到的目标。由于CNN中的特征映射只是一大堆数字,因此它们可以在高维向量空间中表示。这意味着计算网络输出向量与地面实况向量之间的距离非常简单。可以从预先训练好的网络中检索此功能图。根据从中获取特征图的网络部分,输出图像看起来会有所不同。如果选择一个在网络中非常深的层,很可能将得到一个看起来比在开始附近采取一层更抽象的输出图像。
Gram矩阵
样式丢失依赖于称为Gram矩阵的数学对象。该Gram矩阵是向量的所有一切可能的内积的矩阵,这是捕捉非本地化的信息真的很不错。因此它从图层中的要素图中获取所有信息,并消除该信息在图像中空间位置的位置。基本上这用于提取图像的样式。然后通过再次测量输出图像的Gram矩阵与样式目标之间的相似性来计算样式损失。
风格损失功能
可以更改样式和内容重建的权重,以获得风格不同的图像。
权重的变化反映了产出
现在更快
现在有一种做风格迁移的方法,但速度问题仍然是一个问题。这是由于模型的体系结构,减少损失是一个缓慢的迭代过程,无法实时应用。Johnson等人的论文提出了一个非常聪明的解决方案。创建了一个直接输出风格化图像的神经网络,而不是获取图像并将其优化为风格化。这种流程在两个方面有所不同。不是输入两个图像(内容,样式)并获得风格化图像的迭代输出,而是通过快速样式传输,可以输入图像,根据网络训练的内容,以预定的样式快速输出。当然这意味着仍然需要训练一个网络,但是想要使用的每种风格只需要一次。
网络的架构
计算从特定层生成的图像和风格化图像之间的内容损失。然后计算每个特征图的样式损失。然后将这两种损失结合起来,造成全球性损失。现在可以使用梯度下降来训练这个网络,以尽量减少这种全球损失。这是一个非常简单的过程,但可以从中获得一些非常神奇的艺术品!它还可以将图像制作过程加速高达1000倍,同时产生与标准神经风格迁移非常相似的定性结果。此网络有两个部分,即图像转换网络和丢失网络。
图像转换网络
这是一个简单的CNN,具有residual blocks 和strided convolutions 用于网络内下采样和上采样。这会产生与输入大小相同的输出。该网络训练有特征重建感知损失,而不是每像素丢失。等等......什么是感性损失?与更传统的每像素损失相比,它基于从预训练网络提取的高级图像特征表示之间的差异,而不是图像中个体像素的差异。当尝试重建图像时,每像素损失有两个问题,它们非常慢,即使图像在视觉上非常类似于基本事实,它们在数学上可能远远不够。这会在尝试修复这些不可见的更改时导致大量浪费的资源。
损失网络
这只是一个权重被冻结的损失网络。该网络基于VGG16丢失网络,在Microsoft的COCO数据集上进行了训练,这是日常生活中数以千计的常见对象的集合。
http://cocodataset.org/
这个新网可以实时地进行风格化。
在网站上的网络摄像头上玩这个。整个代码的代码可以在Github仓库中获得,并且是使用ML5JS的样式传输文档制作的,并且也基于deeplearnjs。
https://github.com/aryanmisra/faststyletransfer
https://ml5js.org/docs/StyleTransfer
https://github.com/reiinakano/fast-style-transfer-deeplearnjs
另一个非常酷的演示是NVIDIA的快速照片风格算法,它可以创建风格化的照片般逼真的图像。可以在这里查看它的源代码。
https://github.com/NVIDIA/FastPhotoStyle
NVIDIA的快速照片风格算法
最后
虽然这项技术已经运作良好,但可以用它做些什么仍有一些缺点。仍然没有算法可以接收两个输入图像并对它们执行样式传输。像这样的技术可能导致AR技术领域的一些疯狂的发展,并可能成为艺术家的宝贵工具!