感谢百度飞桨提供的论文复现营的课程,本人对U-GAT-IT这篇论文很感兴趣。
论文复现课程链接:
https://aistudio.baidu.com/aistudio/education/group/info/1340
selfie2anime数据下载参考下面链接:
https://blog.csdn.net/KF_Guan/article/details/107859946
查阅一下资料以及百度大咖对这篇论文的解读,总结一下学习心得。
这篇论文的主要创新点是
1.提出了一种新的无监督图像到图像的翻译方法,该方法具有一个新的注意模块和一个新的归一化函数AdaLIN。
2.注意模块根据辅助分类器获得的注意图,通过区分源域和目标域,帮助模型知道在哪里进行集中转换。
3.AdaLIN 功能帮助注意力引导模型灵活地控制形状和纹理的变化量,增强模型鲁棒性。
U-GAT-IT的模型如下:
生成器结构可以归结下来有以下几个点:
而鉴别器具体结构与生成器类似,不过规范化使用的是谱规范化,使训练更加稳定,收敛得更好,激活函数使用的是leakyrelu
如何实现图像编码后注意力模块以及 AdaLIN 怎样引导解码得到目标域图像的呢?
CAM & Auxillary classifier
对于这部分计算 CAM,结合模型结构图做进一步理解:
由上图,我们可以看到对于图像经过下采样和残差块得到的 Encoder Feature map 经过 Global average pooling 和 Global max pooling 后得到依托通道数的特征向量。创建可学习参数 weight,经过全连接层压缩到 B×1 维,这里的 B 是 BatchSize,对于图像转换,通常取为 1。
对于学习参数 weight 和 Encoder Feature map 做 multiply(对应位想乘)也就是对于 Encoder Feature map 的每一个通道,我们赋予一个权重,这个权重决定了这一通道对应特征的重要性,这就实现了 Feature map 下的注意力机制。
对于经过全连接得到的 B×1 维,在 average 和 max pooling 下做 concat 后送入分类,做源域和目标域的分类判断,这是个无监督过程,仅仅知道的是源域和目标域,这种二分类问题在 CAM 全局和平均池化下可以实现很好的分类。
当生成器可以很好的区分出源域和目标域输入时在注意力模块下可以帮助模型知道在何处进行密集转换。将 average 和 max 得到的注意力图做 concat,经过一层卷积层还原为输入通道数,便送入 AdaLIN 下进行自适应归一化。
AdaLIN
由上图,完整的 AdaLIN 操作就是上图展示,对于经过 CAM 得到的输出,首先经过 MLP 多层感知机得到 γ,β,在 Adaptive Instance Layer resblock 中,中间就是 AdaLIN 归一化。
AdaLIN 正如图中展示的那样,就是 Instance Normalization 和 Layer Normalization 的结合,学习参数为 ρ,论文作者也是参考自 BIN [3]设计。AdaIN 的前提是保证通道之间不相关,因为它仅对图像 map 本身做归一化,文中说明 AdaIN 会保留稍多的内容结构,而 LN 则并没有假设通道相关性,它做了全局的归一化,却不能很好的保留内容结构,AdaLIN 的设计正是为了结合 AdaIN 和 LN 的优点。
参考链接:
https://github.com/FangYang970206/PaperNote/blob/master/GAN/UGATIT.md
https://www.sohu.com/a/333947112_500659
论文复现课程U-GAT-IT讲解链接:
https://aistudio.baidu.com/aistudio/education/lessonvideo/515097
pytorch代码
https://github.com/znxlwm/UGATIT-pytorch
tensorflow代码
https://github.com/taki0112/UGATIT