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

一堆Deep生成模型:starGAN,UNIT,MUNIT,PWCT

更多内容可关注我的知乎专栏:https:zhuanlan.zhihu.comikerpeng下面要介绍的这几种生成模型,主要集中在两种任务当中。一种是风格转换,另一种是跨域数据之间

更多内容可关注我的知乎专栏:https://zhuanlan.zhihu.com/ikerpeng

下面要介绍的这几种生成模型,主要集中在两种任务当中。一种是风格转换,另一种是跨域数据之间的转换(Cross-Domain Image-to-image)。使用的网络结构主要是自动编码器以及GAN。

StarGAN : yunjey/StarGAN

StarGAN将一个数据集上面学习到的知识转移到另一个数据集上面。如图所示:

《一堆Deep 生成模型:starGAN, UNIT, MUNIT,PWCT》

输入单张图像,同时输入你想要得到的表情类别。于是该算法就给你生成这样的图片。值得注意的是在输入数据的域(domain)当中不存在这些表情的数据,而这些表情完全是从另一个数据域当中学习到的。

这篇文章最大的特点是使用单个的生成器实现了多个数据域当中的转换。并且生成的图片的质量相当的高。具体来说明该网络的优势。假设你有来至于4个不同的域的数据集,想要实现他们相互之间的转换,那么需要至少的训练12个生成器。然后,这篇文章巧妙的将 域的标签也作为输入,于是只需要单个的生成器就可以实现不同数据之间的转换:

《一堆Deep 生成模型:starGAN, UNIT, MUNIT,PWCT》

如图所示,其中的G表示的生成器,其中的不同数字表示的是数据集的域的标号。图的左边是传统的方法,需要12个生成器,而右边表示的就是是StarGAN的算法,这里将域的编号也输入要网络当中,实现各个数据集之间的转换只需要一个生成器。

《一堆Deep 生成模型:starGAN, UNIT, MUNIT,PWCT》

具体来看一下网络的结构。如上图所示, StarGAN当中还是包括了一个判别器(G)和一个生成器(D)。如图中的(b)所示,这个G的输入是一张图片和一个目标域的编号(实际训练当中使用的是一个掩码),由此生成一张图片Fake image A。那么图片A可以从两个方面来优化调整网络:一方面,把这张图片加上输入图片的域(original domain)作为G的输入,生成另一张图片B,这个过程可以看作是一个重构的过程,那么重构的误差要最小;另一个方面,生成的骗倒判别器。也是两个方面要骗倒才好:一方面是真伪,另一方面是域的标签。这样损失函数也就很清楚了。1. 对抗误差L_adv,也就是一般性的GAN的损失函数;2. 重构误差L_rec,只和G相关,为了增加重构图像的质量;3. 域的分类损失,L_cls。因此,我们可以得到如下的损失函数分别对分类器以及判别器进行训练更新。

《一堆Deep 生成模型:starGAN, UNIT, MUNIT,PWCT》

UNIT:无监督的 Image-to-image translation :mingyuliutw/UNIT

这篇文章解决的还是不同数据集之间的生成转换的问题,作者将其定义为一个知道边缘概率密度要学习联合概率密度的问题。显然这是一个有无限解得问题。那么为了解决这个问题,作者给出了不同的数据空间共享同一个隐空间的假设,将问题转化为求解一个隐含空间的问题。文章结合了变分自编码器和GAN,构建了一个无监督的不同数据集之间的生成网络。得到的效果如图所示:

《一堆Deep 生成模型:starGAN, UNIT, MUNIT,PWCT》

该算法可以实现不同场景的转换,例如上图的图像中,实现了从白天到夜晚的场景的转换。此外类似于季节的变换,交通标志的变换等等。可以看出该算法可以对自动驾驶进行攻击!

显然很多的任务都可以归结为一个image-to-image的问题。例如,超分辨率的问题,给图画上色的问题,图像风格传输问题。根据是否存在图像对,这个任务又可以分为监督问题和无监督问题。监督问题相对简单,就是在配对的情况下,用神经网络拟合出一个映射关系;无监督问题相对比较的困难,但是显然存在更多的应用场景。而本文的算法就是一个无监督的问题。

《一堆Deep 生成模型:starGAN, UNIT, MUNIT,PWCT》

