首页 AI Studio教育版 帖子详情
论文阅读心得
收藏
快速回复
AI Studio教育版 文章课程答疑 3563 55
论文阅读心得
收藏
快速回复
AI Studio教育版 文章课程答疑 3563 55

StarGAN v2 Diverse Image Synthesis for Multiple Domains阅读心得(Paddle论文复现营)

 

这是发在ECCV2020的GAN新论文。我觉得要想用Paddle复现论文的研究成果,首要是要理清相关领域的技术脉络。也就是说,想练新发明的大招,得先解锁技能树。不然,即使作者高风亮节的公开了pytorch版源码,要读懂并翻译成Paddle版本也是“天书奇谭”(天书其实也不难,小盆友都能读懂~~)。

精读课上,美女老师已经好心的给出了阅读这篇StarGAN v2论文的三篇前导论文(Conditional Generative Adversarial Nets、unpaired Image-to-Image Translation using Cycle-Consistent Adversarial Networks和Unified Generative Adversarial Networks for Multi-Domain Image-to_Image Translation)和两个论文中用到的技术(AdaIN和Adaptive Wing Loss)。我就以此为先导爬了下技能树:

1. StarGAN

1.1. Conditional GAN

1.1.1. GAN

1.1.2. WGAN

1.2. CycleGAN

1.2.1. Pix2Pix

1.2.1.1. PatchGAN

1.2.1.1.1. GAN

2. AdaIN

2.1. BN、LN、IN、GN

3. Adaptive Wing loss

3.1. Wing loss

我的GAN技能解锁数序是这样的:

1)跑通基本的GAN,了解一个G(生成器)VS 一个D(判别器)经典网络。了解WGAN对经典GAN的loss函数的改进,因为WGAN能稳定GAN的训练。AI Studio中有生成手写数字的项目案例。

2)在GAN的基础上,了解Conditional GAN 如何在训练时往G的输入里添加latent信息,并在预测时通过latent信息控制G输出图像的类别。AI Studio中有按类别生成手写数字的项目案例。

3)在GAN的基础上,了解Pix2pix如何将输入的噪声z替换为输入图片,并与另一张与输入图片成对儿的图片进行协同训练,使生成器学习如何将一张图片映射为对应图片的分布规律。AI Studio中有用Pix2pix进行街景图像分割的案例。这个案例也可反向使用,即用分割信息生成街景图片。这就涉及到生成图片是否清晰的问题,正好使用PatchGAN的方法改进判别器,让判别器通过一小块图片而不再是一个值来评价生成器。

4)在Pix2pix的基础上,了解CycleGAN如何使用一对儿Pix2Pix(两个G、两个D)循环训练两组图片,突破Pix2pix模型要求输入的两组图片必须一一对应的限制。AI Studio上有马变斑马的项目案例。

5)解锁了CGAN和CycleGAN就可以正式修炼StarGAN了。StarGAN使用了CGAN的利用latant信息的方法改进了CycleGAN,通过提供一种掩码向量,使多个域的特征转化只需一个G和一个D,大大提高了模型效率,在人脸属性转移和表情改变上的应用很成功。AI Studio上有人脸变化的项目案例。

AdaIN是自适应实例规范化。数据可以根据进行规范化的范围进行BN(批规范化,这个在加速模型训练上常用)、LN(层规范化)、IN(实例规范化)和GN(分组规范化)。AdaIN则结合了LN和IN,通过一个参数调节,选择GAN模型是更多的保存原图像的语义特征还是使风格转换得更彻底。

Wing loss是一种比L1和L2loss更适合人脸检测任务的专门设计的loss函数,在各种姿态的人脸关键点检测任务中具有更高的准确性和鲁棒性。Adaptive Wing loss是Wing loss的改进版本,将关键点的边界Boundary和关键点landmark一起训练,通过平衡前景和背景的误差,起到辅助提升精度的效果。

在学习这些前导内容的过程中,我觉得CSDN上的博客对了解各个经典模型和快速了解论文很有帮助,如果比较熟悉Pytorch可以看看github上的论文源码。而且,Paddle的CV模型库里的那些GAN模型是一个非常好的代码学习资源,GAN、CGAN、Pix2pix、CycleGAN、StarGAN全都有静态图模式的源码。更妙的是Paddle库里有现成reader,可以很方便的读取那些经典GAN论文的数据集,给我省了不少时间~~。

StarGAN的v2版本不再像StarGAN v1那样直接使用latent code指定生成的图像的风格。而是可以1)输入噪声+latent code经Mapping Network生成style code,或2)输入目标风格图片经style encoder生成style code两种方式指定生成图像的风格。过程中通过AdaIN完成风格迁移,同时保证生成多样性。

StarGAN由Generator、Discriminator、Style encoder 和 Mapping network 四个网络组成。

