热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

异父异母的三胞胎:CycleGAN,DiscoGAN,DualGAN

(英文版:http:ruotianluo.github.io20170413triplets)我基本上是在不同地方看到的这三篇文章,然后略微一读发现。。。。居然竟是同一个模型。同一

(英文版:http://ruotianluo.github.io/2017/04/13/triplets/

我基本上是在不同地方看到的这三篇文章,然后略微一读发现。。。。居然竟是同一个模型。同一个世界同一个idea。当然啦,文章上还有一些不同,包括motivation,模型细节还有实验上有些不同。

任务

这里的任务是图像到图像的翻译。如果大家看过去年一篇cvpr的论文,叫pix2pix的话,对这个任务就比较熟悉。就算你们不知道pix2pix,之前有一个很火的,可以把线条画变成猫的网页应用,就是用的pix2pix的算法。然而pix2pix的模型是在成对的数据上训练的,也就是说,对于线条到猫的应用,我们训练的时候就需要提供一对一对的数据:一个线条画,和对应的真实的猫图片。

然而在很多情况下,我们并没有这样完美的成对的训练数据。比如说如果你想把马变成斑马,并没有这样对应的一个马对应一个斑马。然而,马的图片和斑马的图片却很多。所以这篇论文就是希望,能够通过不成对的训练数据,来学到变换。

(我们在组会上讨论的时候,老板提出这个算法在vision上并没有十分solid,能够改变世界的应用。但是这并不重要,我不需要考虑改变世界。)

但是去年有一篇论文叫dual learning,做的是机器翻译。如果你考虑在语言之间的翻译的话,这个任务可能比图片翻译到图片更有意义。在机器翻译中,成对的翻译数据非常有限,但是单一语言的预料非常的多。这篇paper就是讨论如何用独自的语料来帮助翻译。事实上,dualgan这篇paper的出发点就来源于此,并且这三篇文章的中心创新点(cycle consistentcy)就是dual learning中的想法。(虽然cyclegan似乎不知道这篇论文,并没有引用dual learning)

CycleGAN的出发点更抽象。他们introduction第一段就开始讨论莫奈;他们的意思是,给一副莫奈的画,人能够想象出莫奈画的景色原来应该是什么样子,所以一个牛逼的AI应该也能做这件事。

模型(三篇文章一毛一样):

一个普通的GAN只有一个生成器和一个判别起。而在这篇文章里,分别有两个生成器和判别器。一个生成器将X域的图片转换成Y域的图片(用G表示),而另一个生成器做相反的事情,用F表示。而两个判别器《异父异母的三胞胎:CycleGAN, DiscoGAN, DualGAN》
《异父异母的三胞胎:CycleGAN, DiscoGAN, DualGAN》

网络细节:

CycleGAN:

这里的generator跟 Perceptual losses for real-time style transfer and super-resolution是一样的。他们使用了Instance Normalization。判别器使用的和pix2pix一样(PatchGAN on 70×70 patches). 为了稳定GAN的训练,他们使用了最小二乘gan(least square gan)和 Replay buffer。不像pix2pix,他们的模型没有任何的随机性。(没有随机输入z,没有dropout)这里的生成器更像是一个deteministic的style transfer模型,而不是一个条件GAN。他们使用了L1距离作为cycle consistency.

DualGAN:

他们的生成器和判别器都和pix2pix一样 (没有随机输入z,但是有dropout的随机)。 他们用了wgan来训练。cycle consistency同样选用了l1。

DiscoGAN:

他们用了conv,deconv和leaky relu组成了生成器,然后一个conv+leaky relu作为判别器。他们用l2作为cycle consistency。

实验

CycleGAN:

一个主要的实验是,在cityscapes数据集中,从图片和其语义分割的双向翻译。他们的用的评估方法和pix2pix中完全相同。CycleGAN和CoGAN, BiGAN, pix2pix(算作上界)进行了比较。其中,CoGAN这个模型在设计之初也是为了同样的任务:idea是通过两个共享weight的生成器来从相同的z生成两个域的图片,这个两个图片都需要通过各自域的判别器的检测。 BiGAN原本是为了能够找到G的逆函数E的(输入图片输出z)。这里如果你把z当作一个image,那bigan就可以用来做这个任务。

结果证明CycleGAN比所有baseline都要优秀。当然跟pix2pix还是有所差距,但是毕竟pix2pix是完全监督的方法。

他们又研究了cyclegan每个成分起到的作用:只有adversarial loss没有cycle consistency;只有cycle consistency没有adversairial loss;只有一个方向的cycle consistency。结果如下图(一句话,每个部分都很重要)。

《异父异母的三胞胎:CycleGAN, DiscoGAN, DualGAN》
《异父异母的三胞胎:CycleGAN, DiscoGAN, DualGAN》

后面他们还试了很有趣的一些应用,那些应用没有进行评估,因为没有ground truth来进行评估。这些应用包括边缘<->鞋,马<->斑马,橙子<->苹果,冬景<->夏景,艺术画<->照片。结果都很酷炫。

DualGAN:

他们做了PHOTO-SKETCH, DAY-NIGHT, LABEL-FACADES和AERIAL-MAPS的实验。在某些实验中,他们甚至得到了比pix2pix更高的realness 分数(采集自amt)。在我看来,这说明realness是一个很差的评价方式,因为本质上只要你输出足够真实的图片就可以,而不需要跟输入的图片有关。

DiscoGAN:

我很喜欢这篇文章中的toy experiment。他们人工生成了两个域的GMM数据点,然后根据这个人造数据学习了一个DiscoGAN。另外两个baseline,一个是最简单的GAN,另一个是GAN with forward consistency(也就是一边的consistency)。这两个baseline都会有mode collapse的问题。

《异父异母的三胞胎:CycleGAN, DiscoGAN, DualGAN》
《异父异母的三胞胎:CycleGAN, DiscoGAN, DualGAN》

他们也有一个car到car的toy experiment。每个domain都有不同角度的3d车的图片,每15度有一些。然后你可以在这两个domain上学习discogan,可以得到角度的对应。 跟baseline相比,discogan能获得更correlated的角度关系。

《异父异母的三胞胎:CycleGAN, DiscoGAN, DualGAN》
《异父异母的三胞胎:CycleGAN, DiscoGAN, DualGAN》

他们也试了FACE to FACE,FACE CONVERSION(性别,发色等r etc.), CHAIR TO CAR, CAR TO FACE, EDGES TO PHOTOS, HANDBAG TO SHOES, SHOES TO HANDBAG。这些实验都是qualitative的实验,而且也并不怎么酷。

讨论

有趣的现象:wrong mapping。因为这是完全unsupervised,所以有时候模型会找到错误的mapping。比如说在cyclegan里,photos to labels的,building经常会被标注成树。在discoGAN图5(最后一列)里也可以看到,学到的变化是flipping(而不是exactly相同角度对应)。

此外,像狗变猫,猫变狗这样的任务也很难,因为这涉及到几何变换。我其实很怀疑这个任务是否有意义:因为这个任务很难有一个标准,就算让人将狗变成猫,这都是一件很困难的事。就算你能保留原来的pose,但是比如说品种之间如何变换,很难定义。

另外一件没有在本文中讨论的是,我觉得挺有意思的是:现在的cycle是一圈,如果我们考虑两圈,或者一圈半之类的,会有什么结果呢。

(写博客真花时间)


推荐阅读
  • CF:3D City Model(小思维)问题解析和代码实现
    本文通过解析CF:3D City Model问题,介绍了问题的背景和要求,并给出了相应的代码实现。该问题涉及到在一个矩形的网格上建造城市的情景,每个网格单元可以作为建筑的基础,建筑由多个立方体叠加而成。文章详细讲解了问题的解决思路,并给出了相应的代码实现供读者参考。 ... [详细]
  • 【论文】ICLR 2020 九篇满分论文!!!
    点击上方,选择星标或置顶,每天给你送干货!阅读大概需要11分钟跟随小博主,每天进步一丢丢来自:深度学习技术前沿 ... [详细]
  • 上一章讲了如何制作数据集,接下来我们使用mmcls来实现多标签分类。 ... [详细]
  • 微软头条实习生分享深度学习自学指南
    本文介绍了一位微软头条实习生自学深度学习的经验分享,包括学习资源推荐、重要基础知识的学习要点等。作者强调了学好Python和数学基础的重要性,并提供了一些建议。 ... [详细]
  • 基于PgpoolII的PostgreSQL集群安装与配置教程
    本文介绍了基于PgpoolII的PostgreSQL集群的安装与配置教程。Pgpool-II是一个位于PostgreSQL服务器和PostgreSQL数据库客户端之间的中间件,提供了连接池、复制、负载均衡、缓存、看门狗、限制链接等功能,可以用于搭建高可用的PostgreSQL集群。文章详细介绍了通过yum安装Pgpool-II的步骤,并提供了相关的官方参考地址。 ... [详细]
  • 生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ... [详细]
  • 云原生边缘计算之KubeEdge简介及功能特点
    本文介绍了云原生边缘计算中的KubeEdge系统,该系统是一个开源系统,用于将容器化应用程序编排功能扩展到Edge的主机。它基于Kubernetes构建,并为网络应用程序提供基础架构支持。同时,KubeEdge具有离线模式、基于Kubernetes的节点、群集、应用程序和设备管理、资源优化等特点。此外,KubeEdge还支持跨平台工作,在私有、公共和混合云中都可以运行。同时,KubeEdge还提供数据管理和数据分析管道引擎的支持。最后,本文还介绍了KubeEdge系统生成证书的方法。 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • 本文介绍了Java工具类库Hutool,该工具包封装了对文件、流、加密解密、转码、正则、线程、XML等JDK方法的封装,并提供了各种Util工具类。同时,还介绍了Hutool的组件,包括动态代理、布隆过滤、缓存、定时任务等功能。该工具包可以简化Java代码,提高开发效率。 ... [详细]
  • 本文介绍了Oracle数据库中tnsnames.ora文件的作用和配置方法。tnsnames.ora文件在数据库启动过程中会被读取,用于解析LOCAL_LISTENER,并且与侦听无关。文章还提供了配置LOCAL_LISTENER和1522端口的示例,并展示了listener.ora文件的内容。 ... [详细]
  • sklearn数据集库中的常用数据集类型介绍
    本文介绍了sklearn数据集库中常用的数据集类型,包括玩具数据集和样本生成器。其中详细介绍了波士顿房价数据集,包含了波士顿506处房屋的13种不同特征以及房屋价格,适用于回归任务。 ... [详细]
  • mysql-cluster集群sql节点高可用keepalived的故障处理过程
    本文描述了mysql-cluster集群sql节点高可用keepalived的故障处理过程,包括故障发生时间、故障描述、故障分析等内容。根据keepalived的日志分析,发现bogus VRRP packet received on eth0 !!!等错误信息,进而导致vip地址失效,使得mysql-cluster的api无法访问。针对这个问题,本文提供了相应的解决方案。 ... [详细]
  • 十大经典排序算法动图演示+Python实现
    本文介绍了十大经典排序算法的原理、演示和Python实现。排序算法分为内部排序和外部排序,常见的内部排序算法有插入排序、希尔排序、选择排序、冒泡排序、归并排序、快速排序、堆排序、基数排序等。文章还解释了时间复杂度和稳定性的概念,并提供了相关的名词解释。 ... [详细]
  • S3D算法详解
    S3D论文详解论文地址:RethinkingSpatiotemporalFeatureLearning:Speed-AccuracyTrade-offsinVide ... [详细]
  • navicat生成er图_实践案例丨ACL2020 KBQA 基于查询图生成回答多跳复杂问题
    摘要:目前复杂问题包括两种:含约束的问题和多跳关系问题。本文对ACL2020KBQA基于查询图生成的方法来回答多跳复杂问题这一论文工作进行了解读 ... [详细]
author-avatar
郁小草__
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有