starGAN文章代码学习_stargan代码-程序员宅基地

技术标签: GAN  深度学习  

实验代码

代码下载

https://github.com/yunjey/StarGAN

依赖库安装

利用anaconda创建pytorch和tensorflow的虚拟环境来跑程序,公司可以上外网,框架安装过程以外的顺利。

$ conda create -n env_starGAN python=3.6
$ conda activate env_starGAN
$ conda install pytorch=0.4.0 cuda90 -c pytorch

此时报错
“The path ‘lib/libcublas.so’ specified in the package manifest cannot be found.”
输入

$ conda clean -all 

将anaconda中多余残存的文件全部删除,再次安装就装好了
安装tensorflow:

$ conda install tensorflow-gpu=1.3

报错

UnsatisfiableError: The following specifications were found to be in conflict:
  - pytorch=0.4.0 -> *[track_features=cuda90]
  - pytorch=0.4.0 -> cudnn[version='>=7.0.5,<=8.0a0']
  - tensorflow-gpu=1.3 -> tensorflow-gpu-base==1.3.0 -> cudnn=6.0

代码中tensorflow只是为了用tensorBoard,版本应该没有什么限制,那就下载最新的吧

conda install tensorflow-gpu

安装tensorflow1.12版本完成

代码运行

$ python main.py --mode train --dataset CelebA --image_size 128 --c_dim 5 \
                 --sample_dir stargan_celeba/samples --log_dir stargan_celeba/logs \
                 --model_save_dir stargan_celeba/models --result_dir stargan_celeba/results \
                 --selected_attrs Black_Hair Blond_Hair Brown_Hair Male Young

结果展示

下图为我自己跑的结果,每一列依次为 ‘original’ , ‘Black_Hair’, ‘Blond_Hair’, ‘Brown_Hair’, ‘Male’, ‘Young’。实验结果也不尽如人意,有些图效果不好,特别是young这一列。另外就是帽子和眼镜对结果的影响。
在这里插入图片描述

文章阅读

略读疑问

https://zhuanlan.zhihu.com/p/44563641

  • 网上已经有很多这篇文章的翻译了,starGAN解决的问题是多领域迁移的问题,即一个生成器判别器可以用来解决不同的风格转换的问题,它是如何做到这一点的呢,为何有效?
  • 另一点是解决了多数据集训练的问题,比如fig1注解中提到的,用RaFD的数据集训练的表情模型用到CelebA数据集上得到较好的结果,这一点如果真的做到了也很厉害,想知道是如何做到的。

精读翻译

