Py学习  »  机器学习算法

用机器学习生成图片:GAN的局限性以及如何GAN的更爽

人工智能头条 • 5 年前 • 912 次点击  


大家好,我是为人造的智能操碎了心的智能禅师。

又到了 Weekend Eve,大家应该都出去玩了吧?看到今天的标题还敢点进来看的人,禅师敬你是个肥宅。肥宅永远快乐。

今天转载的文章,来自译智社的小伙伴。这是一群来自全国多所顶级高校、很有理想的年轻人,因为热爱人工智能,组成了一个社团(字面意义的社团),努力推进人工智能的普及。说起来跟本禅师的愿景很一致嘛。

可能很多人不知道,今天其实是国际平静日(Day of Peace)。所以,今天大家应该 燥!起!来!

全文大约1500字。读完可能需要下面这首歌的时间

👇


用机器学习生成图片(上)—— GAN 和 pix2pix


本文翻译、总结自朱俊彦的线上报告,主要讲了如何用机器学习生成图片。

来源:

https://games-cn.org/games-webinar-20180913-64/


主讲嘉宾


姓名:朱俊彦(Jun-Yan Zhu

现状:

麻省理工学院博士后(PostDoc at MIT

计算机科学与人工智能实验室Computer Science and Artificial Intelligence Laboratory, CSAIL) 

个人主页

http://people.csail.mit.edu/junyanz/


主持人


姓名:周晓巍

现状:

浙江大学 CAD&CG 国家重点实验室 

个人主页:

https://fling.seas.upenn.edu/~xiaowz/dynamic/wordpress/


这是机器学习滴时代!


计算机视觉Computer Vision, CV领域近年来发生了巨大的变化。在 2012 年之前,CV 的主要研究方法是使用人工设计hand-designed的特征完成各种任务(见下图)。



2012 年使用深度神经网络Deep Neural Network, DNN ImageNet 的分类任务上取得了巨大成功(见下图)。



从此深度学习Deep Learning的相关研究如火如荼地展开了,比如说下面这三个栗子: 

  1. 物体识别(Object detection) 

    [Redmon etal., 2018]

  2. 对人体的理解(Human understanding)

    [Guler et al., 2018] 

  3. 自动驾驶Autonomous driving) 

    [Zhao et al., 2017]



图形学中的尝试:趁手的武器 or 白费功夫?


在传统的图形学管线(pipeline)中,输出图像需要经过建模、材质贴图、光照、渲染等一系列繁琐的步骤(见下图)。



现在大家看到了 Deep Learning 的潜力,那我们自然的就有个想法:有没有可能使用 Deep Learning 简化计算机图形学(Computer Graphics)的研究呢?


一个直接的想法是把 DNN 「倒过来用」。之前的 DNN 可能是输入一幅图像,输出一个标签(比如说猫),那我们能不能输入「猫」这个字,输出一张猫的照片呢?



很遗憾,答案是 No!因为这种任务实在太复杂啦!我们很难让 DNN 凭空输出图像这样的高维数据(High dimensional data)(这里的「高维」可以理解成数据量大)。实际上,在很长一段时间里,DNN 只能输出数字这种简单的、低分别率的小图像,就像下面这样:



而想要生成想游戏场景这类的图片,这种方法根本没用。所以,我们必须得想出更厉害滴东西完成这项任务(使命感爆棚)!


GAN 就完了?Naive!


于是…在月黑风高的某一天(画风逐渐跑偏),一个叫做生成对抗网络 (Generative Adversarial Network)也就是大名鼎鼎的 GAN —— 的东西横空出世。作者是下面这位小哥和他的小伙伴们:



那么,我们该怎么 GAN 出图像呢?且听我细细道来~


一般来说,GAN 中包含两种类型的网络 G D。其中,G  Generator,它的作用是生成图片,也就是说,在输入一个随机编码(random code)之后,它将输出一幅由神经网络自动生成的、假的图片 G(z)


