今天是一年一度的元宵节, Mr.Tech首先祝大家元宵快乐,团团圆圆。都说过好元宵才算过完年。个推技术研发工程师飞鸽和船长凭借自己的浪漫与艺术气质,结合风格迁移技术,为大家营造出了别具一格的节日气息。如以下三列图片所示,他们以第一列的原图为基础,将第二列的风格迁移至原图生成了颇具特色的元宵图片(第三列)。这样的元宵作品你见过吗?

 

第一列             第二列             第三列

 

(以下是关于风格迁移原理的介绍)

 

风格迁移应用实例

 

曾经风靡全球的现象级应用 Prisma,来自于俄罗斯团队,是一款简洁的图像美化工具。图像美化类应用数不胜数,Prisma 的魅力在哪里呢?我们先来看下其美化效果。

 

 

图中左侧是原始的图像,经过 Prisma 应用美化后效果呈现于右侧,一张写实的照片瞬间蜕变成一幅充满艺术气息的油画作品。从左侧图像到右侧图像的迁移过程可以称之为图像风格迁移,这就是我们今天想要介绍的内容。

 

简介

 

图像风格迁移是指结合内容图像与风格图像,生成一张新的图像,其在内容上与内容图像相近,而在风格上与风格图像相近。何为相近是一个较难定义的问题,在神经网络应用于风格迁移之前,大家都遵循一个相同的思路:在某个特定的风格图像基础之上,建立一个与该风格对应的数学或统计模型,然后再改变需要迁移的内容图像,使它更好地符合建立的模型。

 

基于神经网络的图像风格迁移的方法在 2015 年由《Texture Synthesis Using Convolutional Neural Networks》和《A Neural Algorithm of Artistic Style》这两篇论文提出。第一篇论文提出了一种用深度学习来给纹理建模的方法,第二篇基于卷积神经网络,把局部特征看做近似的图像内容,得到一个图像内容和图像风格分开的系统,再将其内容和风格合并起来,形成风格迁移后的图像。以这两篇为基础,国外工程师们又相继发表了实时的固定风格图像迁移《Perceptual Losses for Real-Time Style Transfer and Super-Resolution》和任意风格图像的极速迁移《Meta Networks for Neural Style Transfer》两项技术成果。

 

以下主要对后三篇基于神经网络的图像风格迁移的论文内容做简要介绍。

 

风格迁移开山之作

 

《Texture Synthesis Using Convolutional Neural Networks》这篇论文提出了一个思路:纹理可以用图像局部特征的统计模型来描述。有了这个前提之后,基于神经网络的图像风格迁移模型就应运而生了。《A Neural Algorithm of Artistic Style》这篇论文详细讲述了如何使用神经网络实现图像风格迁移。

 

在卷积神经网络中,浅层的特征一般代表着图像的边缘、轮廓、纹理、颜色等视觉特征,而深层的特征则指的是图像的语义特征。越往深层,语义特征越来越强,即更能代表图像的具体内容。要比较两幅图像的内容相似性,可以比较两幅图像在网络深层特征的相似性。这里使用欧式距离来衡量特征之间的相似性,具体公式如下:

我们使用两幅图像的较浅层特征来比较图像间的风格相似性。由于较浅层特征也含有较多的图像局部特征,因此不能直接使用欧式距离比较相似性,故论文中使用了 Gram 矩阵比较风格的相似性。

 

 

风格相似性计算公式如下:

 

 

两幅图像间的相似度可以用内容损失和风格损失之和来评估:

 

 

直观的网络结构图如下:

 

(图片来源于《A Neural Algorithm of Artistic Style》)

 

具体的代码实现可以参考: Neural-Style-Transfer

 

实时风格迁移

 

根据上述的图像风格迁移模型可以得到比较不错的迁移效果,但是需要对每张内容图像和风格图像进行单独训练,所以图像的生成速度很慢,于是就有人提出了改进:首先搭建一个转换网络,然后通过优化转换网络的权值来实现快速风格迁移。《Perceptual Losses for Real-Time Style Transfer and Super-Resolution》这篇论文详细地讲述了具体的实现过程。

 

为解决耗时的问题,该文采用了end-to-end training的方法,训练出了DCNN模型。该模型只用输入单内容图片,就可以给对象添加上某种风格。

 

(图片来源于《Perceptual Losses for Real-Time Style Transfer and Super-Resolution》)

 

首先,该文章采用了训练好的VGG16来作为图像特征提取器。由上图可以看到,对于内容图的训练,只采用了relu3_3层的特征图,而对于风格图的训练,则分别采用了relu1_2、relu2_2、 relu3_3和relu4_3这4层的特征图。

 

接着,该方法需要预先训练出一个损失网络,该网络用来计算内容图像于风格图像的perceptual loss。然而,如何定义出损失函数是一个难题。对于计算机来说,很难去准确定义一个图像的风格,因为这个东西相对比较主观。到底什么是风格呢?换种思维来说,图像中除去内容,那就是风格了,而图像的内容最在意的就是特定像素点的位置。相反地,风格则对位置信息不敏感。于是该论文采用了Gram矩阵的形式:

 

 

Gram矩阵是针对于一个特征图而言的,对于一个用n个通道的特征层,两两组合得到n*n组,每组计算两个二维矩阵的点积的和,再压平。这样得到的Gram矩阵就去除了特征中的位置信息。

 

(图片来源于《Perceptual Losses for Real-Time Style Transfer and Super-Resolution》)

 

上图展示风格图在对应损失函数优化后,各个层的特征图。可以看出不同层的特征图在不同的颗粒度体现了原图的风格,在保留了风格的前提下,这些特征图又去除了原图的像素点的位置信息,这样就不会影响内容图了。

 

除了上述的perceptual loss,为了保持风格转换后的低层的特征,文章还引入了两个简单的loss,一个是pixel loss:

 

这个损失函数只在有训练的时候使用。

 

另一个是total variation loss:

 

 

这个损失函数则用来提高图像的平滑度。

 

具体代码实现可以参考:fast_neural_style

 

极速风格迁移

 

一般的图像风格转移网络只能转换一种风格,而在《Meta Networks for Neural Style Transfer》论文中,作者设计了一种 meta 网络,将不同的风格图像输入到 meta 网络中输出不同的权重参数,再将这些参数输入到转换网络中进行内容图像的风格转移,模型结构如下图所示:

 

(图片来源于《Meta Networks for Neural Style Transfer》)

 

将风格图像输入到固定的 VGG-16 网络中得到风格特征,再经过两个全连接层得到权重参数,输入到图像转移网络(Image Transformation Network)生成转移后的图像。

 

总结

 

《A Neural Algorithm of Artistic Style》论文通过对内容图像和风格图像的训练,不断地改变权重来实现风格的迁移。《Perceptual Losses for Real-Time Style Transfer and Super-Resolution》论文搭建了固定风格的图像转移模型,然后训练优化模型,输入任意的内容图像即可实现快速图像风格迁移。《Meta Networks for Neural Style Transfer》论文通过模型来生成权重,可以快速实现任意内容、任意风格的图像迁移。如果大家不满足于Prisma app所提供的固定款式的滤镜,不妨借助风格迁移原理,动动手自己做一个照片美化工具,让你的图片呈现出你独特的艺术风格。

 

结语

 

这个元宵节,个推的飞鸽和船长利用技术与艺术专长,创作出了别样的元宵作品,向大家传递出了节日温暖。相信我们也可以利用风格迁移以及其他方式,让自己过好这个与众不同的元宵节。再次祝大家元宵快乐!

 

参考资料