[note]Learning from Simulated and Unsupervised Images through Adversarial Training

Introduction

Deep Learning領域對labeled datasets的需求逐漸增大,但是,給data進行標註既費財,又耗時。於是人們希望能通過使用simulator來產生大量的合成圖片(synthetic data)來進行訓練,但是simulator產生的synthetic image和real image之間還是存在差異,其中一個解決方法是進一步改善simulator,但這同樣是代價高,回報少。於是乎,Simulated + Unsupervised Learning(SimGAN)這篇paper就誕生了。

  • 這篇paper主要有 4個貢獻:
    • 提出了一個S+U(模擬+無監督)的學習方法來訓練GAN
    • 在Refiner的loss中加入了 Self-regularization loss
    • 對標準的GAN架構進行了一些修改(local adversarial loss和history)
    • 在效果上取得了重大的突破

Quick review of GAN

首先簡要回顧一下GAN(Generative adversarial nets):

  • 兩個網路:一個G(Generative network),一個D(Discriminate network),

    G用於生成image,D用來判斷image是real還是fake。

    兩個network的架構,可以隨意更改。
  • 輸入: G的input是random noise,D的輸入是G產生的image和real image
  • 訓練方法:
    • Minimize the loss of G: log(1-D(G(z)))
    • Minimize the loss of D: -log(D(x))-log(1-D(G(z)))

S+U Learning with SimGAN

接下來看SimGAN,首先我們有一個simulator,用來產生大量的假圖片(合成圖片)。

你可以把這個simulator理解為黑盒,當然在paper的例子里,他們用的軟體是UnityEyes

有了大量的synthetic data後,我們就可以開始訓練我們的SimGAN:

上圖是SimGAN的架構,由R(Refiner network) 和 D(Discriminator network)兩部分組成。

和傳統GAN不同的,它的input是合成圖片(synthetic image),而不是random noise,經過Refiner之後產生refined image,然後再將real image和refined image送入Discriminator去,

這和標準GAN差不多,R可以看作G,只是input不同。

好,來看R(Refiner network)的Loss function:

x_{i}是第i張合成圖片,

tilde{x_{i}}是與之相對應的refined過後的圖片

y_{i}是第i張真實圖片

Refiner的loss由兩部分組成,

l_{real}增加合成圖片的真實感,它和標準的GAN的G更新方式類似

l_{reg}是paper做的一點改動,為了保留合成圖片原本的信息,引入L1範數的正則項。

再來看D(Discriminator network)的loss function:

它和傳統GAN的Discriminator是一樣的。

這樣便可以寫出整個演算法

稍微不一樣的地方,SimGAN是先更新R再更新D,GAN一般情況是先更新D在更新G。

Local Adversarial Loss

原本的D輸出的是這張image是real的概率,我們把它叫做global adversarial loss,

這裡,在訓練D的時候,我們將image分割為w times h個小塊,最後得到的是如上圖所示的Probability map,也就是我們這裡得到的是該小塊是合成圖片的概率

PS: 這裡的D(x)表示x是合成圖片(synthetic image)的概率,Goodfellow的paper中D(x)表示的是x是真實圖片(real image)的概率,所以你可能在看loss function的時候會發現差一個負號。

在更新R的時候,我們將剛才的Probability map進行求和操作,即為我們的l_{real},這種算D(Discriminator network)的loss的方式,我們叫做local adversarial loss.

從實驗結果可以看出,用global loss訓練的image,放大後在邊緣上有劇烈的抖動,而local loss 訓練後得到的image相對平滑,更具有真實感。

Updating Discriminator using a History of Refined Images

paper另一個對model改進的地方是引入了history的概念

(類似於RL中text{replay buffer},具體可見DQN等paper)

在固定text{Buffer}的容量的情況下,容量大小為B。每一次iteration

都會從text{Buffer}中sample出 frac{text{batch size}}{2} 的圖片,

再從當前的refiner中sample出 frac{text{batch size}}{2} 的圖片,

並隨機替換text{Buffer}frac{text{batch size}}{2} 數量的圖片。

從右圖也可以看出,使用history效果還是很明顯的。

SimGAN vs. Traditional GAN

簡單總結下, SimGAN也並不是太複雜。

Experiments

實驗部分,apple做了眼睛注視方向,以及手勢深度圖的測試,都取得了不錯的效果。

Others

另外我發現了一個用GTA5來當simulator,並用SimGAN來生成training data的例子,看起來蠻好玩的。SimGANs - a game changer in unsupervised learning, self driving cars, and more

另外有一個問題,如果simulator很糟糕的話,似乎也沒有辦法使用SimGAN,或者需要從別的地方弄synthetic data 來??

另外有個邪惡的想法,把W-GAN當作是simulator,用它的G來產生一大堆圖片,然後再丟進SimGAN會怎樣?? 那沒有label怎麼辦??用conditional GAN強行加label??

Reference

  • [1612.07828]SimGAN
  • wayaai/SimGAN
  • SimGANs - a game changer in unsupervised learning, self driving cars, and more
  • Apple首篇AI文章,SimGAN - 阿正不水 - CSDN博客

推薦閱讀:

網路表示學習概述
Reddit爆款討論:那些做機器學習的,平時除了數據清洗還幹些啥?
實用指南:如何為你的深度學習任務挑選最合適的 GPU?

TAG:深度学习DeepLearning | 生成对抗网络GAN | 机器学习 |