Neural Style Transfer 神经风格迁移详解

Neural Style Transfer 神经风格迁移详解

今天和大家分享一个比较有意思的东西,Neural Style Transfer,神经风格迁移,简单说就是我们将一张普通的照片赋予它艺术作品风格。

大家应该都知道风靡一时的prisma应用,这个应用背后的原理就是这个。我们选择一张普通的照片,再选择一张艺术作品,同时输入,经过神经风格转换,就能给这张照片赋予艺术的风格。那么是如何做到的呢?

接下来看最早提出来神经风格迁移的是 Leon A. Gatys,他先后在2015年和2016年发表了两篇论文,第二篇在第一篇的基础上增加了一些实验,本文主要讲第二篇,最后扩展一篇。

  • A Neural Algorithm of Artistic Style. 2015
  • Image Style Transfer Using Convolutional Neural Networks. 2016.CVPR

之前的方法缺点以及神经风格迁移是如何解决

  • 问题:对于一张图片,缺乏明确的语义表示。而且对一张图片的风格,大多是手工提取纹理特征,给一种风格建立一个数学或者统计模型,但是这样效率低,难以广泛应用。

    解决:使用在目标识别领域训练好的卷积神经网络来提取图像的表征,可以得到高层次的图像信息。

    ?

  • 问题:传统方法中,将图片的内容与图片分开是一个很困难的问题。

    解决:提出A Neural Algorithm of Artistic可以成功的将图片的风格和内容分离并重新合并。这个算法可以产生高感知质量的图片,并可以合并任意图像的内容和艺术作品的风格。

    ?

VGG net

image.png

首先我们来回顾一下VGG网络,是一种经典的卷积神经网络。由五个卷积块和三个全连接层组成。每个卷积块里面包含若干个卷积层。VGG net有不同的版本,有16层,有19层的,作者使用的VGG-19。每个卷积层都会提取图片的不同特征,生成不同的feature map。比较浅的卷积层提取的图像特征是低级的,比如纵向或者横向的纹理等。高层的fuarure map就会包含一些总体内容信息,空间信息。

作者的网络使用及修改:

  • 使用在ImageNet视觉识别任务上训练好的VGG网络
  • 使用VGG-19的16层卷积层和5层池化层
  • 通过缩放权重来正则化网络
  • 不使用任何全连接层,好处是可以处理任意输入大小的图片
  • 用average池化层替代max池化层,因为实现效果好

Deep image representations

image.png

Content Reconstructions :我们可以通过网络中某一层的feature map来重建输入图像,从而可以可视化CNN不同层中图像的处理信息。这相当于一个逆向的过程,输入的是特征,输出的是图像。底层的细节保留完整(颜色、纹理信息),高层则保留一些高层次的语义信息,如整体的内容和空间信息会保存等。所以思考下用哪层比较好呢?(不能太浅也不能太深)

Style Reconstructions :我们计算不同层中的不同feature之间的关系来表示风格。我们通过风格表征来进行风格重建。后面再说为何这样可以表示图像的风格。随着层数的累加,纹理越来越完整,平滑。

为了可视化网络中不同层次的图像信息,我们输入一张初始化的白噪音图片,使它尽可能的去匹配原始图片在网络特定层的feature maps,我们利用梯度下降,不断缩小原始图片与生成图片之间的feature的差异。保持网络的权重不变,只不过是不断更新生成图片的像素值,从而实现图像重建。

Content Representation :

image.png

Style Representation

image.png

接着我们来看如何表示一张图片的风格。首先我们将某一层的特征空间中feature maps都展开成 NxM 的矩阵。然后我们通过计算不同feature maps之间相关性来表示图片的纹理信息。这里我们可以使用Gram matrix来计算这种相关性。首先我们来看下Gram matrix的定义:

Gram.png

Gram Matrix实际上可看做是feature之间的偏心协方差矩阵(即没有减去均值的协方差矩阵),在feature map中,每一个数字都来自于一个特定滤波器在特定位置的卷积,因此每个数字就代表一个特征的强度,而Gram计算的实际上是两两特征之间的相关性,当同一个维度上面的值相乘的时候原来越小就变得更小,原来越大就变得越大;二个不同维度上的关系也在相乘的表达当中表示出来。哪两个特征是同时出现的,哪两个是此消彼长的等等,同时,Gram的对角线元素,还体现了每个特征在图像中出现的量,因此,Gram矩阵有助于把握整个图像的大体风格。有了表示风格的Gram Matrix,要度量两个图像风格的差异,只需比较他们Gram Matrix的差异即可。这就将一个抽象的问题具体化了。

我们在多个层上分别比较他们的Gram矩阵的差异,每层的loss我们可以设定一个权重w,所以我们就可以得到Style loss如上图。

这样我们就成功的解决了直接提到问题,图像的风格部分和内容部分分离开来。接下来看算法的具体流程。

Style Transfer

image.png

首先我们将风格图片和内容图片的特征提取出来并存储。Style image经过左边网络,我们利用Gram矩阵计算每个层上的风格表征。Content image经过右边这个网络,我们计算某一层的内容表征(较高层)。然后一张随机的白噪音图片经过中间这个网络,同时计算它的风格表征和内容表征。

然后分别计算它的风格损失,和内容损失,我们将这两种损失线性组合,并分别给予权重。

损失通过中间这个网络反向传播,不断更新白噪音图片的像素值。使得它同时尽可能的去匹配内容图的内容以及风格图的风格。

Rusults

接下来作者的实验结果。

image.png

image.png

image.png

image.png

但是

上面说到的这个模型有个缺点,就是他是对图片进行在线训练,生产速度很慢,无法生产落地。

那么能不能针对一个风格,离线训练好一个模型呢?使用的时候直接输入一张图片,很快的就可以得到目标图片的。有的,就是下面这篇论文。


Perceptual Losses for Real-Time Style Transfer and Super-Resolution

image.png

简单说一下这个论文的核心思想。他通过离线训练一个模型解决了之前的方法转化时间长的问题。

这个模型由两部分组成,左边是一个图像转换网络,右边是一个损失网络。

Image Transform Net是作者设计的,直接用来转换图像风格。输入是原始图片,输出是转换后的图片。所以这个网络需要训练好,才能经过一次inference就能得到转换风格后的图片。

那么如何训练这个网络呢,需要目标函数,就需要右边这个损失网络。这个网络同样也是在其他地方训练好的卷积神经网络,我们固定其参数,用他来提取特征。损失网络输入是一种风格图片,和转换后的图片y^,和内容图片(就是x)。这就和之前的算法一样,在这个损失网络上计算多层特征风格损失和高层特征内容损失,然后将误差方向传播到右边的图像转换网络,利用梯度下降进行网络权重的更新,直到损失函数最小化。转换网络训练完成,就不需要右边的损失网络了。

接着测试阶段,经过一次inference,就能得到风格转换后的图片。离线训练,一种风格对应一个转换网络。

这篇论文还做了超分辨率重建的问题。这里就不说了。

  • 5
    点赞
  • 41
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值