这篇文章是我的《AI绘画系列》的第三篇,点击此处可以查看整个系列的文章
本篇文章的源码可以在微信公众号「01二进制」后台回复「图像风格迁移」获得
简介
所谓图像风格迁移,是指将一幅内容图A的内容,和一幅风格图B的风格融合在一起,从而生成一张具有A图风格和B图内容的图片C的技术。目前这个技术已经得到了比较广泛的应用,这里安利一个app——"大画家",这个软件可以将用户的照片自动变换为具有艺术家的风格的图片。
![40e24b7892af4f520789c6e2f24a816e.png](https://i-blog.csdnimg.cn/blog_migrate/0276373316d041a5c03e89becb822567.jpeg)
准备
其实刚开始写这篇文章的时候我是准备详细介绍下原理的,但是后来发现公式实在是太多了,就算写了估计也没什么人看,而且这篇文章本来定位的用户就是只需要实现功能的新人。此外,有关风格迁移的原理解析的博客实在是太多了,所以这里我就把重点放在如何使用 TensorFlow 实现一个快速风格迁移的应用上,原理的解析就一带而过了。如果只想实现这个效果的可以跳到**"运行"**一节。
第一步我们需要提前安装好 TensorFlow,如果有GPU的小伙伴可以参考我的这篇文章搭建一个GPU环境:《AI 绘画第一弹——用GPU为你的训练过程加速》,如果打算直接用 CPU 运行的话,执行下面一行话就可以了
pip install numpy tensorflow scipy 复制代码
原理
本篇文章是基于A Neural Algorithm of Artistic Style一文提出的方法实现的,如果嫌看英文论文太麻烦的也可以查看我对这篇文章的翻译【译】一种有关艺术风格迁移的神经网络算法。
为了将风格图的风格和内容图的内容进行融合,所生成的图片,在内容上应当尽可能接近内容图,在风格上应当尽可能接近风格图,因此需要定义内容损失函数和风格损失函数,经过加权后作为总的损失函数。
![f621e4143ce6c3e4e6bf322a9b7b1598.png](https://i-blog.csdnimg.cn/blog_migrate/c5a5c3a9f24a1ab5af13449ccbaf44e2.jpeg)
预训练模型
CNN具有抽象和理解图像的能力,因此可以考虑将各个卷积层的输出作为图像的内容,这里我们采用了利用VGG19训练好的模型来进行迁移学习,一般认为,卷积神经网络的训练是对数据集特征的一步步抽取的过程,从简单的特征,到复杂的特征。训练好的模型学习到的是对图像特征的抽取方法,而该模型就是在imagenet数据集上预训练