Gatys, Leon A., Alexander S. Ecker, and Matthias Bethge. “A neural algorithm of artistic style.” arXiv preprint arXiv:1508.06576 (2015).

下面这篇发表于CVPR16,内容类似,排版更便于阅读。

Gatys, Leon A., Alexander S. Ecker, and Matthias Bethge. “Image Style Transfer Using Convolutional Neural Networks.” Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition. 2016.

概述

本文介绍Leon Gatys在2016年初大热的Style Transfer算法。这一算法结果直观,理论简洁,广受人民群众喜爱,在github上有各种平台的源码实现: 
- 基于Torch的Neural-Style 
- 基于Tensorflow的Neural Art 
- 基于Caffe的Style Transfer。

本文的核心思路如下: 
- 使用现成的识别网络,提取图像不同层级的特征。 
- 低层次响应描述图像的风格,高层次响应描述图像的内容。 
- 使用梯度下降方法,可以调整输入响应,在特定层次获得特定的响应。 
- 多次迭代之后,输入响应即为特定风格和内容的图像。

【辨】一般网络层有如下形式

xt+1=f(Wxt+b)

网络的权重W,网络的响应xt+1。

特别要强调的是,常见的深度学习问题利用输入-输出样本对训练网络的权重。这篇文章中,是利用已经训练好的权重,获取一个符合输出要求的输入。

复习:分类网络