如图所展示的是该算法在人物的外貌方面的改变,包括头发的颜色,人物的表情,穿戴物品生理特征等等的改变。人物和所使用的风格处于两个不同的数据集,不存在配对的图象对。但是本文的无监督的效果也非常的逼真。那么来看一下算法的原理。

《一堆Deep 生成模型:starGAN, UNIT, MUNIT,PWCT》

如图所示,左边的图(a)是算法的核心思想。作者认为来至于两个不同的数据集的数据可以被映射到同一个隐含空间。于是作者设计了一个包含了VAE的GAN网络,如右边的(b)所示,来自于不同数据域的数据,通过不同的自编码网络将数据映射到一个隐含层空间,而从隐含层到不同数据域的重构采用的是两个不同的对抗网络的生成器部分;对于两种数据类型的网络,显然输出4种不同类型的网络。最后判别器对重构的结果进行判断,判断其真实的数据源,由此来判断生成的数据的质量,同时通过损失更新网络参数。

因此,整个网络结构由六个部分构成。其损失函数自然应该包括VAE 和GAN 应该有的损失函数,如下面的左边四项;此外作者还加入了另外两项,所谓的循环一致性(cycle consistency)。

《一堆Deep 生成模型:starGAN, UNIT, MUNIT,PWCT》

那么我们重点看看这个循环一致性。为什么要加入这两项呢?因为如果把G生成的数据再一次作为输入给到VAE,那么再一次通过G得到的输出应该和原图(生成它的那个图)保持一致,如其中的两个负号项所表示的;实际上,这个过程便形成了一个环。当然生成的Z也应该在隐空间当中,如其中的KL散度所表示的。

当然个人觉得其中的第一项多余~

《一堆Deep 生成模型:starGAN, UNIT, MUNIT,PWCT》

MUNIT:NVlabs/MUNIT

这篇文章实际上就是上一篇文章的扩展,这种扩展被称作是多模态数据之间的转换。UNIT认为不同的数据集可以共享同一个隐空间,而MUNIT更进一步,他认为他们能够共享的这个空间叫做内容空间(content),而同时他们应该存在着一种彼此差异的空间,他将这个称作风格空间(style)。如下图所示:

《一堆Deep 生成模型:starGAN, UNIT, MUNIT,PWCT》

从第一个数据域当中采集到一个样本为豹,它实际上可以被分解为两个部分:内容部分以及风格部分。如果我比较完美的完成了上述的分解,那么,从上述结果的内容空间当中采样,同时从另一个数据空间构成的风格空间采样,结合二者进行重构,我们是不是就能够得生成另一个空间的数据呢?并且这也是一种无监督的算法,具有更好的应用场景。我们来看一下生成的一些结果:

《一堆Deep 生成模型:starGAN, UNIT, MUNIT,PWCT》

完成的任务的种类也非常地多实现得效果也非常的好。如上图所示,MUNIT可以实现从轮廓到着色的过程;同时也可以实现风景图像的季节变换。这里所生成的图像都是原来的数据库当中不存在的图像。我们还是从算法层面看一下是如何实现的。

《一堆Deep 生成模型:starGAN, UNIT, MUNIT,PWCT》

如图所示,左边是在同一个数据域当中的分解和重构。这里同样还是两个自编码器,但是不同以往的是,编码的过程中通过两部分网络映射到隐空间,因此隐空间中被分解为内容和风格两个部分的特征;因此,在解码的时候便是从这两个部分进行重构。再来看右边的部分,它表示的是在不同的数据域之间的变换。1数据域当中的数据x1分解得到内容部分c1,那么采样2数据域当中的风格s2,二者结合重构出一个数据x1->2,那么应该满足的约束条件,也就是我们的损失函数是什么呢?主要应该有两点:1. 重构出来的数据x1->2 应该尽量的接近2数据域当中的分布;2. 如果通过再对数据x1->2 进行编码(也就是输入到),得到的内容以及风格部分应该尽量的接近输入。因此我们得到如下的损失函数,最大化函数来更新D网络参数,最小化函数来更新E和G网络。除了隐空间的分解之外,本质上和UNIT没太大区别 。

《一堆Deep 生成模型:starGAN, UNIT, MUNIT,PWCT》

在模型的损失函数当中,除了GAN应该有的(上述表达式当中的前两项) 对抗损失函数之外,还应该保证图像的重构也非常的准确(上述表达式当中的第三项)。另外,假设我从1数据域使用2的风格生成了一张图像,那么把该图像再一次将这个图片输入到2的编码器,输出的内容应该和1数据当中的内容相似,输出的风格应该和2数据当中的相似(上述表达式当中的最后两项)。

 

