程序员的魔法——用Masking GAN让100,000人都露出灿烂笑容
首發地址:https://yq.aliyun.com/articles/324353
繼卷積神經網絡(CNN)掀起深度學習的浪潮后,生成對抗網絡(GAN)逐漸成為了計算機視覺領域的另一重點關注的神經網絡。本文作者于一年前開始第一次嘗試使用GAN來完成一些實驗,但都會存在一個問題,那就是模型很難訓練以及模型的結果不好評估。盡管存在上述的這些問題,GAN仍然在深度學習領域中占據一席之地,這是因為GAN不同于經典的機器學習任務,它能夠給許多問題提供新的解決思路。
操作人臉屬性(年齡、性別、表情)是一個最著名的語義處理問題。目前市面上有許多這樣的應用客戶端,大都能夠在拍照后更改面部表情。實現這一操作的方法多種多樣,但在我看來,GAN是表現最優的方法。
上圖選擇的這些例子強調了一個問題——GAN也會改變無關的對象。如果你想裁剪一個圖像部分,然后對部分圖像進行修改后再粘貼回來,那樣可能會與周圍的背景無法很好地融合,此外這樣操作起來也很困難。本文將針對這個問題,探討解決方法和相關細節。
如何操作?
一種方法是訓練另外一個分割模型,可以使用這個模型來生成一個分割掩碼,并與生成圖像塊匹配(比如這篇文獻)。當然,收集這樣的標簽是困難的,此外還必須假設應用語義變化后對象的形狀不會發生改變。
另外的一種潛在方法是使用恒等損失函數約束生成器,迫使生成器減少變化。
本文嘗試結合上述兩種思想來設計一個實驗模型,該模型具有以下特點:
- 使用內置分段的生成器結構;
- 通過分割掩碼將原始圖像與新的圖像塊混合;
- 整個網絡的訓練過程是個端到端的過程;
- 使用L1恒等損失約束生成器并減少改變;
上圖是方案框圖,期待看到該模型制作出完美的掩膜。
工作情況如何?
上圖是挑選出來的一些結果樣本,可以看到表現都還不錯。在總的數據集中,超過80%及以上的圖像表現都足夠好。
此外,實驗過程中還注意到了一些問題:
- 如果圖像中一個人已經是微笑時,那么它就不需要做出任何的改變;
- 模型在處理一些極端的頭角度時候表現較差;
- 模型有時候對一些不相關部分仍進行了操作;
從上圖可以看到,隨著訓練的進行,生成器能產生更多的變化。
在最初的迭代周期里,生成器會繪制出越來越逼真的圖像。起初,臉部分割掩碼近乎完美,但經過一段時間后,模型的結果開始產生顯著變化,比如在上圖中,模型改變了頭發。
一些想法
對上述這種行為的直接感受是一旦生成器開始生成真實的面孔,它就迫使判別器忽略表情并集中于其他區域(微笑停止是主要特征)。
另外一種解釋可能是判別器過擬合了(盡管訓練集含有十萬左右的圖像),使用更強的正則化實驗可能有助于更好地理解它。
在其它數據集(如馬對斑馬)上的實驗表明了同樣的注意力轉移現象,生成器最終改變了整幅圖像。
實現注意事項
本文實驗中應該注意以下幾點:
- 使用CycleGAN方式訓練模型;
- 使用校準后的CelebA數據集;
- 使用PyTorch框架
使用3GB內存的GPU訓練4到5天就可以重現本文實驗結果(時間評估是基于GPU為GTX1080),本文項目地址:https://github.com/tgeorgy/mgan
作者信息
Georgiy Trofimov,機器學習工程師。
Linkedin:?https://www.linkedin.com/in/georgtrof/
本文由北郵@愛可可-愛生活老師推薦,阿里云云棲社區組織翻譯。
文章原標題《How to make 100,000 people smile?》,作者:Georgiy Trofimov,譯者:海棠,審閱:。
文章為簡譯,更為詳細的內容,請查看原文
翻譯者: 海棠?
Wechat:269970760? weibo:Uncle_LLD?
Email:duanzhch@tju.edu.cn
微信公眾號:AI科技時訊
總結
以上是生活随笔為你收集整理的程序员的魔法——用Masking GAN让100,000人都露出灿烂笑容的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Mysql源码学习——源码目录结构
- 下一篇: oracle基础建表