文章截图

  • 图1: 上图展示了从RaFD数据集上学习得到的转换知识应用到CelebA数据集得到的多领域图像转换的结果。第一和第六列是输入图像,其他列是starGAN生成的图像。请注意,生成的图像都是由同一个生成器生成的,并且诸如生气,开心,恐惧等表情标签都是从RaFD数据集中来的,而不是CelebA。

  • 摘要: 近期在两个图像领域进行转换已经取得了巨大的成功。然而,现有的方法对于处理超过两个领域的转换问题仍然有很大的局限性,对于每一对图像转换任务都需要单独训练一个模型。为了解决这一局限性,我们提出了starGAN,一种新颖的可扩展的方法,能够只用一个模型去进行多领域转换任务。这样一个统一模型使得只利用一个模型对不同的数据集进行多领域的图像转换任务成为可能。这也使得StarGAN相对于现有模型在图像转换任务上有着更好的质量,也具有更加新颖的灵活转换的能力。我们在经验上证明了我们方法在人脸转换和表情分析方面的有效性。

  • Introduction: 主要贡献:

  • 我们提出了StarGAN,一种新颖的生成对抗网络,能够只用一个生成器和判别器学习多领域图像之间的映射。

  • 我们证明了利用mask vector的方法我们成功的在不同的数据集上学习多领域图像的转换,这也使得我们提出的StarGAN能够控制各领域的标签。

  • 我们使用StarGAN在人脸属性转换和人脸表情分析任务中提供了定量和定性的结果,展示了本模型相对于其他模型的优越性。
    在这里插入图片描述

  • 图2: 跨领域模型和我们提出的StarGAN模型对比,(a)中跨领域模型需要没两个图像领域对之间就训练一个生成器。(b)中starGAN能够只用一个生成器学习不同领域图像间的映射。图中展示了一个跨领域连接的五角星。
    在这里插入图片描述

  • 图3: StarGAN主要由两部分构成,一个判别器D和一个生成器G。(a)D学习判别真图和假图,并将真实图像分类到其所属类别。(b)G将图像和领域标签作为输入,生成假的图像。图像领域标签通过空间复制和输入图像concate在一起。G从假的生成图像以及原始图像标签重构出原始图像(d)G生成的图像和真实图像无法被D区分,且被D分类为目标领域。

  • 3. StarGAN网络结构: 我们首先描述了我们提出的StarGAN,在一个数据集中进行多领域的图像转换任务;然后我们讨论了如何使StarGAN能合并包含不同标签的数据集以及对其中任意的标签属性灵活进行图像转换。

    • 3.1 多领域图像转换:
      我们的目标是训练一个生成器G,能够多领域映射。为了实现这一目标我们训练了一个生成器G,它能将带有领域标签c的输入图像x转换为输出图像y,G(x,c)->y。我们随机生成目标领域标签c使得G能够灵活的转换输入图像。我们也引入了辅助判别器使得单个判别器能够控制多领域。也就是说,我们的判别器既产生图像也产生标签的可能性:D:x->{Dsrc(x),Dcls(x)},图3说明了我们提出方法的训练过程。
      • 对抗误差(Adversarial Loss)
        为了使生成图像与真实图像无法区分,我们使用以下对抗损失函数:
        Ladv=Ex[logDsrc(x)] + Ex,c[log(1 - Dsrc(G(x,c)))]
        G生成图像G(x,c),由输入图像x和目标领域标签c的到,同时判别器D试图区分开真实图像和生成图像。这篇文章中我们将Dsrc(x)作为输入图像x经过判别器D之后得到的可能性分布。生成器G使这个式子尽可能的小,而判别器D则尽可能使其最大化。
      • 分布判别损失函数(Domain Classification Loss)
        对于一个输入图像x和目标分布标签c,我们的目标是将x转换为输出图像y,y能够被正确分类为目标分布c。为了实现这一目标,我们在D的顶部加入了辅助分类器,并加入分布分类损失函数,使其对生成器和判别器都起到正则化的作用.也就是说,我们将这个式子分解为两部分:一个真实图像的分布分类损失用于约束判别器D,一个假的图像的分布分类损失用于约束生成器G。其公式如下所示:
        Lrcls = Ex,c’[-logDcls(c’|x)]
        其中,Dcls(c’|x)代表D计算出来的领域标签的可能性分布。通过将这个式子最小化,判别器D学习将真实图像x正确分类到其相关分布c’.我们假设输入图像和分布标签(x,c’)都在训练数据中给出。另一方面,假图像的分布分类的损失函数定义如下:
        Lclsf = Ex,c[-logDcls(c|G(x|c))]
        也就是说,生成器G试图使这个式子最小化,使得生成的图像能够被判别器判别为目标领域c
      • 重构误差(Reconstruction Loss)
        通过最小化对抗损失和分类损失,生成器G能够生成尽可能真实的图像,并且能够被分类为正确的目标领域。然而,最小化这两个损失函数并不能保证转换后的图像在改变输入图像中与分布相关的部分的同时保留了输入图像的其他大部分内容,为了缓解这一问题,我们对生成器使用了循环一致性损失函数,定义如下:
        Lrec = Ex,c,c’[||x - G(G(x,c),c’)||1]
        其中,生成器G以生成图像G(x,c)以及原始输入图像领域标签c’为输入,努力重构出原始图像x。我们选择L1范数作为重构损失函数。注意到我们两次使用了同一个生成器,第一次将原始图像转换到目标领域的图像,然后将生成的图像重构回原始图像。
      • 完整的损失函数表示(Full Objective)
        最终,生成器G和判别器D的损失函数表示如下:
        LD = -Ladv + λ \lambda λclsLrcls
        LG = -Ladv + λ \lambda λclsLfcls+ / l a m b d a /lambda /lambdarecLrec
        其中 λ \lambda λcls λ \lambda λrec是控制分类误差和重构误差相对于对抗误差的相对权重的超参数。在所有实验中,我们设置 λ \lambda λcls = 1 , λ \lambda λrec = 10。
    • 多数据集训练
      starGAN的一个重要优势在于它能够同时合并包含不同标签的不同数据集,使得其在测试阶段能够控制所有的标签。从多个数据集学习的问题在于标签信息对每个数据集而言只是部分已知。在CelebA和RaFD的例子中,前一个数据集包含诸如发色,性别等信息,但它不包含任何后一个数据集中包含的诸如开心生气等表情标签。这会引起问题,因为在将G(x,c)重构回输入图像x时需要完整的标签信息c’
      • 向量掩码(Mask Vector)
        为了缓解这一问题,我们引入了向量掩码 m m m,使StarGAN模型能够忽略不确定的标签,专注于特定数据集提供的明确的已知标签。在StarGAN中我们使用n维的one-hot向量来代表 m m m,n表示数据集的数量。除此之外,我们将标签的同一版本定义为一个数组:
        c ‾ \overline{c} c = [c1,…,cn, m m m]
        [·]表示串联,其中ci表示第i个数据集的标签,已知标签ci的向量能用二值标签表示二值属性或者用one-hot的形式表示多类属性。对于剩下的n-1个未知标签我们简单的置为0.在我们的实验中,我们使用了CelebA和RaFD数据集,此时n为2
      • 训练策略
        利用多数据集训练StarGAN时,我们使用上面定义的 c ‾ \overline{c} c作为生成器的输入。如此,生成器学会忽略非特定的标签,而专注于指定的标签。除了输入标签 c ‾ \overline{c} c,此处的生成器与单数据集训练的生成器网络结构一样。另一方面我们也扩展判别器的辅助分类器的分类类别到到所属聚集的所有标签。最后,我们将我们的模型按照多任务学习的方式进行训练,其中,判别器只将已知标签相关的分类误差最小化即可。例如,当模型用CelebA的图像进行训练时,判别器只是把CelebA中涉及到的属性标签的分类误差最小化,而不是RaFD数据集相关的面部表情的标签。通过这样的设置,判别器学习到了所有数据集的分类特征,生成器也学会控制所有数据集的所有标签。
        在这里插入图片描述
  • 图4 脸部属性转换在CelebA数据集上的结果,第一列是输入图像,后四列展示了单属性的转换结果,最右边四列则展示了多属性转换结果,H:发色,G:性别,A:变老

  • 实践

    • **提高GAN的训练:**为了稳定训练过程,得到质量更好的图像,我们使用带梯度惩罚的WGAN策略作为对抗损失函数
    • **网络结构:**和CycleGAN一样
  • 实验

  • 结论 这篇文章中我们提出了StarGAN,一种可扩展的只用一个生成器和判别器进行多领域图像到图像转换的模型。除了在可扩展性方面的优势,由于多任务学习策略在生成能力上的提升,StarGAN相对于其他现有方法也能生成质量更高的图像。除此之外,本文提出的单向量掩码也也使得StarGAN能够利用包含不同分布标签的不同数据集,进而可以处理从这些数据集中学习到的所有的属性标签。

