用GAN生成的數據和已有數據集合併在一起輸入進CNN裡面做分類,但是GAN生成的數據沒有標籤怎麼辦?


謝邀。主要是看GAN生成樣本的質量,來決定怎麼用。最基本的質量判斷是兩個指標: 真實性(realism)和多樣性(diversity)。生成的圖像不光要真實,還要多樣(舉例來說,人臉的GAN不能只會生成 成龍的臉,要生成訓練集之外的),最重要是能符合原始數據集的分佈。這樣用GAN生成數據訓練出來的模型纔不會跑偏。

  • 如果生成圖像質量不太好,可以考慮用這些圖像作為outlier,來讓模型不識別這些樣本。我們ICCV17最早是利用DCGAN來生成樣本,那時候圖像的尺度還是致命的(基本64x64就還行,但往上效果就不好了)。所以 Unlabeled Samples Generated by GAN Improve the Person Re-identification Baseline in vitro 的工作就利用了label smooth的思路,用不太好的GAN樣本,來正則網路學習。 假設有N個類別,本質思想就是讓網路對於生成樣本都預測一個1/N 的平均概率。思路主要來自於InceptionNet-v3中 label smooth的想法(https://arxiv.org/abs/1512.00567)。

  • 如果生成圖像質量好,最直接的方式就是通過給GAN生成樣本打偽標籤(pseudo label)來學習。但是偽標籤怎麼來呢?我們CVPR19的工作(https://github.com/NVlabs/DG-Net)就嘗試了最簡單的方案,先用有label的data,訓練一個teacher model,然後用teacher model來給GAN生成的數據打基於概率的label,而有label的數據還是使用原始的label。 為啥要額外用一個teacher model呢?是因為我們的樣本是A和B生成一個AB的樣本,所以單純給A或B的label都不太好。所以選擇了teacher來預測。這樣的好處就是label也比較smooth,不會像one-hot的pseudo label那樣,容易產生noise。

  • 最後,我們說一下主要用GAN生成數據 容易被詬病的地方/原理

1。GAN 生成的數據都是從訓練集裡面出來的,有包含新的信息麼?這個問題我記得看過一個老外的講座,老外反問學生,你怎麼定義新的信息?你覺得StyleGAN或者很多GAN,他們從一個真實樣本變到另一個真實樣本之間的中間結果(interpolation 如下圖中間的人臉),算不算新的信息。換句話說,這看你怎麼理解新的信息。原始訓練數據都是離散的,而GAN生成的樣本是更多離散的數據點,彌補了原來離散樣本之間的空間。所以從這個角度說,我們用GAN生成的數據沒有引入新的信息,而是和其他data augmentation方法一樣,只是讓模型更容易學好整個空間。

來自 https://heartbeat.fritz.ai/stylegans-use-machine-learning-to-generate-and-customize-realistic-images-c943388dc672?gi=a1fce64bcd0a

2。聯想:拿GAN生成數據加入訓練,其實相比之下,有個更straight forward的data augmentation的東西叫 mix-up,我是https://arxiv.org/abs/1812.01187在mu li大神imagenet的文章裏第一次見到,應該還有更早的來源。

而去年則是在semi-supervised learning領域瘋狂刷分的,例如,Bengio作為作者的 https://arxiv.org/pdf/1903.03825.pdf,Goodfellow作為作者的mix-match (https://arxiv.org/abs/1905.02249) 也是用這個方法。 大家有興趣也可以去想想這種方法為啥work,那就能理解用GAN生成的數據為啥能work了。 其實是一樣的。

來自 https://arxiv.org/pdf/1903.03825.pdf

最後感謝大家看完~歡迎關注分享點贊~也可以check我的一些其他文章

鄭哲東:NVIDIA/悉尼科技大學/澳洲國立大學新作解讀:用GAN生成高質量行人圖像,輔助行人重識別?

zhuanlan.zhihu.com圖標鄭哲東:用CNN分100,000類圖像?

zhuanlan.zhihu.com圖標鄭哲東:【新無人機數據集】從 行人重識別 到 無人機目標定位?

zhuanlan.zhihu.com圖標Pytorch有什麼節省顯存的小技巧??

www.zhihu.com圖標

題主使用GAN的目的很明顯,就是做數據增強(Data Augmentation)。可以知道,題主使用的是傳統 GAN 或 DCGAN 模型,這些模型的輸出行為是隨機的,無法控制的,後期人工打標籤成本很大。那麼,可以反過來想,我們可不可以先給特定的標籤,讓 GAN 生成符合這個標籤的東西呢?這樣我們就不用人工打標籤了?可以的!InfoGAN瞭解一下~

不過雖然理論上說,用 GAN 來做 Data Augmentation 是可以的,但是工業上或者實際運用當中,幾乎沒有人這麼做,因為要付出很大的代價,包括時間代價,算力代價,人工代價,因為 GAN 很難訓練,很難收斂,訓練時間比一般深度學習模型長,訓練期間經常不穩定,易發生模式崩塌(Mode Collapse)。


如果你本來的數據是有標籤的,那你分別用不同標籤的數據訓練GAN,這樣訓練得到的GAN所生成的數據就是這個標籤的數據。也就是說如果你有N個不同標籤的數據,那你需要訓練N個GAN,然後這N個GAN可以分別生成對應標籤的數據。

你也可以使用條件GAN,使用條件GAN的時候標籤是作為額外監督信息輔助GAN的學習過程的。使用條件GAN只需訓練一個GAN就可以生成不同標籤的數據。

條件GAN的框架有cGAN和ACGAN兩種,具體實現你可以參見網上各種關於演算法的解讀以及代碼。

使用上述方法得到的虛擬數據都是有標籤的,你可以採用這些數據和真實數據一起輸入CNN進行模型訓練。


有一種很簡單暴力的方法就是:你輸入GAN的數據集是同一類數據集。舉個例子,你輸入全是青蛙的數據集,經過GAN訓練,得到的也就是青蛙的圖片,這樣後期給生成的圖片做標籤就容易多了。如果你輸入GAN的數據集是什麼都有,青蛙,鳥,火車,那麼大概率不會生成好的結果,除非在輸入的時候依然貼上標籤,cGANs瞭解一下,這樣在生成的過程中,得到的圖片類別也是可控的。


舉個簡單例子,數據集裡邊分兩種,一種用戶點擊了,一種用戶沒點擊。GAN生成的時候,分別做兩種,然後再打散混在一起


有一類GAN,叫做condition gan,可以依據標籤生成圖像的類別,對於uncondition gan,例如DCGAN等,一般可以利用已經訓練好的cnn進行分類打標籤


推薦閱讀:
相關文章