利用神经网络进行艺术风格迁移
原文链接:
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 这篇文章值得读一读。
如果你想了解更多数学上的细节,还是要看看开篇提到的文章。它讲的清晰明了,尽管我还是有点不太理解为何那样定义风格。(取决于你对偏导数的理解程度)。我可能在这方面理解会有些问题,毕竟我刚接触神经网络,但我觉得是对的。如果有任何错误情联系我。
这个针对生成音乐和艺术的讲座值得看一下。
补充待续…
利用神经网络进行艺术风格迁移相关推荐
- PaddleHub创意之艺术风格迁移
PaddleHub的图像生成 想法 迁移方法 模型介绍 将毕加索画风迁移到BadApple动画中 每帧融合代码 图片整合成视频 想法 毕加索的作品风格丰富多样,后人用"毕加索永远是年轻的&q ...
- 《基于卷积神经网络的深度迁移学习,用于燃气轮机燃烧室的故障检测》论文阅读
目录 突出 抽象 引言 1.1动机 1.2文献综述获得的结论 1.3贡献 1.4组织 2方法 2.1燃汽轮机组故障知识共享 2.2迁移学习 2.3 基于卷积神经网络的深度迁移学习 2.4用于燃气轮机燃 ...
- 深度学习之艺术风格迁移
近年来,由深度学习所引领的人工智能技术浪潮,开始越来越广泛地应用到社会各个领域.这其中,人工智能与艺术的交叉碰撞,不仅在相关的技术领域和艺术领域引起了高度关注.以相关技术为基础而开发的各种图像处理软件 ...
- 如何利用神经网络结合遗传算法进行非线性函数极值寻优(2)
如何利用神经网络结合遗传算法进行非线性函数极值寻优
- NVIDIA团队:利用神经网络生成极慢视频
NVIDIA团队:利用神经网络生成极慢视频 总有那么一些细节,你瞪大双眼拼了命想看清却依然奈不了何,比如下面这个: 跟得上球吗?要看清男子羽毛球比赛的细节实在不容易 有时候想盯住飞来飞去的羽毛球,非常 ...
- matlab 数字识别_在MATLAB中利用神经网络进行分类
在这篇文章中,主要阐述在MATLAB环境下利用神经网络对输入的数字图像进行识别.我们利用一个5*5的矩阵来表示1-5的数据,如下图所示: 基于以上问题,我们构建的神经网络输入层的神经元个数为25个,即 ...
- ML之NN:利用神经网络的BP算法解决XOR类(异或非)问题(BP solve XOR Problem)
ML之NN:利用神经网络的BP算法解决XOR类(异或非)问题(BP solve XOR Problem) 目录 输出结果 实现代码 输出结果 实现代码 #BP solve XOR Problem im ...
- keras——基于神经网络的风格迁移生成艺术字
Keras是一个高层神经网络API,由纯Python编写而成,至少依赖Tensorflow.Theano.CNTK一种神经网络框架,这里建议用Tensorflow. Keras的特性: 1.简易和快速 ...
- 利用神经网络预测链家网上海租房价格(Python)
代码详见:Predict-house-rent-with-neutral-network 简介 本项目利用Python的scrapy框架爬取链家网的上海市租房信息,利用pandas.numpy.mat ...
最新文章
- 使用JSARToolKit5 开发AR应用 (2) Marker
- POSTGRESQL小玩
- 【总结】有三AI秋季划模型优化组3月直播讲了哪些内容,为什么每一个从事深度学习的同学都应该掌握模型优化的内容...
- size_t和ssie_t的区别
- php mysql unsigned,PHP MySQL 核心
- 网页获取服务器时间,通过AFNetworking获取服务器时间
- 七、gradle依赖管理
- 10张精美可视化大屏模板分享,加极简制作攻略!抓紧收藏
- paip输入法编程之生活用高频字,以及汉字分级
- 使用mysqldump 迁移数据库
- 使用预计算实时全局光照优化照明-设置场景
- ip地址是计算机设备在网络上的地址,如何查看主机ip 如何查看与自己电脑相连设备的IP地址...
- 【目标检测】YOLOv3:An Incremental Improvement
- 纠正几个不好的工作习惯
- 关于knife4j工具聚合api文档的使用
- MATLAB进阶教程第一节(图形绘制)
- linux kernel 网络协议栈之GRO(Generic receive offload)
- Matlab矩阵论矩阵分析计算实现(四)求史密斯标准型和约当标准型
- 控制系统仿真技术(二)-连续系统的数字仿真二
- 型B2C电子商务网站组织架构分析
热门文章
- 消灭该死的重复 下(3)continue 跳转
- 用linux命令操作手机,Linux基本操作
- ImageReader回调YUV数据转换成JPEG图片
- Zookeeper同步机制!!!
- 如何在WordPress中创建优惠券弹出窗口(逐步)
- 机器学习中的随机过程(伯努利过程与泊松过程)
- 查看端口状态及端口占用情况
- 【趣图】尽管如此,我还是热爱编程!
- This primary key of “id“ is primitive !不建议如此请使用包装类 in Class
- BIGEMAP怎么下载地图