疑问解答

  1. 关于单生成器解决多属性迁移的方法,文章的解决办法类似条件GAN,生成器的输入需要有期望的输出图像的domain这个信息,用以控制使生成图像的属性(发色,年龄,性别)。对应的判别器也加上一个domain判断的功能,用以约束和增强生成器往对应domain上生成。 domain标签添加方法:The target domain label is spatially replicated and concatenated with the input image,用one-hot的方式进行标签;个人感觉这就是条件GAN的延伸,通过不同的输入条件控制不同的属性迁移方向,感觉在性能上不一定能比得过专门为这个属性迁移而训练的生成器,当然,单模型做到多属性迁移这一点还是很棒的。
    在这里插入图片描述
  2. 关于多领域多数据集的问题上图能很好地说明是如何做到的,与但数据集的区别就在于标签的设置上稍微复杂了一点点。训练的时候通过加一个mask vector指示是哪一个数据集,所有数据集的属性全部都列上去,但只标出所属数据集的标签就行。这一点确实还挺机智的,佩服。

最终总结

多属性多数据集都是通过添加条件(属性标签,数据集标签)来达成目的,总体来看还是条件GAN,而且属性也无法调节强弱,同时期的文章AttGAN在控制属性的同时还可以调节强弱,之后再来个对比分析吧

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_28564033/article/details/87858790

