GAN系列:论文阅读——Analyzing and Improving the Image Quality of StyleGAN(StyleGAN改进)

2019.12的对styleGA进一步改善的论文,还是NVIDIA的。这篇论文主要从结构设计和训练方式上进行了改变,从而消除styleGAN中出现的artifacts。本文针对的artifacts主要两类:1)成水滴状的/blob-like artifacts:主要与结构设计有关,因此本文更改了normalize;2)与progressive growing的训练方法相关,因此本文更改了训练方式。

第一种artifacts呈现水滴形的模糊块,在生成图像中看起来尚不明显时在中间层的特征上就很清楚了。这种artifacts通常从64*64分辨率开始出现在每一张特征图上,并随着分辨率增加变得明显。具体如下图所示:

本文认为这种现象和styleGAN的生成器中的normalization有关,因为normalize调整了feature maps的统计信息,通过这种信号强度高的水滴块,生成器可以躲避复杂的数据生成,直接调整feature maps的统计信息。文中认为,AdaIN中的normalization是对每一个feature map单独操作的,损害了特征间的信息。博客:https://blog.csdn.net/WinerChopin/article/details/103538073 提出的看法是,AdaIN的normalization在feature maps间是独立的,但modulation又是所有feature maps共享参数,因此产生了数据分布的变化。同时,如下图所示:

第一行的feature maps在128*128时出现了水滴,但第二列没有。由于水滴的存在保证了数据的统计特性,第一列的其他位置像素值是平滑的,但第二列的特征就更清晰一些。然而在256*256时,第二列出现了多个水滴,控制了统计特性,导致最后生成图像有很大问题,然而第一列却效果较好。这说明生成图像的效果一定程度上依赖于水滴artifacts的生成,也就是说不能完全删除这种artifacts。那么如何调整水滴artifacts呢?文中的这个过程可以概括为把AdaIN+conv转化为conv,具体分析如下:

1. 研究styleGAN中生成器结构,从图a表示法换为图b表示法,内容结构未变:

其实就是把AdaIN拆分成normalization和modulation,把卷积的细节设计的权重w和偏置b表示了出来。在图b这种表示中发现,卷积中加上偏置b和随机噪声B是改变一张feature map整体均值的,这与紧接着的normalization中减去mean的操作作用是相反的,如果b+B使得均值增加了,后面的normalization就会减去它。因此对这两者进行了顺序调换,调换后再调整均值这种操作和加上偏置b+B其实作用相同,因此可以省去normalization包括modulation中的mean操作,使其通过学习偏置参数b实现(个人认为,其实就是mean和偏置b的作用会相互抵消,只用一个就够了)。更改后的结构如下图所示:

2. normalization中的std操作和Modulation中的std操作均可以附加在卷积核的操作上,进而实现对feature maps的改变,因此AdaIN+conv就可以变为单独的conv操作了,只不过卷积核发生了改变。这个过程中卷积核参数变化如下:

1). 

2). 

将std操作转移到卷积核参数上是基于i.i.d.的数据分布假设,因此这种操作是基于一定的假设,而不是完全基于实际的feature maps数据,导致之前的normalization和modulation变得不会过于严格,改善了水滴artifacts的影响。上述步骤1就是modulation对卷积核参数的影响,步骤2是normalization对卷积核的影响,因为对应这前一步的modulation,这回步骤2被称为demodulation。一些示意图如下:

水滴artifacts消失了并且全局信息都很清楚,这就是本文解决的第一个问题。

第二个问题是progressive training带来的shift invariance,就是随着图像角度的shift,生成的一些细节并未随着改变,导致了图像细节改变的不连续性,如下图所示:

脸的角度变了,然而牙齿基线却没变,这也太细节了。。。文中认为,progressive training导致生成结果对一些局部信息有偏好,在shift较小时这部分局部信息不改变,直到突然跳变到下一种,这就是所谓的unsmooth。progressive training导致每一分辨率的输出结果都是短暂的,但最后产生的图像会倾向于这个过程中出现频率最高的那个生成结果。而这个训练是一层层累积的,像素过低的时候不能生成牙齿眼球方向这些细节,生成器过渡到像素高又必须经过中间层,因此中间层使用率最高,产生的结果频率最高,因此中间层的结果经常出现在最后生成的图像中,导致了这些细节并未发生改变。为了解决这个问题,本文取消了渐进式训练,那么为了保证生成图像的质量,就需要更强大的生成器和判别器,因此尝试了9中结构改变:

分别对生成器和判别器尝试了原始结构,跳层连接/skip connection和残差结构。实验结果发现,生成器使用跳层连接更为合适,判别器使用残差结构更合适,因为判别器类似分类器,残差适合分类。最后改进的效果如下图:

在这里插入图片描述

这是两个主要创新,除此之外基于PPL的正则和large network上的研究,可以参考博客:

https://blog.csdn.net/WinerChopin/article/details/103538073

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章