使用 TensorFlow 进行快速风格迁移
只需短短几秒钟,就可以将名画中的风格应用到任意照片上!你甚至可以为视频添加风格!
使用 2015 年的 Titan X 显卡,只需 100 毫秒即可将 MIT Stata Center(1024×680)处理成弗朗西斯·毕卡比亚的 Udnie 风格。
我们的实现基于 Gatys 的 艺术风格的神经算法、Johnson 的实时风格迁移与超分辨率的感知损失,以及 Ulyanov 的实例归一化 的结合。
赞助
请考虑赞助我在此项目上的工作!
许可证
版权所有 (c) 2016 Logan Engstrom。商业用途(或任何非学术研究用途)请与我联系 (电子邮件: engstrom at my university's domain dot edu)。允许用于研究,只要给予适当的署名并保留此版权声明即可。
视频风格化
这里我们将视频的每一帧都进行了转换,然后将结果合并。点击查看完整演示视频。此处的风格与上文中的 Udnie 相同。
查看如何生成这些视频 请点击这里!
图像风格化
我们将多幅名画的风格应用到了一张芝加哥的照片上。点击缩略图查看完整的应用风格图片。
实现细节
我们的实现使用 TensorFlow 来训练一个快速风格迁移网络。我们使用的大致相同的变换网络如 Johnson 所述,只不过将批量归一化替换为了 Ulyanov 的实例归一化,并且输出层的 tanh
层的缩放/偏移略有不同。我们使用的损失函数接近 Gatys 所描述的,只不过使用了 VGG19 而不是 VGG16,并且通常使用比 Johnson 实现中更“浅”的层(例如我们使用 relu1_1
而不是 relu1_2
)。经验上,这会导致转换中更大尺度的风格特征。
虚拟环境设置 (Anaconda) - Windows/Linux
测试平台
规格 | |
---|---|
操作系统 | Windows 10 家庭版 |
GPU | Nvidia GTX 2080 TI |
CUDA 版本 | 11.0 |
驱动程序版本 | 445.75 |
第一步:安装 Anaconda
https://docs.anaconda.com/anaconda/install/
第二步:构建虚拟环境
在 Anaconda Prompt 中按顺序运行以下命令:
conda create -n tf-gpu tensorflow-gpu=2.1.0
conda activate tf-gpu
conda install jupyterlab
jupyter lab
在 notebook 中运行以下命令或直接使用 conda 安装该包:
!pip install moviepy==1.0.2
按照以下命令使用 fast-style-transfer
文档
训练风格迁移网络
使用 style.py
训练一个新的风格迁移网络。运行 python style.py
以查看所有可用参数。训练在 Maxwell Titan X 上需要 4-6 小时。更详细的文档在此。在运行之前,你应该运行 setup.sh
。示例用法:
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
评估风格迁移网络
使用 evaluate.py
来评估风格迁移网络。运行 python evaluate.py
以查看所有可用参数。在 Maxwell Titan X 上评估每帧需要 100 毫秒(批量大小为 1 时)。更详细的文档在此。在 CPU 上每帧需要几秒钟。评估所用模型 在此获取。示例用法:
python evaluate.py --checkpoint path/to/style/model.ckpt \
--in-path dir/of/test/imgs/ \
--out-path dir/for/results/
视频风格化
使用 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
要求
要运行上述操作,你需要以下内容:
- TensorFlow 0.11.0
- Python 2.7.9、Pillow 3.4.2、scipy 0.18.1、numpy 1.11.2
- 如果你想训练(而且不想等上 4 个月):
- 一块不错的 GPU
- 运行 TF 在 GPU 上所需的所有 NVIDIA 软件(cuda 等)
- 如果你想风格化视频,需要 ffmpeg 3.1.3
引用
@misc{engstrom2016faststyletransfer,
author = {Logan Engstrom},
title = {Fast Style Transfer},
year = {2016},
howpublished = {\url{https://github.com/lengstrom/fast-style-transfer/}},
note = {commit xxxxxxx}
}
归功/感谢
- 如果没有 Anish Athalye 提供的建议(以及 GPU 访问权限),这个项目不可能实现。
- 该项目还借鉴了一些 Anish 的 Neural Style 代码
- 一些 README/文档格式借鉴了 Justin Johnson 的 Fast Neural Style
- README 开头的 Stata Center 图片由 [Juan