社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  机器学习算法

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

人工智能头条 • 6 年前 • 1172 次点击  


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

又到了 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
 
1172 次点击  
文章 [ 1 ]  |  最新文章 6 年前
汐风掠
Reply   •   1 楼
汐风掠    6 年前

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