《一堆Deep 生成模型:starGAN, UNIT, MUNIT,PWCT》

其中,编码部分通过两个编码器对图像的内容和风格分别进行编码,分别编成64D和8D的向量。而在解码部分实际上你会发现图像的重构主要还是来自于内容部分,而风格部分通过一个全连接得到256D的向量,这个向量被用来‘指导’图像重构过程当中的上采样。这个论文,尤其是这个自编码器和风格传输的任务越来越接近了,而且界限也不是那么清晰了。你可以想像将该图片之输入到内容网络部分,使用另一张图片作为风格网络部分的输入,这个重构会得到什么样的结果呢?如果增加风格网络的权重呢?

 

 

 

 

Photorealistic image stylization: NVIDIA/FastPhotoStyle

 

如果你早期关注图像的风格传输这个领域,那你对于下面的这个结果一定不陌生。图中的

A表示的是输入的原始图像,其余图像的左下角表示的是想要学习到的风格,BCD当中的大图表示的就是最终的效果。这就是两三年前的效果,在当时还是引起了不小的轰动的。但是如果我们今天再来看这些结果感觉还是差的比较多的。

《一堆Deep 生成模型:starGAN, UNIT, MUNIT,PWCT》

 

如果我们用作者甚至前面几个任务当中的概念来解释这个问题,那就是并没有将内容和风格在隐空间当中分离开来,导致风格的传输不仅传递了风格,甚至将一些内容传递了过去。并且部分的掩盖了原来的内容。上面的效果感觉就像是一幅模糊不清的油画。当然,也不乏有很强的艺术气息。而这篇文章当中的风格传输被称作是:Photorealistic 的风格传输。也就是输出的效果更加的逼真,接近于真实的相片。那我们来看一些生成的结果:

《一堆Deep 生成模型:starGAN, UNIT, MUNIT,PWCT》

你被吓倒了吗? 我是真的被吓到了。这里的第一列表示的是想要得到的风格,第二列表示的是内容图片。而最右边的那一栏就是风格传输的结果。真是被惊艳到了。感慨风格传输居然到了这种程度了。那我们还是来看一下是怎么实现的。

最开始的算法采用的是Gram矩阵来代替风格的方式,这种方式显然是比较粗暴的。而后来出现了一些通过匹配输出和输入的梯度来微调输出的结果。而这一篇文章是这样做的。

《一堆Deep 生成模型:starGAN, UNIT, MUNIT,PWCT》

实际上本文就是从NIPS2017的文章WCT上面改进的。文章主要的思想是这样的:采用一个自编码器来完成这个风格转换的任务;其中的编码器E采用VGG-19并且固定网络参数,然后来训练一个对称的解码器D。损失函数则是保证重构的图像接近于输入内容Ic,同时对重构的图像提特征风格要接近风格输入Is。表达式当中的两项分别对内容和风格进行约束。

《一堆Deep 生成模型:starGAN, UNIT, MUNIT,PWCT》

内容部分的约束项不难理解,但是WCT算法采用什么来衡量风格呢?该算法在特征空间对输入求解协方差矩阵,实际上仍然类似于Gram矩阵的做法。而本文只有稍微的不同:作者使用unpooling层代替了D当中的上采样层,此外在对应的层还加入了一个pooling的掩码。这个掩码记录了原来的获得最大值的位置。并且为了消除原来的人工痕迹,作者还做了后续的平滑网络。

《一堆Deep 生成模型:starGAN, UNIT, MUNIT,PWCT》

还是先看WCT是怎么做的:先后输入风格图片Is以及内容图片Ic,通过编码器E得到对应的特征Hs和Hc。然后对于内容和风格的特征图都求解协方差矩阵,然后构成两个分别和内容以及风格相关的矩阵Ps 和Pc,然后对内容进行转换。转换后的结果Hcs,通过解码器D进行重构,得到的结果通过上述的损失函数对解码器D进行更新。具体的其中的各个量表示为:

《一堆Deep 生成模型:starGAN, UNIT, MUNIT,PWCT》

其中:

《一堆Deep 生成模型:starGAN, UNIT, MUNIT,PWCT》

注意其中协方差矩阵的指数的符号。其中的E 表示的就是分别通过