另外一个网络 D  Discriminator 是用来判断的,它接受 G 输出的图像作为输入,然后判断这幅图像的真假,真的输出 1,假的输出 0。



在两个网络互相博弈(金坷垃日本人:不邀哒架)的过程中,两个网络的能力都越来越高:G 生成的图片越来越像真的图片,D 也越来越会判断图片的真假。到了这一步,我们就能「卸磨杀驴」—— 丢掉 不要了,把 拿来用作图片生成器。


正式一点儿讲(上公式啦),我们就是要在最大化 D 的能力的前提下,最小化 D 的判断能力,这是一个最小最大值问题,它的学习目标是:



为了增强 D 的能力,我们分别考虑输入真的图像和假的图像的情况。上式中第一项的 D(G(z)) 处理的是假图像 G(z),这时候评分 D(G(z)) 需要尽力降低;第二项处理的是真图像 x,这时候的评分要高。


GAN的局限性


即便如此,传统的 GAN 也不是万能的,它有下面两个不足:


1. 没有用户控制(user control)能力


在传统的 GAN 里,输入一个随机噪声,就会输出一幅随机图像。



但用户是有想法滴,我们想输出的图像是我们想要的那种图像,和我们的输入是对应的、有关联的。比如输入一只喵的草图,输出同一形态的喵的真实图片(这里对形态的要求就是一种用户控制)。



2. 低分辨率(Low resolution)和低质量(Low quality)问题


尽管生成的图片看起来很不错,但如果你放大看,就会发现细节相当模糊



怎样改善?


前面说过传统的 GAN 的种种局限,那么现在,我们相应的目标就是:


  • 提高 GAN 用户控制能力

  • 提高 GAN 生成图片的分辨率和质量


为了达到这样的目标,和把大象装到冰箱里一样,总共分三步:


  1. pix2pix有条件地使用用户输入,它使用成对的数据(paired data)进行训练。

  2. CycleGAN使用不成对的数据(unpaired data)的就能训练。

  3. pix2pixHD生成高分辨率、高质量的图像。



下面分别进行详细叙述~


pix2pix


pix2pix 对传统的 GAN 做了个小改动,它不再输入随机噪声,而是输入用户给的图片:



但这也就产生了新的问题:我们怎样建立输入和输出的对应关系。此时的 输出如果是下面这样,会判断是真图:



但如果 G 的输出是下面这样的,D 拿来一看,也会认为是真的图片 QAQ…也就是说,这样做并不能训练出输入和输出对应的网络 G,因为是否对应根本不影响 D 的判断。



为了体现这种对应关系,解决方案也很简单,你可以也已经想到了:我们把 G 的输入和输出一起作为 D 的输入不就好了?于是现在的优化目标变成了这样:



这项研究还是挺成功的,大家可以去在线体验一下 demo,把草图(sketch)变成图片:

链接地址:https://affinelayer.com/pixsrv/



当然,有些比较皮的用户输入了奇形怪状的草图,然后画风就变成了这样:



应用


pix2pix 的核心是有了对应关系,这种网络的应用范围还是比较广泛的,比如:


1. 草图变图片 [Isola, Zhu, Zhou, Efros, 2016]



2. 灰度图变彩色图 [Isola, Zhu, Zhou, Efros, 2016]



3. 自动着色 Data from [Russakovsky et al. 2015]



4. 交互式着色 [Zhang*, Zhu*, Isola, Geng, Lin, Yu, Efros, 2017]



下次会讲 CycleGAN  pix2pixHD ,它们分别解决了数据不成对和图像分辨率低的问题。


今天看啥 - 高品质阅读平台
本文地址:http://www.jintiankansha.me/t/PwSl8yMyGD
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/24260
 
912 次点击  
文章 [ 1 ]  |  最新文章 5 年前
汐风掠
Reply   •   1 楼
汐风掠    5 年前

为啥只搬上不搬下啊,我觉得写得很好啊。不仅讲了GAN的发展,还讨论了各自的缺陷和优点,上哪找这样的老师啊!