原文链接:
https://jvns.ca/blog/2017/02/12/neural-style/
How do these “neural network style transfer” tools work?

是否能利用机器学习来自动把我画的画变得更有艺术感?

于是我决定花点时间去理解一下如何实现,重要的是里面的数学原理,而不仅仅是直觉的感受。我从A Neural Algorithm of Artistic Style文章开始,因为它写得简明扼要。

这篇文章的作者另外还建立了一个在线艺术风格迁移的网站,deepart.io。

“风格”和“内容”
这篇论文的核心思想就是,你能从一副图像中提取出“风格style”(比如梵高的夜空风格)以及“内容content”(比如你能在画中看出河边有匹马)。你可以告诉机器,”把A用B的风格再画一遍“。

这样讲还不够清楚。神经网络干的事都是数学,所以是怎么用数学定义“风格”呢?这就是这篇文章试图做的事,我们在此简单解释一下。

一个用于分类识别的网络
这些有艺术感的神经网络,倾向于直接包含一个特别的神经网络。这个被用于风格迁移的特殊神经网络在这篇文章中有介绍,出自Oxford大学的VGG团队。

这个网络的目的不是去创造什么有艺术感的东西。它的目的是图像识别,能够识别出图像中是猫还是马。

这个特别的网络赢得了ImageNet2014年的图像识别大赛识别定位组的冠军。
定位,就是说你必须在图片中识别出物体,并且指明这个物体在哪。

我们要定义”风格“和”内容“,那这个网络又是怎么帮助我们去定义呢?

”内容“和”风格“的数学定义
你可以在这里看到神经网络的结构

当我们把一张图片输入到这个网络中,会在开始处变成一系列向量(每个像素上包含 红/绿/蓝 三值,代表了图像长什么样)。而在网络的每层中,我们能得到中间向量,它们并没有内在的含义。

但是!如果我们想,我们还是能够随意从中间向量中挑出几个说“你看,我觉得这几个就是代表图像’内容‘的。”

在那篇文章中,他们就把“conv4_2”层当作图像的“内容”层。这看起来有点随意,它不就是网络里比较深的一层嘛。

而定义“风格”就有点复杂了。如果我理解正确的话,定义“风格”这件事,正是那篇文章的独特之处——他们不是就挑了一层说“这个就是‘风格’层”。他们把一层中的所有特征图都拿来(针对每个特征,每一层基本上都有大量的向量),然后对那些向量两两作内积,即求Gram矩阵。这个Gram矩阵就是风格。

我还是不能完全理解内积这件事。这篇文章里可能有更好的解释:Texture Synthesis Using Convolution Neural Networks。

在文章中,他们对不同的看起来能代表风格的层(conv1_1,conv2_1,conv3_1,以及conv4_1)做了实验,也得到了不同的结果。

所以,我们就把conv3_1的Gram矩阵当作“风格”吧,把conv4_2的向量当作图像的“内容”吧。

用油画的风格画你的房子
我们已经定义好了什么是“风格”,什么是“内容”。

我现在有一副画,画的是在河边有很多房子。这幅画里有我想要的内容(就是你在神经网络中的conv4_2层得到的向量)。
另外还有一副梵高的《星空》。这幅画里有我想要的风格,就是当你把画塞进神经网络后,在conv3_1层作Gram矩阵得到的向量。

所以!是否能得到一副画,同时包含“河边有很多房子”的内容,和《星空》的风格呢?开篇提到的文章就做到了。

我们先从一些白噪声开始,把它们当作我们生成图像的基础,然后定义一个损失函数(“how different is the style from the painting, and how different is the content from the photo?”损失函数描述生成图像与风格图像及内容图像之间的差异)。在文章中有公式7如下:

然后我们利用梯度下降原理去改变我们的白噪声图像,直到我们能使上面的损失函数值达到最小值。我的感受是,梯度下降速度是很快的,所以我们的确能够快速得到一副图像,它既有“河边房子”的内容,也有《星空》的风格。

或许你奇怪的直觉是对的

令我感到激动的是,这件事我本以为是不可行的。所以或许我对神经网络和艺术之间的其他奇怪想法,都是有可能实现的。当然我得尽可能地去尝试,直到我找到一个合乎逻辑的数学方法去实现他们!我其实没多少时间去做神经网络的实验,但是我或许能找到些别人做的。The Unreasonable Effectiveness of Recurrent Neural Networks 这篇文章值得读一读。

如果你想了解更多数学上的细节,还是要看看开篇提到的文章。它讲的清晰明了,尽管我还是有点不太理解为何那样定义风格。(取决于你对偏导数的理解程度)。我可能在这方面理解会有些问题,毕竟我刚接触神经网络,但我觉得是对的。如果有任何错误情联系我。

这个针对生成音乐和艺术的讲座值得看一下。

补充待续…

