1 概述

对于搞IT的同学来说,技术的更迭一直是很头疼的事情,从原来的PC时代到现在的移动互联网,中间冒出太多东西了,干了这行就必须不断的学习,不然就很容易被行业淘汰了,机器学习是最近几年比较火的一个技术,其中的深度学习应该是最受欢迎的分支了,在市场上已经有大量的应用,大家看到的智能语音助手,智能翻译,智能相机,无人驾驶等都是使用了深度学习的算法。还有笔者之前学习了Udacity的课程,里面的项目有根据一段剧本,经过对模型的训练,可以生成新的剧本,还有根据一批图片比如人脸来训练相关模型,可以生成一个新的人脸。当时看到这些的时候还是觉得好神奇的。那时候就听说了使用神经网络可以大大减少传统编程所需要的时间,让程序员失业,所以心里的焦虑油然而生。

这片文章主要是为了先睹为快,并没有设计太多的技术细节,对于一个新的事物,先知其然再知其所以然,循序渐进。文中涉及的项目叫做快速风格变换,就是将输入的照片根据另外一张图片的风格,比如油画的风格,生成同样风格的一张新图片。项目是MIT的一位小哥基于tensorflow做出来的,采用的卷积神经网络(Convolutional Neural Network, 简称CNN),可以在下面的地址找到。

https://github.com/lengstrom/fast-style-transfer

先来看一下效果,下面有三张图,图一是转换成的图片风格,图二是需要被转换的图片,图三是图二根据图一的风格转换成的新图片。

2 项目运行说明

2.1 先安装Anaconda

在深度学习中会有很多依赖的包,不同的项目可能需要的包差别也比较大,比如有的项目1需要python 2和支持包A而项目2需要python 3和支持包B,这样当你同时工作在项目1和项目2的时候切换环境就十分必要,另外在工作的环境里,经常也需要对依赖的包进行管理,Anaconda就是一个很好的工具,可以很方便的进行环境和包的管理。

Anaconda的安装方法可以在这里找到,最常用的命令如下

  • 创建新环境
    conda create -n <环境名>
  • 查看已经创建的环境
    conda env list 或 conda info --envs
  • 安装包
    conda install <包名> 也可以使用pip install <包名>
  • 启动环境
    source activate <环境名> 或 conda deactivate <环境名>
  • 停用环境
    source deactivate <环境名> 或 conda deactivate <环境名>
  • 删除环境
    conda remove -n <环境名> --all 或 conda remove --name <环境名> --all
    注意:目前如果环境没有安装任何包,执行环境删除会报错,可以先随便安装一个包再删除。

2.2 创建虚拟环境

  • 创建环境tf-gpu,其中安装了tensorflow-gpu,如果不支持tensorflow-gpu可以使用tensorflow

    conda create -n tf-gpu tensorflow-gpu=2.1.0

  • 激活环境

    conda activate tf-gpu

  • 打开notebook,在这个项目中我没有用到,jupyterlab跟jupyter notebook类似,都是功能强大的记事本,jupyter notebook是基于web的交互计算环境,用来创建jupyter notebook文档,支持多种语言,如Python,Julia,R等,用来进行数据分析,数据可视化,和进一步的交互性,探索性计算。而Jupyterlab是下一代的用户界面,包含记事本,它包含模块化结构,它可以在同一个窗口以tab的形式打开多个记事本或文件(例如HTML,文本,Markdown等),类似一个集成开发环境。

    conda intall jupyterlab
    jupyter lab

  • 安装moviepy,如果只是处理图片应该不需要。

    pip install moviepy==1.0.2

2.3 训练网络

使用style.py来训练风格转换神经网络,使用python style.py可以看到所有需要的参数,训练网络需要花费很长的时间,如果在本机跑的话机器会疯狂运转,发热很厉害,而且本地机器要求配置也比较高,可以租用类似亚马逊的云服务器来跑。

用法示例
python style.py --style path/to/style/img.jpg \
  --checkpoint-dir checkpoint/path \
  --test path/to/test/img.jpg \
  --test-dir path/to/test/dir \
  --content-weight 1.5e1 \
  --checkpoint-iterations 1000 \
  --batch-size 20

其中--style跟--checkpoint-dir是必须的,其他的可以选择默认,--style为用来训练的风格图片,--checkpoint-dir是输出的模型文件,后面的评估会用到。

2.4 评估风格转换网络

使用evaluate.py来评估风格转换网络。运行python evaluate.py可以看到所有的参数。

用法示例
python evaluate.py --checkpoint path/to/style/model.ckpt \
  --in-path dir/of/test/imgs/ \
  --out-path dir/for/results/

--checkpoint指定模型,--in-path输入图片路径,--ou t-path输出图片路径

训练的时间比较长,如果可以访问google drive,可以在这里找到现成的模型文件,这里也贴上我跑出来的模型文件。

图片 模型
la_muse LaMuse
rain-princess RainPrincess
the_scream Scream
the_shipwreck_of_the_minotaur Wreck
udnie Udnie
wave Wave

下面是我用自己的图片输入产生的输出。

input
LaMuse RainPrincess Scream Wreck Udnie Wave
LaMuse RainPrincess Scream Wreck Udnie Wave

2.5 风格化视频

使用transform_video.py来转换视频的风格。运行python transform_video.py可以查看所有参数。要求ffmpeg。

用法示例
python transform_video.py --in-path path/to/input/vid.mp4 \
  --checkpoint path/to/style/model.ckpt \
  --out-path out/video.mp4 \
  --device /gpu:0 \
  --batch-size 4

--in-path输入视频,--checkpoint模型文件

示例效果

我使用另外一个风格进行处理,效果如下

原视频 LaMuse

2.6 运行要求

最后说明下关于跑该项目的硬性要求,下面是最低要求。

  • TensorFlow 0.11.0
  • Python 2.7.9, Pillow 3.4.2, scipy 0.18.1, numpy 1.11.2
  • If you want to train (and don’t want to wait for 4 months):
    • A decent GPU
    • All the required NVIDIA software to run TF on a GPU (cuda, etc)
  • ffmpeg 3.1.3 if you want to stylize video