深度学习之风格迁移(一)——Neural Style(Gatys)
来源:互联网 发布:淘宝账户自助开通页面 编辑:程序博客网 时间:2024/05/21 10:05
本文介绍一个酷炫的深度学习应用:风格迁移。作者Gatys等人在2015年提出基于神经网络的风格迁移算法[1],随后发表在CVPR 2016上[2]。斯坦福大学的Justin Johnson(cs231n课程的主讲人之一)给出了Torch实现neural-style([3])。
内容重构content reconstruction
给定一张图片
现在指定一层的特征表示,希望生成一张新的图片
文中是通过把
高层的特征映射只包含了图像的内容(高层次)以及图像的空间结构信息,忽略了颜色、纹理及形状等信息。
风格重构style reconstruction
本文用Gram矩阵作为风格图片的风格。
Gram矩阵包含了图片纹理信息以及颜色信息,其定义如下:
于是
总损失函数为
看到到这里不得不问两个问题:为什么Gram矩阵可以表示图片的风格?是否有其他方法表示图片风格?
风格迁移
为了生成融合图片
实验
网络模型采用19层的VGG网络。首先以内容图片作为输入,得到内容层的特征矩阵,作为内容目标;以风格图片作为输入,得到风格层的Gram矩阵,作为风格目标。在VGG中添加内容损失层以及风格损失层,以白噪声图片作为输入,通过反向传播计算损失函数关于输入的梯度,然后更新图片。这个过程不同于一般的训练过程:并不更新中间层的参数,这是Deconvolution操作。
Johnson的复现实验[3]指定输入图片的大小默认为512*512,这个时候需要的内容大概是4.5G(通过监控实验过程中消耗的内存百分比得到的)。我的GPU内存只有3G,所以如果在GPU上运行程序,会出现内存不够的错误。所以改用较慢的CPU,为一幅图片进行风格迁移花了大概50mins。
算法存在的问题
本文算法虽然生成的图片看起来很不错,但是仍存在以下问题:
- 由于每次迁移都要对网络进行训练,速度是非常慢的,无法实现实时迁移;
- 应用在照片上进行风格迁移,会出现失真的情况;
针对第一个问题,Johnson提出的fast-neural -style在本文网络模型前增加一个转换网络,转换网络的输入是内容图片,输出是风格迁移图片。而本文的网络模型称为损失网络,用于计算损失。为每个风格图片训练一个网络,这样在测试时,给定一张内容图片,只需要一次前向过程即可得到生成图片。关于此改进的详细信息,请查看博客 深度学习之风格迁移(二)——Fast Neural Style(Johnson) 。
这对第二个问题,康奈尔大学和Adobe公司合作推出了一篇文章:Deep Photo Style Transfer,通过对损失函数进行改进,使得可以在照片之间进行风格迁移且不失真。具体请看博客 深度学习之风格迁移(三)——Deep Photo Style Transfer(Fujun Luan) 。
参考
[1] A Neural Algorithm of Artistic Style. Leon A. Gatys, Alexander S. Ecker, and Matthias Bethge.
[2] Image Style Transfer Using Convolutional Neural Networks. Leon A. Gatys, Alexander S. Ecker, and Matthias Bethge. CVPR 2016.
[3] neural-style in Github by Johnson.
- 深度学习之风格迁移(一)——Neural Style(Gatys)
- 深度学习之风格迁移(二)——Fast Neural Style(Johnson)
- 基于深度学习的风格迁移转换的两种实现——style-transfer和fast-neural-style-tensorflow
- 深度学习之风格迁移(三)——Deep Photo Style Transfer(Fujun Luan)
- DeepLearning-风格迁移(Neural-Style)
- 深度学习(图像处理)A Neural Algorithm of Artistic Style 图像风格转换
- 【神经网络与深度学习】neural-style、chainer-fast-neuralstyle图像风格转换使用
- 极简keras:实现神经网络风格迁移(neural style)
- 图像风格迁移-Image Style Transfer Using Convolutional Neural Networks
- 极简keras:实现神经网络风格迁移(neural style)
- 基于PyTorch的深度学习入门教程(八)——图像风格迁移
- 汉字的神经风格转移(Neural Style Transfer)实现——我的阅读笔记
- Torch7学习(七)——Neural-Style代码解析
- 笔记——Texture Synthesis Using Convolutional Neural Networks (Leon A. Gatys et al)
- 深度学习笔记——理论与推导之Neural Network的记忆力(四)
- 基于深度学习的绘画风格迁移
- 深度学习笔记(1)——神经网络(neural network)
- 【深度学习】A neural algorithm of artistic style算法详解
- 流媒体传输协议系列之--RTSP协议详解
- JAVA 项目笔记
- 算法
- HTTP协议的三次握手与四次挥手
- java获取百度的真实url
- 深度学习之风格迁移(一)——Neural Style(Gatys)
- SSH2—分页实现
- windbg符号路径设置
- acm常用模板
- Retrofit一依赖于OkHttp 的请求库
- LCS,最长公共子序列
- 遍历map的三种方式
- 【Linux】信号的理解以及信号集处理函数的使用
- table标签,认识网页上的表格