概
利用GAN生成图片, 特别的是, 这是一种分层的生成方式: 背景 + 轮廓 + 色彩和纹理. 同时这个网络还可以用于无监督的分类.
主要内容
具体流程如下图所示:
-
背景code b b b + 隐变量 z z z 生成背景 B \mathcal{B} B;
-
轮廓code p p p + z z z 生成掩码 P m \mathcal{P}_m Pm 和轮廓 P f \mathcal{P}_f Pf;
-
色彩和纹理code c c c 生成掩码 C m \mathcal{C}_m Cm和实例 C f \mathcal{C}_f Cf.
-
最后的图片为
( 1 − C m ) ⊙ [ ( 1 − P m ) ⊙ β + P m ⊙ P f ] + C m ⊙ C f . (1-\mathcal{C}_m) \odot[(1-\mathcal{P}_m) \odot \mathcal{\beta} + \mathcal{P}_m \odot \mathcal{P}_f] + \mathcal{C}_m \odot \mathcal{C}_f. (1−Cm)⊙[(1−Pm)⊙β+Pm⊙Pf]+Cm⊙Cf.
隐变量
注意到, 整个网络用到了4个隐变量, 分别是
b
,
p
,
c
b, p, c
b,p,c 和
z
z
z, 其中
z
∼
N
(
0
,
1
)
b
∼
C
a
t
(
K
=
N
b
,
p
=
1
/
N
b
)
p
∼
C
a
t
(
K
=
N
p
,
p
=
1
/
N
p
)
c
∼
C
a
t
(
K
=
N
c
,
p
=
1
/
N
c
)
z \sim \mathcal{N}(0, 1) \\ b \sim \mathrm{Cat}(K=N_b, p=1/N_b) \\ p \sim \mathrm{Cat}(K=N_p, p=1/N_p) \\ c \sim \mathrm{Cat}(K=N_c, p=1/N_c)
z∼N(0,1)b∼Cat(K=Nb,p=1/Nb)p∼Cat(K=Np,p=1/Np)c∼Cat(K=Nc,p=1/Nc)
其中
N
b
,
N
p
,
N
c
N_b, N_p, N_c
Nb,Np,Nc皆为超参数.
另外, 基于一个直接理解, 即轮廓是较为抽象的信息, 同一类的物体的轮廓往往是一致, 但是同一类的物体要进行细分依赖于 c c c即色彩和纹理, 所以作者假设 N p < N c N_p < N_c Np<Nc, 多个 c c c会共享一个 p p p(虽然我不知道怎么实现这个的). 另外, 由于背景往往和物体有很大的联系, 比如鸭子飞到树上是比较少见的事情, 所以在训练的时候, 作者会选择令 b = c b=c b=c, 相当于少采样了一次. 但是在测试的时候, 这个约束可以不关, 我们完全可以让鸭子飞到太空上.
背景
利用背景信息, 其实一个很直接很直接的问题是, 怎么得到背景信息呢? 这实际上是一个分割问题, 作者会利用检测器将图片中的背景信息提取出来, 所以上面的 D b , D b g _ a u x D_b, D_{bg\_aux} Db,Dbg_aux 都是基于patch而非整个图片工作的. 这样, 对于生成器 G b G_b Gb生成的图片, 我们同样可以进行相同的操作了.
D b D_b Db便是普通的用于判断图片真假的判别器, 后者 D b g _ a u x D_{bg\_aux} Dbg_aux似乎是用来判断这个patch是否是背景图片的, 这能够使得网络更好的生成背景图片.
轮廓
轮廓这部分生成器会生成掩码和实例, 并且之前的特征会继续传给下一个阶段使用.
要知道, 想要通过判别器
D
D
D来训练生成器的一个很重要的条件是真实数据是存在的, 但是我们实际上并没有这部分数据(即轮廓), 所以作者采用了类似InfoGAN的info损失:
L
p
_
i
n
f
o
=
max
D
p
,
G
p
,
f
,
G
p
,
m
E
z
,
p
[
log
D
p
(
p
∣
P
f
,
m
)
]
,
\mathcal{L}_{p\_info} = \max_{D_p, G_{p, f}, G_{p,m}} \mathbb{E}_{z, p} [\log D_p(p|\mathcal{P}_{f, m})],
Lp_info=Dp,Gp,f,Gp,mmaxEz,p[logDp(p∣Pf,m)],
其中
D
p
D_p
Dp是用来近似条件分布的.
色彩和纹理
这部分是类似上面的, 因为我们同样没有色彩和纹理的数据, 同样有一个 L c _ i n f o \mathcal{L_{c\_info}} Lc_info的损失, 以及最后, 三个部分结合起来是最后的图片, 这部分可以直接用普通的adversarial loss L c _ a d v \mathcal{L}_{c\_adv} Lc_adv.
用于无监督分类
这个倒是没什么特别的, 就是再训练 ϕ p , ϕ c \phi_p, \phi_c ϕp,ϕc, 将图片 C j \mathcal{C}_j Cj 映射到隐变量 c , p c, p c,p, 并根据这些特征利用K均值分类.