基于 Keras 实现图像风格转移
Style Transfer 这个方向火起来是从2015年Gatys发表的Paper A Neural Algorithm of Artistic Style(神经风格迁移) , 这里就简单提一下论文的主要思想。
论文概述
Gatys这篇论文的核心思想就是 —— 图片的内容和风格是可以分离的,可以通过神经网络的方式,将图片的风格进行自由交换。
如果内容和风格是可以分离的,那么风格的迁移即可转化成这样一个问题:让生成图片的内容与内容来源图片尽可能相似,让图片的风格与风格来源图片尽可能相似。
那么如何才能将图片的风格提取出来呢?Gatys发现纹理能够描述一个图像的风格,也就是说只要提取出图片的纹理就可以了。那么如何又提取出图像的纹理呢,Gatys发现VGG19网络其实就相当于一堆局部特征识别器,他在VGG19的基础上套了一个格拉姆矩阵(Gram matrix)用来计算不同局部特征的相关性,把它变成里一个统计模型,这样图像纹理提取已经完成了。剩下的就比较轻松了,前文提到VGG19 相当于一堆局部特征识别器,于是Gatys直接把局部特征看作近似的图像内容,这样就得到了一个将图像内容与纹理分开的系统。而将内容与纹理合成的方法就是Google 由2015年夏天首次发布的 DeepDream 方法,找到能让合适的特征提取神经元被激活的图片即可。

至此, A Neural Algorithm of Artistic Style 的主要思想已经解释完了。
实现
神经风格迁移的一般步骤:
- 创建一个网络,它能够同时计算风格参考图像、目标图像和生成图像的 VGG19 层激活。
- 使用这三张图像上计算的层激活来定义之前所述的损失函数,为了实现风格迁移,需要将这个损失函数最小化。
- 设置梯度下降过程来将这个损失函数最小化。
基于 Keras 实现图像风格转移的更多相关文章
- keras图像风格迁移
风格迁移: 在内容上尽量与基准图像保持一致,在风格上尽量与风格图像保持一致. 1. 使用预训练的VGG19网络提取特征 2. 损失函数之一是"内容损失"(content loss) ...
- A Neural Algorithm of Artistic Style 图像风格转换 - keras简化版实现
前言 深度学习是最近比较热的词语.说到深度学习的应用,第一个想到的就是Prisma App的图像风格转换.既然感兴趣就直接开始干,读了论文,一知半解:看了别人的源码,才算大概了解的具体的实现,也惊叹别 ...
- fast neural style transfer图像风格迁移基于tensorflow实现
引自:深度学习实践:使用Tensorflow实现快速风格迁移 一.风格迁移简介 风格迁移(Style Transfer)是深度学习众多应用中非常有趣的一种,如图,我们可以使用这种方法把一张图片的风格“ ...
- Ubuntu16.04+GTX1080配置TensorFlow并实现图像风格转换
1. TensorFlow TensorFlow是谷歌基于DistBelief进行研发的第二代人工智能学习系统,表达了高层次的机器学习计算,大幅简化了第一代系统,并且具备更好的灵活性和可延展性. Te ...
- 图像切割—基于图的图像切割(Graph-Based Image Segmentation)
图像切割-基于图的图像切割(Graph-Based Image Segmentation) Reference: Efficient Graph-Based Image Segmentation ...
- python用直方图规定化实现图像风格转换
以下内容需要直方图均衡化.规定化知识 均衡化:https://blog.csdn.net/macunshi/article/details/79815870 规定化:https://blog.csdn ...
- C++服务器开发之基于对象的编程风格
Thread.h #ifndef _THREAD_H_ #define _THREAD_H_ #include <pthread.h> #include <boost/functio ...
- 基于clahe的图像去雾
基于clahe的图像去雾 通过阅读一些资料,我了解到clahe算法对图像去雾有所价值,正好opencv中有了实现,拿过来看一看. 但是现在实现的效果还是有所差异 #); clahe] ...
- [解读REST] 4.基于网络应用的架构风格
上篇文章介绍了一组自洽的术语来描述和解释软件架构:如何利用架构属性评估一个架构风格:以及对于基于网络的应用架构来说,那些架构属性是值得我们重点关注评估的.本篇在以上的基础上,列举一下一些常见的(RES ...
随机推荐
- CentOS6设置开机自启动
1.把开机启动脚本(mysqld)copy到文件夹/etc/init.d 或 /etc/rc.d/init.d 中 2.将启动程序的命令添加到 /etc/rc.d/rc.local 文件中,比如: # ...
- 使用hbuilder打包vue项目容易出现的坑点
1.打包后手机打开"该app专为旧版本安卓"问题解决(在hbuilder中设置) 打开manifest.json 然后 2.打包后app打开显示白屏. 路径问题:在webpack中 ...
- Android工具 - SQLITE3
原创文章,如有转载,请注明出处:http://blog.csdn.net/yihui823/article/details/6689922 本文章的前提:已经安装了Eclipse和ADT.androi ...
- WebRTC + WebSocket 实现视频通话
前言 WebRTC WebRTC(Web Real-Time Communication).Real-Time Communication,实时通讯. WebRTC能让web应用和站点之间选择性地分享 ...
- CF1520D Same Differences 题解
Content 给定 \(n\) 个数 \(a_1,a_2,\dots,a_n\),求有多少个二元组 \((i,j)\) 满足: \(i<j\). \(a_j-a_i=j-i\). 数据范围:\ ...
- 前端er必须掌握的数据可视化技术
又是一月结束,打工人准时准点的汇报工作如期和大家见面啦.提到汇报,必不可少的一部分就是数据的汇总.分析. 作为一名合格的社会人,我们每天都在工作.生活.学习中和数字打交道.小到量化的工作内容,大到具体 ...
- xml数据结构处理
<data> <country name="Liechtenstein"> <rank updated="yes">2< ...
- ligerui的jquery.validate验证需要添加validate="{required:true,minlength:8,equalTo:'#newpassword'}"
ligerui的jquery.validate验证需要添加validate="{required:true,minlength:8,equalTo:'#newpassword'}"
- 注解版mybatis动态语句将空字符串转换为null
Convert.java import java.util.Map; import java.util.Objects; /** * * @ClassName: Convert * @Descript ...
- git clone报错: Out of memory, malloc failed (tried to allocate 524288000 bytes)
IDEA 拉取项目报错:Out of memory, malloc failed (tried to allocate 524288000 bytes) 执行 git config --global ...