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

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

主要内容

具体流程如下图所示:

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

  2. 轮廓code \(p\) + \(z\) 生成掩码\(\mathcal{P}_m\) 和轮廓\(\mathcal{P}_f\);

  3. 色彩和纹理code \(c\) 生成掩码\(\mathcal{C}_m\)和实例\(\mathcal{C}_f\).

  4. 最后的图片为

\[(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.
\]

隐变量

注意到, 整个网络用到了4个隐变量, 分别是\(b, p, c\) 和\(z\), 其中

\[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)
\]

其中\(N_b, N_p, N_c\)皆为超参数.

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

背景

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

\(D_b\)便是普通的用于判断图片真假的判别器, 后者\(D_{bg\_aux}\)似乎是用来判断这个patch是否是背景图片的, 这能够使得网络更好的生成背景图片.

轮廓

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

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

\[\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})],
\]

其中\(D_p\)是用来近似条件分布的.

色彩和纹理

这部分是类似上面的, 因为我们同样没有色彩和纹理的数据, 同样有一个\(\mathcal{L_{c\_info}}\)的损失, 以及最后, 三个部分结合起来是最后的图片, 这部分可以直接用普通的adversarial loss \(\mathcal{L}_{c\_adv}\).

用于无监督分类

这个倒是没什么特别的, 就是再训练\(\phi_p, \phi_c\), 将图片\(\mathcal{C}_j\) 映射到隐变量\(c, p\), 并根据这些特征利用K均值分类.

代码

原文代码

FineGAN的更多相关文章

  1. Fine-Grained(细粒度) Image – Papers, Codes and Datasets

    Table of contents Introduction Survey papers Benchmark datasets Fine-grained image recognition Fine- ...

随机推荐

  1. linux vi和vim编辑器

    所有的Linux系统都会内建vi文本编辑器,vim具有程序编辑的能力,可以看作是vi的增强版本 三种常见模式 正常模式 以vim打开一个文档直接进入的模式,快捷键可以使用. 1.这个模式可以使用上下左 ...

  2. 基于树莓派部署 code-server

    code-server 是 vscode 的服务端程序,通过部署 code-server 在服务器,可以实现 web 端访问 vscode.进而可以达到以下能力: 支持跨设备(Mac/iPad/iPh ...

  3. 18. MYSQL 字符编码配置

    MYSQL 5.7版本的my.ini 在C盘隐藏文件夹下 C:\ProgramData\MySQL\MySQL Server 5.7 [client] default-character-set=ut ...

  4. 对于Linq关键字和await,async异步关键字的扩展使用

    最近在看neuecc大佬写的一些库:https://neuecc.medium.com/,其中对await,async以及linq一些关键字实现了自定义化使用, 使其不需要引用对应命名空间,不需要多线 ...

  5. Android,iOS系统有什么区别

    两者运行机制不同:IOS采用的是沙盒运行机制,安卓采用的是虚拟机运行机制.Android是一种基于Linux的自由及开源的操作系统,iOS是由苹果公司开发的移动操作系统IOS中用于UI指令权限最高,安 ...

  6. spring boot项目创建与使用

    概述 spring boot通常使用maven创建,重点在于pom.xml配置,有了pom.xml配置,可以先创建一个空的maven项目,然后从maven下载相关jar包. spring boot d ...

  7. PowerDotNet平台化软件架构设计与实现系列(06):定时任务调度平台

    定时任务是后端系统开发中少不了的一个基本必备技能. 传统的实现定时任务的方式有很多种,比如直接使用操作系统的Timer和TaskSchedule,或者基于Quartz.HangFire.xxl-job ...

  8. 1、Linux下安装JDK

    1.Linux下安装JDK 1 权限设置(可忽略) 1.1 安装过程与Windows安装过程相差不多,下载解压安装 1.切换root用户( 如果当前登录的用户权限够的话,请忽略这步) 由于创建目录的位 ...

  9. UNCTF2020 pwn题目

    YLBNB 用pwntools直接连接,然后接受就行. 1 from pwn import * 2 3 p = remote('45.158.33.12',8000) 4 context.log_le ...

  10. 祭出“成本”列(Project)

    <Project2016 企业项目管理实践>张会斌 董方好 编著 今天开始成本. 张同学说,成本就是balabalabala-- 好吧,本妖向来不会背名词解释,不过有些公式还是需要背一下下 ...