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 的前幾層去替代。
其想法是基於
- 以 Unsupervised image-to-image translation 任務而言 Encoder 的功用是將圖片轉換成一個低維度的 Embedding(可以理解成特徵),而 Generator 再基於該特徵去生成/仿造出一張新的圖片。
- 以 Unsupervised image-to-image translation 任務而言 Discriminator 的功用是判斷該輸入圖片是真實的圖片或是仿造的圖片,但要做到這件事之前,Discriminator 在做的事情是先抽取出語意(Semantic)上的特徵,在將此特徵透過最終幾層來判斷是否為真實或仿造。
基於上述的觀察,作者提出 Discriminator 其實是具備兩種能力
- 抽取特徵(Encodeing)
- 分類(Classifying)
因此提出可使用 Discriminator 的前面幾層作為 Encoder 使用。
而這好處有幾個
- 模型整體變得更簡潔,因可捨去原先獨立的 Encoder 部分,以及這樣子 Discriminator 訓練完還能保有一點用處,因為前幾層就是 Encoder。
- 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