0x00

之前有一款火爆网络的图像风格转化软件 Prisma,它能将一张普通的图片转成各种艺术风格的图像。现在简单来了解一下背后的算法原理及使用Tensorflow实现一下。

0x01 原理简述

2016 CVPR 一篇文章:" Image Style Transfer Using Convolutional Neural Networks"(文章翻译) 提出了这种算法。

算法流程图:

1.png

简单地说就是使用一个训练好的卷积神经网络 VGG-19(19层VGG网络包含16个卷积层和5个池化层),而这个网络在ImageNet上已经有训练好了的。

假如现在有一张风格图像和一张普通图像风格图像经过VGG-19 的时候在每个卷积层会得到很多 feature maps, 这些feature maps 组成一个集合 A,同样的,普通图像 通过 VGG-19 的时候也会得到很多 feature maps,这些feature maps 组成一个集合 B ,然后生成一张随机噪声图像 ,同样 随机噪声图像 通过VGG-19 的时候也会生成很多feature maps,这些 feature maps 构成集合 C ,最终的优化函数是希望调整 C随机噪声图像 最后既保持普通图像 的内容, 又有一定的风格图像的风格。

2.png

想要了解更多请阅读原文 " Image Style Transfer Using Convolutional Neural Networks"(文章翻译

0x02 实现

较好的实现项目:

  1. neural-style *需要性能较好的计算机。512 x 512分辨率的图片使用不同硬件进行1000次迭代性能对比:

    1. GTX 1080 ~60s
    2. Maxwell Titan X ~90s
    3. Intel Core i7-5930K ~1h
  2. fast-neural-style-tensorflow *可以使用预训练模型或自己训练模型,使用预训练的模型在性能较低的计算机上也能较好地实现。

这里使用预训练模型。

Tensorflow安装

克隆项目:

git clone https://github.com/Rehtt/fast-neural-style-tensorflow.git

运行:

#图像
python eval.py --model_file <wave.ckpt-done模型的路径> --image_file img/test.jpg

#视频
python video.py --model_file <wave.ckpt-done模型的路径> --video_file video/test.mp4 --out_video_file video/video.mp4

详情及训练模型请阅读说明

Last modification:October 24th, 2019 at 03:28 pm
如果觉得我的文章对你有用,请随意赞赏