利用神经网络进行艺术风格迁移相关推荐

  1. PaddleHub创意之艺术风格迁移

    PaddleHub的图像生成 想法 迁移方法 模型介绍 将毕加索画风迁移到BadApple动画中 每帧融合代码 图片整合成视频 想法 毕加索的作品风格丰富多样,后人用"毕加索永远是年轻的&q ...

  2. 《基于卷积神经网络的深度迁移学习,用于燃气轮机燃烧室的故障检测》论文阅读

    目录 突出 抽象 引言 1.1动机 1.2文献综述获得的结论 1.3贡献 1.4组织 2方法 2.1燃汽轮机组故障知识共享 2.2迁移学习 2.3 基于卷积神经网络的深度迁移学习 2.4用于燃气轮机燃 ...

  3. 深度学习之艺术风格迁移

    近年来,由深度学习所引领的人工智能技术浪潮,开始越来越广泛地应用到社会各个领域.这其中,人工智能与艺术的交叉碰撞,不仅在相关的技术领域和艺术领域引起了高度关注.以相关技术为基础而开发的各种图像处理软件 ...

  4. 如何利用神经网络结合遗传算法进行非线性函数极值寻优(2)

    如何利用神经网络结合遗传算法进行非线性函数极值寻优

  5. NVIDIA团队:利用神经网络生成极慢视频

    NVIDIA团队:利用神经网络生成极慢视频 总有那么一些细节,你瞪大双眼拼了命想看清却依然奈不了何,比如下面这个: 跟得上球吗?要看清男子羽毛球比赛的细节实在不容易 有时候想盯住飞来飞去的羽毛球,非常 ...

  6. matlab 数字识别_在MATLAB中利用神经网络进行分类

    在这篇文章中,主要阐述在MATLAB环境下利用神经网络对输入的数字图像进行识别.我们利用一个5*5的矩阵来表示1-5的数据,如下图所示: 基于以上问题,我们构建的神经网络输入层的神经元个数为25个,即 ...

  7. ML之NN:利用神经网络的BP算法解决XOR类(异或非)问题(BP solve XOR Problem)

    ML之NN:利用神经网络的BP算法解决XOR类(异或非)问题(BP solve XOR Problem) 目录 输出结果 实现代码 输出结果 实现代码 #BP solve XOR Problem im ...

  8. keras——基于神经网络的风格迁移生成艺术字

    Keras是一个高层神经网络API,由纯Python编写而成,至少依赖Tensorflow.Theano.CNTK一种神经网络框架,这里建议用Tensorflow. Keras的特性: 1.简易和快速 ...

  9. 利用神经网络预测链家网上海租房价格(Python)

    代码详见:Predict-house-rent-with-neutral-network 简介 本项目利用Python的scrapy框架爬取链家网的上海市租房信息,利用pandas.numpy.mat ...

最新文章

  1. 使用JSARToolKit5 开发AR应用 (2) Marker
  2. POSTGRESQL小玩
  3. 【总结】有三AI秋季划模型优化组3月直播讲了哪些内容,为什么每一个从事深度学习的同学都应该掌握模型优化的内容...
  4. size_t和ssie_t的区别
  5. php mysql unsigned,PHP MySQL 核心
  6. 网页获取服务器时间,通过AFNetworking获取服务器时间
  7. 七、gradle依赖管理
  8. 10张精美可视化大屏模板分享,加极简制作攻略!抓紧收藏
  9. paip输入法编程之生活用高频字,以及汉字分级
  10. 使用mysqldump 迁移数据库
  11. 使用预计算实时全局光照优化照明-设置场景
  12. ip地址是计算机设备在网络上的地址,如何查看主机ip 如何查看与自己电脑相连设备的IP地址...
  13. 【目标检测】YOLOv3:An Incremental Improvement
  14. 纠正几个不好的工作习惯
  15. 关于knife4j工具聚合api文档的使用
  16. MATLAB进阶教程第一节(图形绘制)
  17. linux kernel 网络协议栈之GRO(Generic receive offload)
  18. Matlab矩阵论矩阵分析计算实现(四)求史密斯标准型和约当标准型
  19. 控制系统仿真技术(二)-连续系统的数字仿真二
  20. 型B2C电子商务网站组织架构分析

热门文章

  1. 消灭该死的重复 下(3)continue 跳转
  2. 用linux命令操作手机,Linux基本操作
  3. ImageReader回调YUV数据转换成JPEG图片
  4. Zookeeper同步机制!!!
  5. 如何在WordPress中创建优惠券弹出窗口(逐步)
  6. 机器学习中的随机过程(伯努利过程与泊松过程)
  7. 查看端口状态及端口占用情况
  8. 【趣图】尽管如此,我还是热爱编程!
  9. This primary key of “id“ is primitive !不建议如此请使用包装类 in Class
  10. BIGEMAP怎么下载地图