智能推荐

分布式光纤传感器的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告_预计2026年中国分布式传感器市场规模有多大-程序员宅基地

文章浏览阅读3.2k次。本文研究全球与中国市场分布式光纤传感器的发展现状及未来发展趋势,分别从生产和消费的角度分析分布式光纤传感器的主要生产地区、主要消费地区以及主要的生产商。重点分析全球与中国市场的主要厂商产品特点、产品规格、不同规格产品的价格、产量、产值及全球和中国市场主要生产商的市场份额。主要生产商包括:FISO TechnologiesBrugg KabelSensor HighwayOmnisensAFL GlobalQinetiQ GroupLockheed MartinOSENSA Innovati_预计2026年中国分布式传感器市场规模有多大

07_08 常用组合逻辑电路结构——为IC设计的延时估计铺垫_基4布斯算法代码-程序员宅基地

文章浏览阅读1.1k次,点赞2次,收藏12次。常用组合逻辑电路结构——为IC设计的延时估计铺垫学习目的:估计模块间的delay,确保写的代码的timing 综合能给到多少HZ,以满足需求!_基4布斯算法代码

OpenAI Manager助手(基于SpringBoot和Vue)_chatgpt网页版-程序员宅基地

文章浏览阅读3.3k次,点赞3次,收藏5次。OpenAI Manager助手(基于SpringBoot和Vue)_chatgpt网页版

关于美国计算机奥赛USACO,你想知道的都在这_usaco可以多次提交吗-程序员宅基地

文章浏览阅读2.2k次。USACO自1992年举办,到目前为止已经举办了27届,目的是为了帮助美国信息学国家队选拔IOI的队员,目前逐渐发展为全球热门的线上赛事,成为美国大学申请条件下,含金量相当高的官方竞赛。USACO的比赛成绩可以助力计算机专业留学,越来越多的学生进入了康奈尔,麻省理工,普林斯顿,哈佛和耶鲁等大学,这些同学的共同点是他们都参加了美国计算机科学竞赛(USACO),并且取得过非常好的成绩。适合参赛人群USACO适合国内在读学生有意向申请美国大学的或者想锻炼自己编程能力的同学,高三学生也可以参加12月的第_usaco可以多次提交吗

MySQL存储过程和自定义函数_mysql自定义函数和存储过程-程序员宅基地

文章浏览阅读394次。1.1 存储程序1.2 创建存储过程1.3 创建自定义函数1.3.1 示例1.4 自定义函数和存储过程的区别1.5 变量的使用1.6 定义条件和处理程序1.6.1 定义条件1.6.1.1 示例1.6.2 定义处理程序1.6.2.1 示例1.7 光标的使用1.7.1 声明光标1.7.2 打开光标1.7.3 使用光标1.7.4 关闭光标1.8 流程控制的使用1.8.1 IF语句1.8.2 CASE语句1.8.3 LOOP语句1.8.4 LEAVE语句1.8.5 ITERATE语句1.8.6 REPEAT语句。_mysql自定义函数和存储过程

半导体基础知识与PN结_本征半导体电流为0-程序员宅基地

文章浏览阅读188次。半导体二极管——集成电路最小组成单元。_本征半导体电流为0

随便推点

