转载自:https://blog.csdn.net/gdymind/article/details/82696481
本文翻译、总结自朱俊彦的线上报告,主要讲了如何用机器学习生成图片。
来源:Games2018 Webinar 64期 :Siggraph 2018优秀博士论文报告
姓名:朱俊彦(Jun-Yan Zhu)
现状:麻省理工学院博士后(PostDoc at MIT),计算机科学与人工智能实验室(Computer Science and Artificial Intelligence Laboratory, CSAIL)
个人主页:http://people.csail.mit.edu/junyanz/
周晓巍
现状:浙江大学CAD&CG国家重点实验室
个人主页:http://www.cad.zju.edu.cn/home/xzhou/
计算机视觉(Computer Vision, CV)领域近年来发生了巨大的变化。在2012年之前,CV的主要研究方法是使用**人工设计(hand-designed)**的特征完成各种任务(见下图)。
2012年使用深度神经网络(Deep Neural Network, DNN) 在ImageNet的分类任务上取得了巨大成功(见下图)。
从此**深度学习(Deep Learning)**的相关研究如火如荼地展开了,比如说下面这三个栗子:
在传统的图形学管线(pipeline)中,输出图像需要经过建模、材质贴图、光照、渲染等一系列繁琐的步骤(见下图)。
现在大家看到了Deep Learning的潜力,那我们自然的就有个想法:有没有可能使用Deep Learning简化计算机图形学(Computer Graphics)的研究呢?
一个直接的想法是把DNN“倒过来用”。之前的DNN可能是输入一幅图像,输出一个标签(比如说猫),那我们能不能输入“猫”这个字,输出一张猫的照片呢?
很遗憾,答案是No!因为这种任务实在太复杂啦!我们很难让DNN凭空输出图像这样的高维数据(High dimensional data)(这里的“高维”可以理解成数据量大)。实际上,在很长一段时间里,DNN只能输出数字这种简单的、低分别率的小图像,就像下面这样:
而想要生成想游戏场景这类的图片,这种方法根本没用。所以,我们必须得想出更厉害滴东西完成这项任务(使命感爆棚)!
于是…在月黑风高的某一天(画风逐渐跑偏),一个叫做生成对抗网络(Generative Adversarial Network)——也就是大名鼎鼎的GAN——的东西横空出世。作者是下面这位小哥和他的小伙伴们:
那么,我们该怎么GAN出图像呢?且听我细细道来~
一般来说,GAN中包含两种类型的网络 G G G GG G GGGG duang的一下变出的斑马:
可以看到,CycleGAN能够比较准确的找到橘子的位置,并把它变成苹果。
这个应用就很酷了,它以一些德国城市的照片作为输入,成功替换了游戏GTA5中的场景!
在输入骑马的普京大帝照片时,输出图像里把普京也变成了斑马。
这是因为,训练图像里并没有骑马的人,所以网络就傻掉了。
目前暂且的解决办法是先用Mask R-CNN做图像分割之后再针对马进行变化,不过这个效果也不好,因为人和马在图像上有重叠的部分。这个问题需要未来解决。
这里给出CycleGAN和pix2pix的github项目。
这是2017年github最受欢迎的项目之一,截止到本文写作时间(2018年9月),已经有5000+ Star了:
CycleGAN现在非常火,以致于很多大学和在线平台都开设了它的课程:
下面是这些课程里的一些学生作业:
Twitter上也有一些很有趣的应用,比如把狗变成猫@itok_msi:
或者把猫变成狗:
再比如“吃鸡”游戏的风格转换@Cahintan Trivedi:
不过这里存在一个严重的问题:CycleGAN只能输出256p/512p的低分辨率图像。
是的,我们还剩一个悬而未决的问题:分辨率和图像质量。pix2pixHD就是用来解决这个问题的!
假设我们输入一张高分辨率的草图:
使用pix2pix,结果很差(之前说过,让网络产生高维数据输出很难):
pix2pixHD采取了金字塔式的方法:
这样,就把一个困难的问题拆分成了两个相对简单的问题~
最终的效果是,给定下面的高分辨率草图:
pix2pixHD可以**实时(real time)**产生这样的效果:
pix2pixHD也支持用户交互,比如加一辆车、添几棵树之类的:
pix2pixHD还有许多有趣的应用。
比如用草图生成高分辨率人脸:
再比如:
目前生成的斑马视频帧与帧之间的纹理变化较大,为了解决帧之间的连续性问题,新的研究工作应运而生:Video-to-Video Synthesis。
它主要的解决思路有下面三个:
本文介绍了怎样用神经网络生成图片,我们使用pix2pix完成了基本任务,使用CycleGAN解决了输入数据不成对的问题,最后用pix2pixHD解决了图像分辨率和图像质量的问题。