[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:
- Minimize the loss of D:
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:
是第張合成圖片,
是與之相對應的refined過後的圖片是第張真實圖片Refiner的loss由兩部分組成,
增加合成圖片的真實感,它和標準的GAN的G更新方式類似是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分割為個小塊,最後得到的是如上圖所示的Probability map,也就是我們這裡得到的是該小塊是合成圖片的概率PS: 這裡的表示是合成圖片(synthetic image)的概率,Goodfellow的paper中表示的是是真實圖片(real image)的概率,所以你可能在看loss function的時候會發現差一個負號。
在更新R的時候,我們將剛才的Probability map進行求和操作,即為我們的,這種算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中,具體可見DQN等paper)
在固定的容量的情況下,容量大小為。每一次,都會從中sample出 的圖片,再從當前的refiner中sample出 的圖片,並隨機替換中 數量的圖片。從右圖也可以看出,使用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 | 机器学习 |