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 + 隐变量z 生成背景 B;

  2. 轮廓code p + z 生成掩码Pm 和轮廓Pf;

  3. 色彩和纹理code c 生成掩码Cm和实例Cf.

  4. 最后的图片为

(1Cm)[(1Pm)β+PmPf]+CmCf.

image-20201202182951093

隐变量

注意到, 整个网络用到了4个隐变量, 分别是b,p,cz, 其中

zN(0,1)bCat(K=Nb,p=1/Nb)pCat(K=Np,p=1/Np)cCat(K=Nc,p=1/Nc)

其中Nb,Np,Nc皆为超参数.

另外, 基于一个直接理解, 即轮廓是较为抽象的信息, 同一类的物体的轮廓往往是一致, 但是同一类的物体要进行细分依赖于c即色彩和纹理, 所以作者假设Np<Nc, 多个c会共享一个p(虽然我不知道怎么实现这个的). 另外, 由于背景往往和物体有很大的联系, 比如鸭子飞到树上是比较少见的事情, 所以在训练的时候, 作者会选择令b=c, 相当于少采样了一次. 但是在测试的时候, 这个约束可以不关, 我们完全可以让鸭子飞到太空上.

背景

利用背景信息, 其实一个很直接很直接的问题是, 怎么得到背景信息呢? 这实际上是一个分割问题, 作者会利用检测器将图片中的背景信息提取出来, 所以上面的Db,Dbg_aux 都是基于patch而非整个图片工作的. 这样, 对于生成器Gb生成的图片, 我们同样可以进行相同的操作了.

Db便是普通的用于判断图片真假的判别器, 后者Dbg_aux似乎是用来判断这个patch是否是背景图片的, 这能够使得网络更好的生成背景图片.

轮廓

轮廓这部分生成器会生成掩码和实例, 并且之前的特征会继续传给下一个阶段使用.

要知道, 想要通过判别器D来训练生成器的一个很重要的条件是真实数据是存在的, 但是我们实际上并没有这部分数据(即轮廓), 所以作者采用了类似InfoGAN的info损失:

Lp_info=maxDp,Gp,f,Gp,mEz,p[logDp(p|Pf,m)],

其中Dp是用来近似条件分布的.

色彩和纹理

这部分是类似上面的, 因为我们同样没有色彩和纹理的数据, 同样有一个Lc_info的损失, 以及最后, 三个部分结合起来是最后的图片, 这部分可以直接用普通的adversarial loss Lc_adv.

用于无监督分类

这个倒是没什么特别的, 就是再训练ϕp,ϕc, 将图片Cj 映射到隐变量c,p, 并根据这些特征利用K均值分类.

代码

原文代码

posted @   馒头and花卷  阅读(432)  评论(0编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
点击右上角即可分享
微信分享提示