《一堆Deep 生成模型:starGAN, UNIT, MUNIT,PWCT》

得到的特征向量构成的矩阵。本质上和最开始的nerual style transfer 当中的Gram矩阵还是一个东西。因此,在损失函数当中,除了要加入重构的图像保持和原图的相似约束之外,还需要加入对风格的约束。也就是这个类似于Gram矩阵的项:

《一堆Deep 生成模型:starGAN, UNIT, MUNIT,PWCT》

在继承了WCT的算法的基础上,本文还对风格的转换过程进行了平滑。平滑的目的主要是以下的两个方面:1. 保证领域内具有相同内容的像素点保持同样的风格;2. 平滑后的结果也不能和以上风格转化的步骤相差太大。平滑的部分主要是为了保证最终的平滑结果和上个阶段的输出风格结果接近,同时也保证相邻的像素点的颜色也能够接近。

 

以上~


推荐阅读
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • 颜色迁移(reinhard VS welsh)
    不要谈什么天分,运气,你需要的是一个截稿日,以及一个不交稿就能打爆你狗头的人,然后你就会被自己的才华吓到。------ ... [详细]
  • 【论文】ICLR 2020 九篇满分论文!!!
    点击上方,选择星标或置顶,每天给你送干货!阅读大概需要11分钟跟随小博主,每天进步一丢丢来自:深度学习技术前沿 ... [详细]
  • 微软头条实习生分享深度学习自学指南
    本文介绍了一位微软头条实习生自学深度学习的经验分享,包括学习资源推荐、重要基础知识的学习要点等。作者强调了学好Python和数学基础的重要性,并提供了一些建议。 ... [详细]
  • 生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • 本文介绍了Java工具类库Hutool,该工具包封装了对文件、流、加密解密、转码、正则、线程、XML等JDK方法的封装,并提供了各种Util工具类。同时,还介绍了Hutool的组件,包括动态代理、布隆过滤、缓存、定时任务等功能。该工具包可以简化Java代码,提高开发效率。 ... [详细]
  • 使用Ubuntu中的Python获取浏览器历史记录原文: ... [详细]
  • Linux如何安装Mongodb的详细步骤和注意事项
    本文介绍了Linux如何安装Mongodb的详细步骤和注意事项,同时介绍了Mongodb的特点和优势。Mongodb是一个开源的数据库,适用于各种规模的企业和各类应用程序。它具有灵活的数据模式和高性能的数据读写操作,能够提高企业的敏捷性和可扩展性。文章还提供了Mongodb的下载安装包地址。 ... [详细]
  • 浏览器中的异常检测算法及其在深度学习中的应用
    本文介绍了在浏览器中进行异常检测的算法,包括统计学方法和机器学习方法,并探讨了异常检测在深度学习中的应用。异常检测在金融领域的信用卡欺诈、企业安全领域的非法入侵、IT运维中的设备维护时间点预测等方面具有广泛的应用。通过使用TensorFlow.js进行异常检测,可以实现对单变量和多变量异常的检测。统计学方法通过估计数据的分布概率来计算数据点的异常概率,而机器学习方法则通过训练数据来建立异常检测模型。 ... [详细]
  • 统一知识图谱学习和建议:更好地理解用户偏好
    本文介绍了一种将知识图谱纳入推荐系统的方法,以提高推荐的准确性和可解释性。与现有方法不同的是,本方法考虑了知识图谱的不完整性,并在知识图谱中传输关系信息,以更好地理解用户的偏好。通过大量实验,验证了本方法在推荐任务和知识图谱完成任务上的优势。 ... [详细]
  • 本文介绍了Python字典视图对象的示例和用法。通过对示例代码的解释,展示了字典视图对象的基本操作和特点。字典视图对象可以通过迭代或转换为列表来获取字典的键或值。同时,字典视图对象也是动态的,可以反映字典的变化。通过学习字典视图对象的用法,可以更好地理解和处理字典数据。 ... [详细]
  • 初探PLC 的ST 语言转换成C++ 的方法
    自动控制软件绕不开ST(StructureText)语言。它是IEC61131-3标准中唯一的一个高级语言。目前,大多数PLC产品支持ST ... [详细]
  • 本博文基于《Amalgamationofproteinsequence,structureandtextualinformationforimprovingprote ... [详细]
author-avatar
BYREAD315794103
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有