图像风格转换(Image style transfer)

图像风格转换是最近新兴起的一种基于深度学习的技术,它的出现一方面是占了卷积神经网络的天时,卷积神经网络所带来的对图像特征的高层特征的抽取使得风格和内容的分离成为了可能。另一方面则可能是作者的灵感,内容的表示是卷积神经网络所擅长,但风格却不是,如何保持内容而转换风格则是本文所要讲述的。

本篇属于论文阅读笔记系列。论文即[1].

引入

风格转换属于纹理转换问题,纹理转换问题在之前采用的是一些非参方法,通过一些专有的固定的方法来渲染。

传统的方法的问题在于只能提取底层特征而非高层抽象特征。随着CNN的日渐成熟,终于,这个领域被渗透了进来。

最近的很多应用型的研究成果都是将CNN渗透进各个领域,从而,在普遍意义上完成一次技术的升级。

方法

可以进行风格转换的基本就是将内容和风格区分开来,接下来我们来看CNN如何做到这一点。

内容提取

和之前类似,内容就是采用CNN的某一层或者某几层来表示,一般来说,层级越高,表示就越抽象。这里,需要有几个形式化的表达:

  • Ml: 第l层的feature map的大小
  • Nl: 第l层的filter的数目
  • Fl: 图像在第l层的特征表示,是一个矩阵,矩阵大小为Ml * Nl.
  • Flij: 第l层第i个filter上位置j处的激活值。
  • p: 原始内容图片
  • x: 生成图片
  • Pl: 原始图片在CNN中第l层的表示
  • Fl: 生成图片在CNN中第l层的表示

因而,我们就得到了内容的loss。

求导即为:

有了这个公式之后要怎么做呢? 使用现在公布的训练好的某些CNN网络,随机初始化一个输入图片大小的噪声图像x,然后保持CNN参数不变,将原始图片P和x输入进网络,然后对x求导,这样,x就会在内容上越来越趋近于P。

风格提取

而风格的转换则是这篇论文的神来之笔,论文使用相关矩阵来表示图像的风格。当然,风格的抽取仍然是以层为单位的。

  • a: 初始风格图片
  • Al: 风格图片某一层的风格特征表示。
  • Gl: 生成图片某一层的风格特征表示,大小为Nl * Nl

其中,Glij的值是l层第i个feature map和第j个feature map的内积。

从而,我们得到了风格损失函数。

单独某层的损失函数:

各层综合的损失函数:

求偏导:

与内容表示类似,如果我们用随机初始化的x,保持CNN参数不变,将风格图片A和x输入进网络,然后对x求导,x就会在风格上趋近于A。

内容重建与风格重建

不考虑风格转换,只单独的考虑内容或者风格,可以看到如图所示:

图的上半部分是风格重建,由图可见,越用高层的特征,风格重建的就越粗粒度化。下半部分是内容重建,由图可见,越是底层的特征,重建的效果就越精细,越不容易变形。

风格转换

有了内容与风格,风格转换就呼之欲出了,即两种loss的加权。

也可如图示:

即同时将三张图片(a, p, x)输入进三个相同的网络,对a求出风格特征,对p求出内容特征,然后对x求导,这样,得到的x就有a的风格和p的内容。

实验

实验使用的是训练好的19层VGG,并通过调整权重使得每一层的激活值得均值为0。权重的调整并不会影响VGG的输出。在试验中没有使用全连接层。

实验调整了一些参数,相对其他论文而言,本论文的参数其实并不多,有:

  • loss加权的权重之比
  • 层级的选择
  • 初始化的方法。

loss权重之比

比例越大,内容就越强势。

层级的选择

固定住风格的层级,变动内容的层级,可以看到,内容层级越低,结果图片中的内容就越明显。

初始化方法的选择

  • A: 从内容图片初始化
  • B: 从风格图片初始化
  • C: 随机初始化

可以看到,初始化的不同似乎对最后结果影响不大。

效果

一张图片对应到各种风格:

照片风格转换:

讨论

  • 速度,因为每张图片的生成都要求导很多遍,因而高清图片的生成非常慢。
  • 会引入噪声,在风格转换上不明显,但风格和内容都是照片的情况下,就变得非常明显了。但这个问题估计可以很容易解决。
  • 风格转换的边界非常不明显,人类也无法量化一张图片中哪一些属于风格,哪一些属于内容。
  • 风格转换的成功为生物学中人类视觉原理的研究提供了一条可以切入的点。

最后一个优势我觉得充分体现作者的视野。

思考

说了那么多,为何相关矩阵可以提取风格?我百思不得其解。

  • 直观上看,风格肯定是一种遍布整个图片的共性,而相关性矩阵,我认为正是把这些共性抽象的加以提取。在这个思路下,或许可以探讨其他可以提取共性的方式。比如

    • 多项式方式
    • 两两相乘变成三三相乘。
  • 是不是可以通过控制给相关性矩阵加mask的方式来探讨各种feature map的真实作用。

参考文献

[1]. Gatys L A, Ecker A S, Bethge M. Image style transfer using convolutional neural networks[C]//Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition. 2016: 2414-2423.

