FineGAN

Singh K., Ojha U. & Lee Y. FineGAN: Unsupervised Hierarchical Disentanglement for Fine-Grained Object Generation and Discovery. CVPR, 2019.

利用GAN生成图片, 特别的是, 这是一种分层的生成方式: 背景 + 轮廓 + 色彩和纹理. 同时这个网络还可以用于无监督的分类.

image-20201202182811627

主要内容

具体流程如下图所示:

  1. 背景code b b b + 隐变量 z z z 生成背景 B \mathcal{B} B;

  2. 轮廓code p p p + z z z 生成掩码 P m \mathcal{P}_m Pm 和轮廓 P f \mathcal{P}_f Pf;

  3. 色彩和纹理code c c c 生成掩码 C m \mathcal{C}_m Cm和实例 C f \mathcal{C}_f Cf.

  4. 最后的图片为
    ( 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. (1Cm)[(1Pm)β+PmPf]+CmCf.

image-20201202182951093

隐变量

注意到, 整个网络用到了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) zN(0,1)bCat(K=Nb,p=1/Nb)pCat(K=Np,p=1/Np)cCat(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(pPf,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均值分类.

代码

原文代码

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值