热门标签 | 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. 平滑后的结果也不能和以上风格转化的步骤相差太大。平滑的部分主要是为了保证最终的平滑结果和上个阶段的输出风格结果接近,同时也保证相邻的像素点的颜色也能够接近。

 

以上~


推荐阅读
  • 能够感知你情绪状态的智能机器人即将问世 | 科技前沿观察
    本周科技前沿报道了多项重要进展,包括美国多所高校在机器人技术和自动驾驶领域的最新研究成果,以及硅谷大型企业在智能硬件和深度学习技术上的突破性进展。特别值得一提的是,一款能够感知用户情绪状态的智能机器人即将问世,为未来的人机交互带来了全新的可能性。 ... [详细]
  • Ihavetwomethodsofgeneratingmdistinctrandomnumbersintherange[0..n-1]我有两种方法在范围[0.n-1]中生 ... [详细]
  • 微信公众号推送模板40036问题
    返回码错误码描述说明40001invalidcredential不合法的调用凭证40002invalidgrant_type不合法的grant_type40003invalidop ... [详细]
  • Web开发框架概览:Java与JavaScript技术及框架综述
    Web开发涉及服务器端和客户端的协同工作。在服务器端,Java是一种优秀的编程语言,适用于构建各种功能模块,如通过Servlet实现特定服务。客户端则主要依赖HTML进行内容展示,同时借助JavaScript增强交互性和动态效果。此外,现代Web开发还广泛使用各种框架和库,如Spring Boot、React和Vue.js,以提高开发效率和应用性能。 ... [详细]
  • 视觉图像的生成机制与英文术语解析
    近期,Google Brain、牛津大学和清华大学等多家研究机构相继发布了关于多层感知机(MLP)在视觉图像分类中的应用成果。这些研究深入探讨了MLP在视觉任务中的工作机制,并解析了相关技术术语,为理解视觉图像生成提供了新的视角和方法。 ... [详细]
  • 对于众多创业公司而言,选择小程序或小视频的发展方向至关重要。本文将深入分析小程序和小视频的特点、优势及局限,帮助创业者做出更明智的选择。 ... [详细]
  • 为了确保iOS应用能够安全地访问网站数据,本文介绍了如何在Nginx服务器上轻松配置CertBot以实现SSL证书的自动化管理。通过这一过程,可以确保应用始终使用HTTPS协议,从而提升数据传输的安全性和可靠性。文章详细阐述了配置步骤和常见问题的解决方法,帮助读者快速上手并成功部署SSL证书。 ... [详细]
  • 独家解析:深度学习泛化理论的破解之道与应用前景
    本文深入探讨了深度学习泛化理论的关键问题,通过分析现有研究和实践经验,揭示了泛化性能背后的核心机制。文章详细解析了泛化能力的影响因素,并提出了改进模型泛化性能的有效策略。此外,还展望了这些理论在实际应用中的广阔前景,为未来的研究和开发提供了宝贵的参考。 ... [详细]
  • POJ 2482 星空中的星星:利用线段树与扫描线算法解决
    在《POJ 2482 星空中的星星》问题中,通过运用线段树和扫描线算法,可以高效地解决星星在窗口内的计数问题。该方法不仅能够快速处理大规模数据,还能确保时间复杂度的最优性,适用于各种复杂的星空模拟场景。 ... [详细]
  • 斯坦福大学公开课:利用神经网络技术实现自动驾驶的案例分析
    斯坦福大学的公开课深入探讨了如何利用神经网络技术实现自动驾驶。课程中通过实例展示了汽车如何通过学习算法自主驾驶。具体而言,课程展示了一幅图解,其中左下角显示了汽车前方的实时路况图像,而左上角则呈现了一个水平的菜单栏,用于展示系统处理和决策的过程。这一案例详细解析了神经网络在自动驾驶中的应用,为学生提供了宝贵的实践参考。 ... [详细]
  • 汽车电子架构与CAN网络基础解析——鉴源实验室专业解读 ... [详细]
  • 从2019年AI顶级会议最佳论文,探索深度学习的理论根基与前沿进展 ... [详细]
  • 射频领域的博士学位在信号处理算法方面具有广阔的职业前景,尤其是在射频技术的应用中。例如,加入华为的射频基站部门,从事数字预失真等关键技术的研发工作。在此过程中,需要注意持续跟踪最新的学术和技术进展,保持对行业动态的敏感性,并不断提升自身的实践能力和创新能力。此外,除了技术层面,还应关注行业的整体发展趋势,以便更好地规划职业生涯。 ... [详细]
  • 浅层神经网络解析:本文详细探讨了两层神经网络(即一个输入层、一个隐藏层和一个输出层)的结构与工作原理。通过吴恩达教授的课程,读者将深入了解浅层神经网络的基本概念、参数初始化方法以及前向传播和反向传播的具体实现步骤。此外,文章还介绍了如何利用这些基础知识解决实际问题,并提供了丰富的实例和代码示例。 ... [详细]
  • 理工科男女不容错过的神奇资源网站
    十一长假即将结束,你的假期学习计划进展如何?无论你是在家中、思念家乡,还是身处异国他乡,理工科学生都不容错过一些神奇的资源网站。这些网站提供了丰富的学术资料、实验数据和技术文档,能够帮助你在假期中高效学习和提升专业技能。 ... [详细]
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社区 版权所有