NICE-GAN簡介 - Reusing Discriminators for Encoding Towards Unsupervised Image-to-Image Translation

Runfa Chen, Wenbing Huang, Binghui Huang, Fuchun Sun, Bin Fang. Reusing Discriminators for Encoding: Towards Unsupervised Image-to-Image Translation. In CVPR’20.

CVPR 2020 paper

Paper link: https://arxiv.org/abs/2003.00273

Github(Pytorch): https://github.com/alpc91/NICE-GAN-pytorch

簡介

本文探討近年來流行的非監督式圖像轉換任務(Unsupervised image-to-image translation)並提出新的框架,

以往的 GAN-based 的圖像轉換模型當訓練完成後會將 Discriminator 捨棄掉,

而本文提出不同的思維,

認為要重複利用此 Discriminator。

提出將以往的 Encoder 部分改用 Discriminator 的前幾層去替代。

其想法是基於

  1. 以 Unsupervised image-to-image translation 任務而言 Encoder 的功用是將圖片轉換成一個低維度的 Embedding(可以理解成特徵),而 Generator 再基於該特徵去生成/仿造出一張新的圖片。
  2. 以 Unsupervised image-to-image translation 任務而言 Discriminator 的功用是判斷該輸入圖片是真實的圖片或是仿造的圖片,但要做到這件事之前,Discriminator 在做的事情是先抽取出語意(Semantic)上的特徵,在將此特徵透過最終幾層來判斷是否為真實或仿造。

基於上述的觀察,作者提出 Discriminator 其實是具備兩種能力

  1. 抽取特徵(Encodeing)
  2. 分類(Classifying)

因此提出可使用 Discriminator 的前面幾層作為 Encoder 使用。

而這好處有幾個

  1. 模型整體變得更簡潔,因可捨去原先獨立的 Encoder 部分,以及這樣子 Discriminator 訓練完還能保有一點用處,因為前幾層就是 Encoder。
  2. Encoder 可以被訓練得較好,因為是直接基於 Discriminator 去做訓練,而非從 Generator。此外近年來 Unsupervised image-to-image translation 常在 Discriminator 上用到一個 Trick,稱為 Multi-scale 的訓練,而現在 Encoder 的架構因為是被包含在 Discriminator 內,因此使用此 Trick 也可直接受益到 Encoder。

    Multi-scale Trick 可以去看這篇論文 pix2pixHD, High-Resolution Image Synthesis and Semantic Manipulation with Conditional GANs

模型架構

整體流程就是在 Unsupervised image-to-image translation 常見的流程。

首先會將一張圖片經過 Encoder(這邊是 Discriminator 的前半部),

藉此獲得出 Hidden vector 特徵,

我們目標是訓練出一個可以將 Hidden vector 的特徵經由 Generator 模型生成出以假亂真的圖片。

訓練方式大概是下面這種感覺

Generator 希望所生成出的圖片可以騙過 Discriminator,

那 Discriminator 又會希望可以識別出圖片是真的還是偽造的,

藉此訓練兩個都會不斷的進步,

最終可得出一個能夠以假亂真的 Generator。

以數學式表達會變成這樣,

這邊是基本套路,

使用 LSGAN 做訓練。

這邊簡單說一下概念,

當大眼睛的狗狗轉換經過 Encoder 後,

我們會希望他把大眼睛這特徵保留下來,

藉此希望能轉換成大眼睛的貓咪,

接著再將那隻貓的圖片再轉換成狗類別時,

我們也希望貓咪的 Encoder 也可以保留大眼睛這特性,

藉此再生成出一隻大眼睛的狗狗,

確保兩個模型生成間的一致性。

當我們使用原本圖片 X 輸入至 Encoder 所得到的特徵,

會希望 Generator 可以學會生成出相像原本的圖片 X 。

最終 Generator 的 Loss function 如下,挺簡單的。

只是這邊其實有個細節,

就是這架構使用傳統的訓練過程會導致不穩定,

因為我們的 Encoder 其實是 Discriminator 的一部分,

而 Encoder 在訓練生成圖片時我們會希望它可以 Minimize error,

但在訓練 Discriminator 時卻希望要 Maximize error。

這兩個同時訓練的話對 Encoder 是很矛盾的。

因此實際上 Encoder 只有在訓練 Discriminator 時才會做訓練(Eq 1.),

其他時候權重是被凍結(Freeze)的。

補充:此處的 Discriminator 還有搭配 U-GAT-IT: Unsupervised Generative Attentional Networks with Adaptive Layer-Instance Normalization for Image-to-Image Translation 的想法,給定 Encoder 所輸出的 Feature maps 不同權重,將其加總後為最終的 Adversial Loss,只是這邊又再延伸,在 Discriminator 模型中多訓練一個可學習的參數 γ 當作一個權重 => Adversial Loss = γ * Adversial Loss

成果

參考資料:

Reusing Discriminators for Encoding: Towards Unsupervised Image-to-Image Translation

High-Resolution Image Synthesis and Semantic Manipulation with Conditional GANs

U-GAT-IT: Unsupervised Generative Attentional Networks with Adaptive Layer-Instance Normalization for Image-to-Image Translation


© 2018-2024 XiaoSean. All rights reserved.

Powered by Hydejack v9.1.6