《智能系统与技术丛书 生成对抗网络入门指南》—2.4.3Floyd实例:神经网络风格转换
2.4.3 Floyd实例:神经网络风格转换
神经网络风格转换是一种通过卷积神经网络将一张图片转换成另一张图片风格的技术。如图2-19所示,可以将一张普通的夜景照片与梵高的画作《星夜》相结合,产生一幅梵高风格的夜景照片。在后续的章节中我们也会看到,使用生成对抗网络的技术同样可以实现风格转换。本节不会涉及任何算法相关的项目代码,仅通过Floyd官方提供的神经网络风格转换范例来介绍如何使用Floyd来真正运行一个项目。
图2-19 风格转换示例
首先,按照上一节中介绍的操作在网页端新建一个名为fast-style-transfer的项目。官方已经将风格转换的源代码上传至GitHub,可以通过下列命令进行下载并在终端初始化项目。
$ git clone https://github.com/floydhub/fast-style-transfer
$ cd fast-style-transfer
$ floyd init fast-style-transfer
Project "fast-style-transfer" initialized in the current directory
为了加快示例的操作,这里的训练过程中使用了一个预先训练过的模型,可执行以下命令进行模型训练。
$ floyd run --gpu --env tensorflow-0.12:py2 --data narenst/datasets/coco-
train-2014/1:images --data narenst/datasets/neural-style-transfer-pre-
trained-models/1:models --data floydhub/datasets/imagenet-vgg-verydeep-
19/3:vgg "python style.py --vgg-path /vgg/imagenet-vgg-verydeep-19.mat --
train-path /images/train2014 --style examples/style/la_muse.jpg --base-
model-path /models/la_muse.ckpt --epoch 1 --total-iterations 10 --checkpoint-
dir /output"
训练过程中可以使用下面的命令查看日志,可以看到在经过了10次迭代之后训练完成。如果希望模型的表现更优秀,可以调节迭代次数,但可能会花费更多的时间,大约训练时间在8小时的情况下模型训练效果最佳。
$ floyd logs <JOB_NAME> -t
最后我们需要通过info命令查看任务的详细信息,以获取模型输出的位置。
$ floyd info <JOB_NAME>
项目中已经包含了评估模型的代码evaluate.py,可以将任何你想进行风格转换的照片放到项目的images文件夹中,再执行模型评估代码。
$ floyd run --env tensorflow-0.12:py2 --data <REPLACE_WITH_OUTPUT_NAME>:input
"python evaluate.py --allow-different-dimensions --checkpoint /input/fns.
ckpt --in-path ./images/ --out-path /output/"
执行成功后使用output命令来输出评估结果。
$ floyd output <JOB_NAME>
如图2-20所示是我们测试的图片,左图为原图,右图为风格转换后的图片。
图2-20 使用Floyd运行完成的风格转换示例
接着我们尝试基于该模型通过Floyd搭建线上API服务。在项目的app.py文件中已经整合了Flask框架,我们仅需使用run命令的serve模式即可开启API服务。它的整个机制是通过Flask框架来处理请求信息,然后通过之前的evaluate.py来将输入的图片进行处理并返回。
$ floyd run --env tensorflow-0.12:py2 --data narenst/datasets/neural-style-
transfer-pre-trained-models/1:input --mode serve
Syncing code ...
JOB NAME
-------------------------------------------
narenst/projects/fast-style-transfer/5
URL to job: https://www.floydhub.com/narenst/projects/fast-style-transfer/5
URL to service endpoint: <your_api_url>
API搭建完成后使用curl命令可以测试。
curl -o output.jpg -F "file=@./images/input.jpg" <your_api_url>
- 点赞
- 收藏
- 关注作者
评论(0)