直接使用VGG191分类网络(下图省略了末尾处做分类的几层。和原始分类网络相比,本文仅将max pooling换成了average pooling,略微提升结果视效。 

网络不同层次的响应描述了图像不同层次的信息:低层次描述小范围的边角、曲线,中层次描述方块、螺旋,高层次描述内容。

下文在提到“卷积层”时,实际指的是Conv+ReLU的复合体。用惯了Torch的同学尤其注意。

图像中的信息

使用分类网络中卷积层的响应来表达图像的风格和内容。

内容:响应

任取一张图像X0,将其输入上述分类网络。其第l个卷积层的响应记为Xl,其尺寸是Hl×Wl×Nl。 
对于目标图像X0⎯⎯⎯⎯⎯,同样送入该网络,可以得到该层响应Xl⎯⎯⎯⎯。

若希望X0和X0⎯⎯⎯⎯⎯内容相似,可以最小化如下二范数误差:

Elc=12||Xl−Xl⎯⎯⎯⎯||2

这一误差可以对本层响应的每一元素求导2:

∂Elc∂xlhwk=xhwk−xhwk⎯⎯⎯⎯⎯⎯⎯
h=1,2...H,w=1,2...W,k=1,2...N

进一步,利用链式法则,可以求得误差对输入图像每一元素的导数∂Elc/∂x0hwk。这一步骤就是神经网络经典的back-propagation方法。

利用∂Elc/∂X0来更新X0,可以获得一个新的输入图像,其在第l层的响应Xl更接近目标图像的响应Xl⎯⎯⎯⎯。也就是说:和目标图像的内容更接近。

风格:响应的矩阵积

先引入一个Nl×Nl的特征矩阵Gl:

Glij=∑hwxlhwi⋅xlhwj
i=1,2...N,j=1,2...N

Gl由第l层的响应计算而来,但是消除了响应的位置信息,可以看做对于风格的描述。ij位置的元素描述第i通道响应和第j通道响应的相关性。

对于目标图像相应层的风格Gl⎯⎯⎯⎯,最小化如下误差可以使X0和X0⎯⎯⎯⎯⎯的风格近似:

Els=12||Gl−Gl⎯⎯⎯⎯||2

可以求得误差对本层响应的导数:

∂Els∂xlhwk=(Xl)T(Gl−Gl⎯⎯⎯⎯)ji

同样可以通过back-propagation求得∂Els/∂X0,进而更新X0使其风格接近X0⎯⎯⎯⎯⎯。

实验

以高斯噪声为初始输入图像,优化内容+风格的混合误差,多次执行前向/后向迭代使用L-BFGS方法优化,即可实现style transfer。其中: 
内容层 - conv4_2 
风格层 - conv1_1, conv2_1, conv3_1, conv4_1, conv5_1

权重

内容误差与风格误差的权重设为α,β,两者之比从1×10−3到5×10−4,五个风格层权重相同。

当风格误差权重很高时,得到的结果近似风格图像的纹理。

风格层

和直觉相反,风格误差可以包含非常高的卷积层(conv5_1),反而有更自然,更“神似”的视觉效果。 
 
这告诉我们:风格本身也是非常抽象的概念,需要较深的网络来描述。

速度

由于需要反复迭代,本文算法的速度很慢。512×512图像,使用NVIDIA K40 GPU,需要近1小时完成。

总结

这篇文章颇有一些启发: 
- 深度学习不只是一头进一头出的“香肠工厂”。 
-“识别”这个看似无关的高层任务包含了很丰富的信息。

我们并不需要特别训练,就能够欣赏非写实风格的绘画,识别其中的对象,辨认画家的风格。这说明人类在认识真实世界的过程中,就学习到了分别提取“内容”和“风格”的能力。 
同样的,以真实世界物体训练的识别神经网络,也自然地能够分别提取“内容”和“风格”。

想要亲自体验的同学,可以使用DeepArt网站提交自己的风格图像和内容图像,不过免费版本需要等待几天。网站还提供了其他用户的精彩作品可以欣赏。

2016年夏季在俄罗斯大热的照片滤镜Prisma同样实现风格转移,只需等待几十秒到若干分钟,8月份的更新更是支持移动端的离线运算,不过其提速依赖于另外的论文。

在处理视频时,这篇文章考虑了结果的连续性和稳定性,这里有基于Torch的实现。


  1. K. Simonyan and A. Zisserman. Very Deep Convolutional Networks for Large-Scale Image Recognition. arXiv:1409.1556 [cs], Sept. 2014. arXiv: 1409.1556. 3 ↩
  2. 原文此处似乎混淆了非线性运算之前和之后的响应。 ↩

深度学习(图像处理): A neural algorithm of artistic style算法详解相关推荐

  1. A Neural Algorithm of Artistic Style

    油画风格(Neural style) 参考文献:< A Neural Algorithm of Artistic Style>

  2. NS之VGG(Keras):基于Keras的VGG16实现之《复仇者联盟3》灭霸图像风格迁移设计(A Neural Algorithm of Artistic Style)

    NS之VGG(Keras):基于Keras的VGG16实现之<复仇者联盟3>灭霸图像风格迁移设计(A Neural Algorithm of Artistic Style) 导读 通过代码 ...

  3. 【每个人都是梵高】A Neural Algorithm of Artistic Style

    文章地址:A Neural Algorithm of Artistic Style 代码:https://github.com/jcjohnson/neural-style 这篇文章我觉得可以起个浪漫 ...

  4. Keras深度学习实战(3)——神经网络性能优化技术详解

    Keras深度学习实战(3)--神经网络性能优化技术详解 0. 前言 1. 缩放输入数据集 1.1 数据集缩放的合理性解释 1.2 使用缩放后的数据集训练模型 2. 输入值分布对模型性能的影响 3. ...

  5. 【深度学习/机器学习】为什么要归一化?归一化方法详解

    [深度学习/机器学习]为什么要归一化?归一化方法详解 文章目录 1. 介绍 1.1 什么是归一化 1.2 归一化的好处 2. 归一化方法 2.1 最大最小标准化(Min-Max Normalizati ...

  6. 深度学习之目标检测(五)-- RetinaNet网络结构详解

    深度学习之目标检测(五)-- RetinaNet网络结构详解 深度学习之目标检测(五)RetinaNet网络结构详解 1. RetinaNet 1.1 backbone 部分 1.2 预测器部分 1. ...

  7. 计算机也能成为艺术家?(基于论文A Neural Algorithm of Artistic Style的图像风格迁移)

    文章目录 引言 可解释性 一种途径:特征可视化 特征和风格,两者或许是一种东西 图像纹理生成 格拉姆矩阵 纹理生成网络 纹理损失函数 从纹理合成到风格迁移 内容损失函数 总损失函数 Torch代码实战 ...

  8. 深度学习两大基础Tricks:Dropout和BN详解

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 01. Dropout dropout作为目前神经网络训练的一项必 ...

  9. dropout层_深度学习两大基础Tricks:Dropout和BN详解

    深度学习 Author:louwill Machine Learning Lab Dropout dropout作为目前神经网络训练的一项必备技术,自从被Hinton提出以来,几乎是进行深度学习训练时 ...

  10. 【深度学习】深度学习两大基础Tricks:Dropout和BN详解

    深度学习 Author:louwill Machine Learning Lab Dropout dropout作为目前神经网络训练的一项必备技术,自从被Hinton提出以来,几乎是进行深度学习训练时 ...

最新文章

  1. rust(54)-字符串
  2. 多图证明,Java到底是值传递还是引用传递?
  3. 软件开发质量的双保险 — 3.应用设计验证与应用用例
  4. 多变量逻辑回归python_Python实现逻辑回归(Logistic Regression in Python)
  5. 使用.NET System.IO.Pipelines和Kestrel套接字库创建Redis客户端
  6. mysql 安装绑定my.ini
  7. 为什么C++编程让人觉得那么难学?
  8. Scratch编程与游戏:和电脑玩大富翁游戏
  9. 自抗扰控制的入门学习(一)—— 前言
  10. Python编写时钟表turtle
  11. 关于以太坊 雷电网络 的思考
  12. IOS app蓝牙连接硬件设备 自动断开问题
  13. 2019年最新中文TTS算法实现个合成样本
  14. Eclipse中文语言包安装和设置中文
  15. mac 下 GBK 显示乱码
  16. 计算机网络虚电路数据报,计算机网络——网络层-虚电路和数据报网络
  17. 微客云免费制作淘客APP,公众号小程序
  18. 20141226-网易有道实习反思
  19. 55节开源巨献,教你制作一个智能无线电应答平台
  20. youtube 视频引用问题 [隐藏标题和yt 图标]

热门文章

  1. 爬虫实战---爬取猫眼电影
  2. iOS应用安全Part1:搭建移动渗透测试平台
  3. java替换图片_Java 替换 PPT 中的图片
  4. linux中磁盘的管理(挂载,分区,配额,加密)
  5. 把txt 转换成CHM的目录或Index
  6. 【二】HTML:图像标签和超链接标签
  7. MYSQL选修课的心得体会_选修课心得体会【优秀篇】
  8. 了解计算机的配置及价格行情,最新电脑配置清单及价格的详细介绍
  9. ENVI学习总结(三)——图像几何校正
  10. 分区软件工具哪个好用