文章首发于公众号:1024程序开发者社区

Neural Style是输入一张代表内容的图片和一张代表风格的图片,深度学习网络会输出一张融合了这个风格和内容的新作品。按照惯例,先上效果“星空版的大雁塔”。
Neural Style创造属于你的“星空”
Neural Style创造属于你的“星空”
Neural Style创造属于你的“星空”
/1/模型原理介绍

作者anishathalye使用TensorFlow实现了Neural Style,并将其开源放在了GitHub上。目前为止获得了4千多个星。链接为https://github.com/anishathalye/neural-style。
Neural Style创造属于你的“星空”
Neural Style的核心思想如下图所示:
Neural Style创造属于你的“星空”
要融合两张图片的风格和内容,在训练网络时首先要定义其损失函数。一部分为内容损失函数,将content图片和一张随机生成的图片,都经过卷积网络进行特征变换,获取某些层级输出的特征变换结果,要求二者的差异最小。另一部分为风格损失函数,定义为任意两种特征的相关性。
综上,将内容图片为C,模板图片为S,融合的图片为G。内容损失函数定义为J(C,G),风格损失函数定义为J(S,G),总的损失函数为:
J(G)=αJ(C,G)+βJ(S,G)
这里的CNN的模型用的是Vgg,一共有16个卷积层,加上3个全连接层,一共19层,因此称为VGG-19模型。模型结构如下图所示:
Neural Style创造属于你的“星空”
说的比较概略,有兴趣的童鞋可以研究原文,调用来玩玩也是好的嘛!
/2/环境搭建和实验

该项目支持TensorFlow的CPU和GPU两种版本,GPU需要有支持的显卡,而CPU上速度会慢很多。
实验用电脑:i7处理器,8G内存,NVIDIA GeForce960,2G显存,属于非常平民的装备。进行一次实验1000次迭代,耗时20min左右,CPU版本没有尝试。
要配置GPU版本的TensorFlow,需要安装以下元素(本文配置为例):

  • Python3.5.2
  • cuda_9.0.176
  • win10 cudnn-9.0-windows10-x64-v7.1

接着安装相关的包,参考项目requirement.txt中的要求,
搭建好环境后,下载源码,源码主要包含了四个文件:neural_style.py、stylize.pyvgg.py、imagenet-vgg-verydeep-19.mat。
neural_style.py:外部接口函数,定义了函数的主要参数以及部分参数的默认值,需在命令行中使用。
stylize.py:核心代码,包含了训练、优化等过程。
vgg.py:定义了网络模型以及相关的运算。
imagenet-vgg-verydeep-19.mat:预训练好的VGG19模型,项目中有下载链接。PS:一般电脑训练19层难度太大了。
运行的语句为:
python neural_style.py --content --styles

除文章开头的效果图外,本文还做了如下实验:
1.雨中漫步的姑娘
Neural Style创造属于你的“星空”
Neural Style创造属于你的“星空”
Neural Style创造属于你的“星空”
2.呐喊猫
Neural Style创造属于你的“星空”
Neural Style创造属于你的“星空”
Neural Style创造属于你的“星空”

关注公众号回复“星空”获取论文,送海量学习资源~
Neural Style创造属于你的“星空”
1024程序开发者社区的交流群已经建立,许多小伙伴已经加入其中,感谢大家的支持。大家可以在群里就技术问题进行交流,还没有加入的小伙伴可以扫描下方“社区物业”二维码,让管理员帮忙拉进群,期待大家的加入。
Neural Style创造属于你的“星空”

相关文章:

  • 2021-10-10
  • 2022-12-23
  • 2021-09-14
  • 2021-08-13
  • 2021-10-03
  • 2021-09-02
  • 2022-01-07
猜你喜欢
  • 2021-11-15
  • 2021-06-20
  • 2021-11-10
  • 2021-09-21
  • 2021-12-20
  • 2022-01-18
相关资源
相似解决方案