参加 2019 Python开发者日,请扫码咨询 ↑↑↑
作者 | 杜飞,川大计算机小硕,目前从事算法研究工作,对GAN的“魔法”情有独钟。
转载自人工智能之开源项目推荐(公众号ID:aiprojectshare)
编辑 | Jane
【导语】AI 这位文艺青年,在琴棋书画的技艺之路可谓是越来越精湛,上周还学会了巴赫的音乐风格,在绘画道路上一直没有停下进阶的脚步,绝大多数都要归功于 GAN 模型。刚 get 写时风景画的技能,今天要为大家介绍的是 AI 如何炼就图像风格迁移大法的。
引言
图像风格转换指的是将一张参考图片的风格应用到另一张原始图片上,生成的新图片能既保留原始图片的内容,又可展现出参考图片的风格。图像风格转换兼具技术性、趣味性和实用性,一直以来是工业界和学术界的研究热点。
2016年,一款来自俄罗斯的照片美化应用Prisma ,曾风靡大江南北。Prisma借助人工智能技术将自身的能力提升到另一个层次,通过学习模仿各种著名绘画大师和主要流派的艺术风格,可以瞬间将普通照片变成让人惊叹的高逼格艺术画。今天下载安装尝试后,仍然觉得其魅力无穷,相当值得推荐。
原始图片
选择转化风格后最终效果
从技术上讲,图像转换领域主要有两种实现思路:一种是依靠深度学习技术,先分别进行特征提取然后进行特征综合,最后完成图像生成,我们称之为“特征派”。另一种是以GAN为代表的图像风格转换,通过生成器与鉴别器之间的“互搏”,最终生成新的图像,我们称之为“GAN派”。下面就细细谈谈这两个门派吧。
“特征派”
“特征派”在工作时,需要输入两张图片:一张为内容(Content)照片,该照片为待转换的原始照片,从内容照片中可以提取出主要的内容特征。另一张照片为风格(Style)照片,该照片提供了风格特征。当然现在提取特征,依靠的是深度神经网络了,比如 VGG19。“特征派”先分别构建内容损失函数和特征损失函数,然后根据加权因子融合内容损失函数和特征损失函数,获得最终的损失函数。在生成新的风格照片时,对损失函数求导,最终生成目标图片。“特征派”在生成目标图片时,需要多次对损失函数求导,因此在使用时,会有一定的计算时间。
左图为原始内容图片,下图为风格图片,右图为生成效果图
特征派典型的开源项目为neural-style, 该项目是论文“A Neural Algorithm of Artistic Style ”的实现,在 Github 上已经获取有 16612 人点赞了,人气颇旺,而且效果不错。
neural-style效果图
此外,还有deep-photo-styletransfer,该项目是其论文“Deep Photo Style Transfer ”的实现。deep-photo-styletransfer项目基于Torch和matlab 实现,要复现的话难度偏高。
deep-photo-styletransfer效果图
“GAN派”
生成式对抗网络(GAN)中,生成器(Genarator)不断生成新的图片以求骗过鉴别器;鉴别器(Discriminator)不断更新参数,提高鉴别能力,不断识别假的生成图片。在这一博弈对抗过程结束后,生成器大大提升了自己的“造假”能力,可以生成出那些以假乱真的图片。这一过程同样也适用于图像风格转换上。
pix2pix 项目燃起了利用 GAN 技术进行图像风格转换的“熊熊大火”。pix2pix 项目实现了论文 “Image-to-Image Translation with Conditional Adversarial NetWorks”,该论文由加里福利亚大学在 CVPR 2017 上发表,现在已经有 PyTorch、Tensorflow 等主流框架的多种代码实现。依靠 GAN 技术,生成器从成对数据集中学习转换方法,最终可以生成高质量的鉴别器难以区分的虚假图片,从而实现图像风格转化。
pix2pix实现效果
pix2pix 可以实现灰度图到彩色图、航空图到地图、白天到黑夜、线稿图到实物图的风格转换。但伴随而来的是一个突出问题:pix2pix 在训练时候,需要成对的数据集,现实条件下从哪里来那么多成对训练集合呢?
pix2pix成对训练集合
为解决训练数据集成对困难的问题,CycleGAN 横空出世。现在,使用CycleGAN 训练时候,不再需要使用成对的数据集了,而只需要 A 风格的数据集和 B 风格的数据集。从 A 到 B 的风格转换,GAN 可以自己完成。
CycleGAN 学习一个从源域(source domain)到目标域(target domain)的映射G:X→Y来进行图像的迁移。使用传统的对抗损失,使得生成的G(X)的图片的分布与分布Y无法区分,即使得生成的图片的分布与目标域的图片的分布逼近。为了让X转换为Y风格后,X本身不至于失真太多,那么还需要定义一个逆映射F:Y→X,使得F(G(X))≈X,逆映射F意味着把源域的生成的图片再映射回源域,与源域本身要相接近,从而新定义一个循环一致性损失(cycle consistency loss)。这就可以保证在风格转换时,不至于生成器的“演技”太浮夸而天马行空了。
CycleGAN效果图(莫奈风格图像到普通图像等)
善假于物
CycleGAN 既然可以实现在训练数据集不成对的情况下的风格转换,那么美女的素颜照是不是可以通过 CycleGAN 自动生成了呢?
根据 CycleGAN 实现风格转换思路,我们手动或者爬虫收集了素颜照和上妆照。收集素颜照非常不易,在网上一张一张的寻找,然后保存下载。美女化妆的照片倒是可以写爬虫,批量下载。收集齐数据集后,还要对数据集进行筛选清洗,最终提取人脸,生成了 256*256 的美女人脸数据集。下面要做的就是将数据集丢到 CycleGAN 算法中去啦,训练后等待结果。实验效果如下:
左图为化妆,右图为素颜
在这个实战中,我们使用的 GPU 是 4 块 1080ti,基本训练就是从晚上 8 点开始,让机器跑一晚上时间,早上起来看。我们数据集并不大,素颜照实在不好找,只有 1000 张出头,化妆照有近 2000 张。
总结与展望
图像风格转换是最近新兴起的一种基于深度学习的技术。在人工智能火速发展的今天,AI已经让图像风格转换成为普通人可以随意体验的新游戏,只要你有想法和灵感,结合AI肯定会创作出不错的图像。我们每一个人都成已为基于AI的现代画家。
参考链接
Neural-Style-Transfer
https://github.com/titu1994/Neural-Style-Transfer
deep-photo-styletransfer
https://github.com/luanfujun/deep-photo-styletransfer
pix2pix
https://github.com/phillipi/pix2pix
CycleGAN
https://github.com/junyanz/CycleGAN
(本文为 AI科技大本营转载文章,转载请联系原作者)
◆
征稿
◆
推荐阅读:
GitHub超全机器学习工程师成长路线图,开源两日收获3700+Star!
吴恩达最新斯坦福课程《深度学习》全部视频已送达,请签收!
用Python玩人脸合成,你也能有一张明星脸(附代码)
微软开源Python静态类型检查器:Pyright
雷军回应输 10 亿背后真相:世界正在青睐不务正业的人
微服务与单体架构:IT变革中企业及个体如何自处?
“别傻了,你不需要区块链!”
腾讯服务器崩溃!
曝光!月薪5万的程序员面试题:73%人都做错,你敢试吗?
❤点击“阅读原文”,查看历史精彩文章。