首页 AI Studio教育版 帖子详情
论文阅读心得
收藏
快速回复
AI Studio教育版 文章课程答疑 3702 55
论文阅读心得
收藏
快速回复
AI Studio教育版 文章课程答疑 3702 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)
时间顺序
Mr.郑先生_
#2 回复于2020-08

赞!

0
回复
AIStudio810258
#3 回复于2020-08
赞!

共同进步!

0
回复
七年期限
#4 回复于2020-08

0
回复
AIStudio810258
#5 回复于2020-08

共同努力!

0
回复
AIStudio810266
#6 回复于2020-08

大佬好活跃

0
回复
luckydu
#7 回复于2020-08

0
回复
七年期限
#8 回复于2020-09

路过

0
回复
AIStudio810258
#9 回复于2020-09
大佬好活跃

哈哈

0
回复
Mr.郑先生_
#10 回复于2020-09
大佬好活跃

大佬说大佬活跃(手动狗头)

0
回复
七年期限
#11 回复于2020-09
大佬说大佬活跃(手动狗头)

哈哈

0
回复
AIStudio810258
#12 回复于2020-09
大佬说大佬活跃(手动狗头)

大佬说大佬说大佬活跃~~

0
回复
七年期限
#13 回复于2020-09
大佬说大佬说大佬活跃~~

围观

0
回复
AIStudio810266
#14 回复于2020-09
大佬说大佬活跃(手动狗头)

不敢当不敢当

0
回复
七年期限
#15 回复于2020-09
不敢当不敢当

谦虚了

0
回复
AIStudio810260
#16 回复于2020-09

期待更多复现成果/狗头

0
回复
AIStudio810258
#17 回复于2020-09
期待更多复现成果/狗头

最近好多都大佬都共享代码了

0
回复
AIStudio810258
#18 回复于2020-09
期待更多复现成果/狗头

最后2w大佬的代码是最牛的

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

老实说,我跑到几万轮,还是出现了训练不稳定的问题

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

原论文的做法有些也还是不太理解

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

比如用了谱归一化,然后还是用了权重截断。我的代码还是出现了对抗损失消失的问题

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