〇、快速风格迁移
风格迁移是CV的一个应用,通过融合风格图片和内容图片,实现图片的风格变换,“人人都是艺术家”
最早在论文《A Neural Algorithm of Artistic Style》中提出,但是这种方法是用“训练”的思想来做风格迁移,每次都要单独训练,速度很慢
快速风格迁移由《Perceptual Losses for Real-Time Style Transfer Super-Resolution》提出,主要是将风格迁移的训练和应用分离,可以快速应用
引用自:https://blog.csdn.net/jianbin...
本文是对Github项目 fast-neural-style-tensorflow 在Google Colab上的实践。
一、在计算机上实践
前期准备
- clone该GitHub项目并解压。
- 在该目录新建
pretrained
文件夹、generated
文件夹、models
文件夹和train2014
文件夹。 - 如需体验直接应用模型的过程,可以在 百度网盘 下载原作者已训练好的七个模型到
models
文件夹中。 - 下载VGG16模型并解压到
pretrained
文件夹中。下载COCO数据集到train2014
文件夹中。 - 使用pip安装tensorflow等所需包,这里我不再列出。(我的环境是Python3.6,请不要使用Python3.7,我在另一篇文章中提到了原因)
实践过程
- 将你的风格图片放在
img
文件夹中。下面我以lu.jpg
这张图片为例。 -
配置yml文件:复制
conf
文件夹中的任一yml文件并重命名为风格图片名.yml
(例如我重命名为lu.yml
) - 将第2行、第3行的绿框处改为你的风格图片名。将第8行的红框处改为你的风格权重。(风格权重的数值需要自行测试得出最佳。)
- 以上你就配置好了yml文件,可以开始训练了。
-
开始训练:在该项目所在目录打开命令行,使用
python train.py -c conf/风格图片名.yml
进行训练。(如果你同时安装了Python3.6、Python3.7两个版本,可参考我在另一篇文章中的办法,将python.exe重命名。我训练时使用的命令是python36 train.py -c conf/lu.yml
.) - 经过漫长漫长的等待(我用了足足两天,经历了12120个step),在你
models/风格图片名
目录下出现了fast-style-model.ckpt-done
文件,这就是训练好的模型了。(如果你等不及你也可以在整千个step的时候使用以下命令,将done
替换为你当前的step即可。) -
应用模型:在该项目所在目录打开命令行,使用
python eval.py --model_file 模型路径 --image_file 内容图片路径
即可应用该模型(如我:python36 eval.py --model_file ./models/lu/fast-style-model.ckpt-done --image_file img/test.jpg
)。该过程只需十秒左右。 - 在
generated
文件夹中将生成res.jpg
,就是你本次应用输出的图片了。
二、在Colab上的实践
由于在自己的计算机上训练真是太漫长太漫长太漫长了,所以我推荐在Google Colab上运行,训练时间大概只需6个小时。
前期准备
可参考我的文章:Google Colab的使用方法
实践过程
1.将所需文件(fast-neural-style-tensorflow-master文件夹
)存于Google硬盘中。
2.使用以下代码装载Google硬盘:
from google.colab import drive
drive.mount('/content/drive')
3.使用以下代码更改运行目录:
import os
os.chdir("/content/drive/fast-neural-style-tensorflow-master") //替换为你文件夹存放的目录
4.使用以下代码训练模型,该过程需约六个小时:
! python train.py -c conf/lu.yml //替换为你配置的yml文件
5.使用以下代码应用模型,该过程仅需几秒:
! python eval.py --model_file ./models/lu/fast-style-model.ckpt-done --image_file img/test.jpg //与计算机中运行命令一致
6.在generated
文件夹中将生成res.jpg
,就是你本次应用输出的图片了。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。