【Unity3d Shader】水面和岩浆效果_unity 岩浆shader-程序员宅基地

文章浏览阅读2.8k次,点赞3次,收藏18次。游戏水面特效实现方式太多。咱们这边介绍的是一最简单的UV动画(无顶点位移),整个mesh由4个顶点构成。实现了水面效果(左图),不动代码稍微修改下参数和贴图可以实现岩浆效果(右图)。有要思路是1,uv按时间去做正弦波移动2,在1的基础上加个凹凸图混合uv3,在1、2的基础上加个水流方向4,加上对雾效的支持,如没必要请自行删除雾效代码(把包含fog的几行代码删除)S..._unity 岩浆shader

广义线性模型——Logistic回归模型(1)_广义线性回归模型-程序员宅基地

文章浏览阅读5k次。广义线性模型是线性模型的扩展,它通过连接函数建立响应变量的数学期望值与线性组合的预测变量之间的关系。广义线性模型拟合的形式为:其中g(μY)是条件均值的函数(称为连接函数)。另外,你可放松Y为正态分布的假设,改为Y 服从指数分布族中的一种分布即可。设定好连接函数和概率分布后,便可以通过最大似然估计的多次迭代推导出各参数值。在大部分情况下,线性模型就可以通过一系列连续型或类别型预测变量来预测正态分布的响应变量的工作。但是,有时候我们要进行非正态因变量的分析,例如:(1)类别型.._广义线性回归模型

HTML+CSS大作业 环境网页设计与实现(垃圾分类) web前端开发技术 web课程设计 网页规划与设计_垃圾分类网页设计目标怎么写-程序员宅基地

文章浏览阅读69次。环境保护、 保护地球、 校园环保、垃圾分类、绿色家园、等网站的设计与制作。 总结了一些学生网页制作的经验:一般的网页需要融入以下知识点:div+css布局、浮动、定位、高级css、表格、表单及验证、js轮播图、音频 视频 Flash的应用、ul li、下拉导航栏、鼠标划过效果等知识点,网页的风格主题也很全面:如爱好、风景、校园、美食、动漫、游戏、咖啡、音乐、家乡、电影、名人、商城以及个人主页等主题,学生、新手可参考下方页面的布局和设计和HTML源码(有用点赞△) 一套A+的网_垃圾分类网页设计目标怎么写

C# .Net 发布后,把dll全部放在一个文件夹中,让软件目录更整洁_.net dll 全局目录-程序员宅基地

文章浏览阅读614次,点赞7次,收藏11次。之前找到一个修改 exe 中 DLL地址 的方法, 不太好使,虽然能正确启动, 但无法改变 exe 的工作目录,这就影响了.Net 中很多获取 exe 执行目录来拼接的地址 ( 相对路径 ),比如 wwwroot 和 代码中相对目录还有一些复制到目录的普通文件 等等,它们的地址都会指向原来 exe 的目录, 而不是自定义的 “lib” 目录,根本原因就是没有修改 exe 的工作目录这次来搞一个启动程序,把 .net 的所有东西都放在一个文件夹,在文件夹同级的目录制作一个 exe._.net dll 全局目录

BRIEF特征点描述算法_breif description calculation 特征点-程序员宅基地

文章浏览阅读1.5k次。本文为转载,原博客地址:http://blog.csdn.net/hujingshuang/article/details/46910259简介 BRIEF是2010年的一篇名为《BRIEF:Binary Robust Independent Elementary Features》的文章中提出,BRIEF是对已检测到的特征点进行描述,它是一种二进制编码的描述子,摈弃了利用区域灰度..._breif description calculation 特征点

房屋租赁管理系统的设计和实现,SpringBoot计算机毕业设计论文_基于spring boot的房屋租赁系统论文-程序员宅基地

文章浏览阅读4.1k次,点赞21次,收藏79次。本文是《基于SpringBoot的房屋租赁管理系统》的配套原创说明文档,可以给应届毕业生提供格式撰写参考,也可以给开发类似系统的朋友们提供功能业务设计思路。_基于spring boot的房屋租赁系统论文