Paper Reading: InsetGAN for Full-Body Image Generation

正文索引 [隐藏]

Conflicts

作者argue说,面对表现出复杂变化的类别,用GAN创建高分辨的图像生成结果相当困难,那么如何生成高分辨(1024×1024)的结果呢?有两种naive的想法:

  1. 一种是将图像分块,用GAN来依次生成他们,但是在图像的各个部分耦合性高时不适合。
  2. 另一种是使用高质量的数据训练高质量的模型。这样的任务相当昂贵,暂时还没有。

于是作者声称自己的InsetGAN解决了上述的问题。让我们看看作者提出的InsetGAN是怎么实现的吧。

Model

模型的Pipeline:

这篇文章的大体idea是造两个生成器分别用于生成身体的图片和脸部的图片,之后通过单独生成后在身体图片上检索到头部,然后将生成的脸部图像嵌入进去,再在两个生成器的输入空间中检索出使得两部分无缝衔接的结果,作者提出了只搜索人脸空间和两个空间都搜索的方法。

读到这里其实最大的一个问题是在身体的隐层表示改变时,人脸的位置会变化,此时需要重新对齐人脸嵌入的位置。

 

总的来说,我们要想办法令生成的人脸$\mathcal{G}_{B}\left(\mathbf{w}_{B}\right)$和生成的人体$\mathcal{G}_{A}\left(\mathbf{w}_{A}\right)$中的部分尽量对齐,我们表示为如下的一个抽象的loss:
\begin{equation}
\min _{\mathbf{w}_{A}, \mathbf{w}_{B}} \int_{\Omega} \mathcal{L}\left(\mathcal{G}_{A}\left(\mathbf{w}_{A}\right), \mathcal{G}_{B}\left(\mathbf{w}_{B}\right)\right)
\end{equation}
该loss的最终实现将包括如下的几个部分:

  1. 区域$\mathcal{B}\left(I_{A}\right)$内下采样后的像素级Loss和感知Loss,让$w_A$和$w_B$的匹配合理
    \begin{equation}
    L_{\text {coarse }}:=\lambda_{1} L_{1}\left(I_{A}^{\downarrow}, I_{B}^{\downarrow}\right)+\lambda_{2} L_{\text {lpips }}\left(I_{A}^{\downarrow}, I_{B}^{\downarrow}\right)
    \end{equation}
  2. 区域$\mathcal{B}\left(I_{A}\right)$内的边界Loss,依然包括像素Loss和感知Loss,让$w_A$和$w_B$的匹配合理
    \begin{equation}
    \begin{aligned}
    L_{\text {border }}:=& \lambda_{3} L_{1}\left(\mathcal{E}_{8}\left(\mathcal{B}\left(I_{A}\right)\right), \mathcal{E}_{8}\left(I_{B}\right)\right)+\\
    & \lambda_{4} L_{\text {lpips }}\left(\mathcal{E}_{8}\left(\mathcal{B}\left(I_{A}\right)\right), \mathcal{E}_{8}\left(I_{B}\right)\right)
    \end{aligned}
    \end{equation}
  3. 一些正则化项:
    \begin{equation}
    L_{r e g}:=\lambda_{r 1}\left\|\mathbf{w}^{*}-\mathbf{w}_{\text {avg }}\right\|+\lambda_{r 2} \sum_{i}\left\|\delta_{i}\right\|
    \end{equation}
  4. $\mathcal{B}\left(I_{A}\right)$区域外的区域$R^{O}\left(I_{A}\right)$ $w_A$和给定身体图像的像素Loss和感知Loss,仅包对$w_A$的优化,让$w_A$靠近指定的身体图像
    \begin{equation}
    \begin{aligned}
    L_{\text {body }}:=& \lambda_{5} L_{1}\left(R^{O}\left(I_{A}\right), R^{O}\left(I_{r e f}\right)\right)+\\
    & \lambda_{6} L_{l p i p s}\left(R^{O}\left(I_{A}\right), R^{O}\left(I_{r e f}\right)\right)
    \end{aligned}
    \end{equation}
  5. $R^{O}\left(I_{A}\right)$内部的 $w_B$和给定的人脸图像的像素Loss和感知Loss,仅包含对$w_B$的优化,让$w_B$靠近指定的人脸
    \begin{equation}
    \begin{aligned}
    L_{\text {face }}:=& \lambda_{7} L_{1}\left(R^{I}\left(I_{B}\right), R^{I}\left(I_{\text {ref }}\right)\right)+\\
    & \lambda_{8} L_{l p i p s}\left(R^{I}\left(I_{B}\right), R^{I}\left(I_{r e f}\right)\right)
    \end{aligned}
    \end{equation}

我们对上述的Loss进行排列组合便能得到想要的结果

  • 当给定身体的图像时,我们仅对1,2的loss优化$w_B$就能生成人脸,但是有时候会有边界的不连续性,我们可以引入4来保证$w_A$在变动时和指定的身体图像差距不大,也就是使用1,2,3,4来同时优化$w_A$和$w_B$
  • 当给定人脸的图像时,也类似,我们使用1,2,3,5来同时优化$w_A$和$w_B$
  • 当给定人脸和身体的图像时,我们使用1,2,3,4,5来同时优化$w_A$和$w_B$

思路很简单,关键是他们训出来了不错的结果。

原文link