EigenGAN 水记 (无监督特征解耦)
视频:BV1VD4y1w7mW 又一个GAN!EigenGAN:GAN的层特征学习,老二次元狂喜 | ICCV2021
作者主页:https://lynnho.github.io/
论文:https://arxiv.org/abs/2104.12476
项目:https://github.com/LynnHo/EigenGAN-Tensorflow (官方版)
项目:https://github.com/bryandlee/eigengan-pytorch
通过无监督方式,实现语义的特征解耦
概览
模型接受 t t t 个正态噪声,输出一张图像
每个噪声经过一个线性变换后加到卷积的特征图上
模型
把每个卷积层都看作一个 q q q 维子空间
第 i i i 个子空间由三部分定义
- U i = [ u i 1 , … , u i q ] \mathbf{U}_{i}=\left[\mathbf{u}_{i 1}, \ldots, \mathbf{u}_{i q}\right] Ui=[ui1,…,uiq] ,包含 q q q 个标准正交基,其中 u i j ∈ R H i × W i × C i \mathbf{u}_{i j} \in \mathbb{R}^{H{i} \times W_{i} \times C_{i}} uij∈RHi×Wi×Ci
- L i = diag ( l i 1 , … , l i q ) \mathbf{L}_{i}=\operatorname{diag}\left(l_{i 1}, \ldots, l_{i q}\right) Li=diag(li1,…,liq) 基的重要性矩阵,一个 q q q 维对角矩阵
- μ i \boldsymbol{\mu}_{i} μi 空间原点,一个 q q q 维向量
第 i i i 个噪声 z i z_i zi 按照公式 U i L i z i + μ i U_iL_iz_i+\mu_i UiLizi+μi 注入第 i i i 个子空间
注入方法是:噪声经过公式变换到子空间后,加到前一层输出的特征图上
对了,最初的全连接层输入的 ϵ \epsilon ϵ ,也是正态噪声
损失函数
所有的 U i , L , μ i \mathbf{U}_{i},\mathbf{L},\boldsymbol{\mu}_{i} Ui,L,μi 都是可学习参数。当然,卷积核也是可学习的
有很多对抗损失是可用的 [10, 25, 1, 28]
这篇文章使用的是 hinge loss [28] 配合
R
1
R_1
R1 penalty [26]
(这个 R 1 R_1 R1 penalty 似乎是一种梯度约束)
注意,对 U i \mathbf{U}_{i} Ui 有一个正交约束, ∥ U i T U i − I ∥ F 2 \left\|\mathbf{U}{i}^{\mathrm{T}} \mathbf{U}{i}-\mathbf{I}\right\|_{F}^{2} ∥ ∥UiTUi−I∥ ∥F2
数据集
用了 CelebA,FFHQ,Danbooru2019 Portraits 三个
模型细节
使用了 Adam 优化器
生成器输出 256*256 的图片,有6个上采样层