时间: 2024-11-01 22:53:35

图像风格转换(Image style transfer)的相关文章

PyTorch 1.0 中文官方教程:使用 PyTorch 进行图像风格转换

译者:bdqfork 作者: Alexis Jacq 简介 本教程主要讲解如何实现由Leon A. Gatys,Alexander S. Ecker和Matthias Bethge提出的 Neural-Style 算法.Neural-Style或者叫Neural-Transfer,可以让你使用一种新的风格将指定的图片进行重构.这个算法使用三张图片,一张输入图片,一张内容图片和一张风格图片,并将输入的图片变得与内容图片相似,且拥有风格图片的优美风格. 基本原理 原理很简单:我们定义两个间距,一个用

谈谈图像的style transfer(二)

总说 主要从几个方面来进行说明吧 - 加快transfer的速度 - 让transfer的效果看起来更加visual-pleasing - 其他的一些方面 - 用GAN来做 加快style stransfer 谈谈图像的Style Transfer(一) 这里写了 Neural style以及fast neural style. 在超越fast style transfer--任意风格图和内容图0.1秒出结果已经可以将转换做到实时.这篇的一个主要的问题是耗费的大部分时间是在提取隐藏层的patch

风格迁移(2)-Fast Style Transfer

X为输入图片 fw 风格迁移的网络 yc就是X ys是风格后的图片 y帽为输入图片X经过fw 风格迁移的网络生成的图片 y帽在内容上与yc相类似,在风格上与ys相类似. Fast Style Transfer的训练步骤如下: 1 输入一张图片x到fw中得到结果y帽 2 将y帽与yc输入到loss network(VGG-16)中,计算它的relu3_3的输出,并计算它们的均方误差作为content loss 3 将y帽与ys输入到loss network(VGG-16)中,计算它的relu1_2

机器学习:利用卷积神经网络实现图像风格迁移 (一)

相信很多人都对之前大名鼎鼎的 Prisma 早有耳闻,Prisma 能够将一张普通的图像转换成各种艺术风格的图像,今天,我们将要介绍一下Prisma 这款软件背后的算法原理.就是发表于 2016 CVPR 一篇文章, " Image Style Transfer Using Convolutional Neural Networks" 算法的流程图主要如下: 总得来说,就是利用一个训练好的卷积神经网络 VGG-19,这个网络在ImageNet 上已经训练过了. 给定一张风格图像 a 和

语音中的风格转换

图像中的风格转换 风格转换是最早来源于图像领域的概念,一言以蔽之,即是:将一张图片的艺术风格应用到另外一张图片上. 深度卷积网络具有良好的特征提取能力,不同层提取的特征具有不同的含义.深度卷积网络由一层层的非线性函数组成,可以视为复杂的多元线性函数,该函数完成从输入图像到输出的映射.一般而言,训练风格转换深度网络的损失函数来源于两个方面: 内容损失 可以使用均方误差度量内容图片\(\vec p\)和生成的feature map即\(\vec x\)之间的距离: \[ L_{content}(\v

Perceptual losses for real-time style transfer and super-resolution(by_xiao jian)

Perceptual losses for real-time style transfer and super-resolution,2016 ECCV https://cs.stanford.edu/people/jcjohns/eccv16/ 官方源码Torch:https://github.com/jcjohnson/fast-neural-style 其他程序Tensorflow:https://github.com/lengstrom/fast-style-transfer,实现细节

吴恩达【深度学习工程师】 04.卷积神经网络 第四周特殊应用(2)神经风格转换

该笔记介绍的是<卷积神经网络>系列第四周:特殊应用(2)神经风格转换 主要内容有: 1.神经风格转换 2.卷积网络隐藏单元可视化显示 3.神经风格转换代价函数 4.内容代价函数 5.风格代价函数 *6.数据从一维到三维的推广 神经风格转换 把C(content)内容图片转化为风格类似S(style)风格图片的G(generated)生成图片. 卷积网络隐藏单元可视化显示 通过观察可视化显示的不同隐藏单元的输出结果真正了解卷积网络中深度较大的层真正在做些什么. 可视化图块输出: 从第一层隐藏层第

Neural Style Transfer

风格转移 这几天看了一篇风格转移的论文,这里大致介绍下论文的内容,并且推到下论文中出现的公式. 基本思想 有两张图片,我们关注一张图片的内容(Content)记为C,一张图片的风格(Style)记为S,想要生成一张图片包含C的内容和S的风格,记为G. 那么如何获取图片的C和S那?论文使用训练好的VGG net解决这一问题. 文中使用VGG net的中间层来表示C:对于一张input_image,中间某一输出层shape为$heighttimes width times channel$,将其re

CS231n assignment3 Q4 Style Transfer

"Image Style Transfer Using Convolutional Neural Networks" (Gatys et al., CVPR 2015). 复现这一篇论文中的代码 loss由三部分组成,内容loss,风格loss,正则化loss,其中风格loss使用gram矩阵. Content loss def content_loss(content_weight, content_current, content_original): ""&q