1)Generator与v1版本类似,使用包含残差块的卷积层和转置卷积层的全卷积网络,不同的是后半部分的卷积和转置卷积层使用AdaIN方式归一化。输入为原域图片和Style encoder 或 Mapping network 生成的风格编码,输出生成的目标域图片。

2)Discriminator经残差块组成的卷积网络最后接1×1的卷积层。输入原域图片或生成的图片,输出图片属于各个domain的概率。

3)Style encoder 的结构和Discriminator一样,只有最后接的是全连接层。输入目标风格图片,输出对应的风格编码。

4)Mapping network 是一个8层的MLP多层感知机,输入是噪声z和letant code代表的风格,输出的也是对应的风格编码。

模型的Loss由Adversarial objective、Style reconstruction、Style diversification和Cycle consistency loss四部分组成。总的损失函数如下:

我在选择目标复现论文时主要还是考虑了兴趣和学习的机会。我比较喜欢玩图像生成、风格迁移所以选择了GAN路线。而这篇StarGAN v2相较前两篇生成视频和动图的文章的“GAN血统更加纯正”(主要是视频处理的技能树还没解锁,已经决定营后解锁技能,全部玩耍一遍),而且烧卡温度(硬件要求)稍低。其实,我感觉GAN路线的第5篇论文所需的技能树应该更少一点,GAN只需用到CycleGAN,介绍技术主要是AdaLIN,似乎可以作为StarGAN v2的一篇先导论文学习。最后,我还是想趁着这次难得的学习机会,多见识一些GAN的风光,选了StarGAN这篇来复现。正所谓“高山仰止,景行行止,无论马上能不能至,我都一心向往之~~”。

PS:以上这些技能槽我也没有全部解锁,有些还在修炼中,也拿不准时间是否来得及。为了提高论文复现的成功率,我觉得先复现下论文GAT-IT: Unsupervised Generative Attentional Networks with Adaptive Layer-Instance Normalization for Image-to-Image Translation也算是个稳妥的选择。

 

0
收藏
回复
全部评论(55)
时间顺序
AIStudio810258
#22 回复于2020-09

看着这组2w大佬的解决方案吧

0
回复
AIStudio810258
#23 回复于2020-09

昨天发布paddle2.0了,我在用新版本试试

0
回复
AIStudio810258
#24 回复于2020-09

再试试用权重惩罚代替梯度截断的效果

0
回复
暮光の灵
#25 回复于2020-09

前来学习

 

0
回复
七年期限
#26 回复于2020-09
昨天发布paddle2.0了,我在用新版本试试

已经发布了吗

0
回复
AIStudio810258
#27 回复于2020-09
已经发布了吗

beta版

0
回复
AIStudio810258
#28 回复于2020-09
前来学习  

共同提高!

0
回复
thinc
#29 回复于2020-09

大...大佬

0
回复
thinc
#30 回复于2020-09

19年的First Order Motion好像也有在复现营,不知道有没有人写过

0
回复
七年期限
#31 回复于2020-09
thinc #30
19年的First Order Motion好像也有在复现营,不知道有没有人写过

感觉自己水平差太多了

0
回复
AIStudio810258
#32 回复于2020-09
thinc #30
19年的First Order Motion好像也有在复现营,不知道有没有人写过

这个“好玩”,但不“好”玩~~

0
回复
thinc
#33 回复于2020-09
这个“好玩”,但不“好”玩~~

哈哈哈  大佬喜欢玩文字游戏

0
回复
七年期限
#34 回复于2020-09
thinc #33
哈哈哈  大佬喜欢玩文字游戏

哈哈  可以的

0
回复
AIStudio810258
#35 回复于2020-09
thinc #33
哈哈哈  大佬喜欢玩文字游戏

越来越感觉,gan真的不是那么好干的啊~~

 

0
回复
AIStudio810258
#36 回复于2020-09
thinc #33
哈哈哈  大佬喜欢玩文字游戏

不容易玩好,但真得很好玩~~

0
回复
AIStudio810258
#37 回复于2020-09
哈哈  可以的

文字游戏可以,但数学真是个绕不过去的山,只能往上硬着头皮爬。。。

0
回复
AIStudio810258
#38 回复于2020-09
文字游戏可以,但数学真是个绕不过去的山,只能往上硬着头皮爬。。。

不看推导,先用结论,真得就只能靠运气了。要想debug还是必须得清楚原理

0
回复
thinc
#39 回复于2020-09
越来越感觉,gan真的不是那么好干的啊~~  

真的难gan啊

0
回复
thinc
#40 回复于2020-09
文字游戏可以,但数学真是个绕不过去的山,只能往上硬着头皮爬。。。

数学没有捷径,太难了

0
回复
AIStudio810258
#41 回复于2020-09
thinc #40
数学没有捷径,太难了

如果不是搞研究、改进,只是弄懂推导、原理应该还凑合着吧,就是要花好多时间啊。。。

0
回复
在@后输入用户全名并按空格结束,可艾特全站任一用户