人臉屬性變換 —— VAE

以下人臉變換都是由AI經過訓練後生成:

小哥向你微微笑:
在這裏插入圖片描述
大叔秒變魅力高:
在這裏插入圖片描述
如花一起來相會:
在這裏插入圖片描述
鮮肉招展浪滔滔:
在這裏插入圖片描述
我要在唐朝,也許也是詩人吧。。。

言歸正傳,以上人臉轉換是通過如下過程得到:

  1. 使用CelebA數據集訓練一個VAE
  2. 使用第一步得到的VAE對訓練集計算出屬性向量,比如把所有男性人臉圖片輸入encoder,算出一個平均值,再把所有女性人臉輸入encoder,算出一個平均值,兩者的差就是男女屬性的向量
  3. 把原圖輸入encoder,把得到的向量減去(如果向相反的方向變化就加上)屬性向量,再輸入到decoder,就得到了屬性轉換後的圖片。

所有代碼保存在我的github項目seasonyc/face_vae,裏面對如何使用和源文件已經做了簡短說明,此處不再贅述。因爲有些文件是多個項目公用,所以一些代碼可能並沒有在VAE中使用。

爲了方便處理CelebA數據集,項目使用tensorflow和tensorflow內置的Keras,tf.dataset API創建數據源,tf.keras創建網絡結構並進行訓練。創建數據源時,先使用dataset.cache()把所有圖片源文件緩存在內存中,再實時解碼和進行一些預處理得到每一個mini-batch,通過多使用一些內存來減少硬盤的訪問,這樣可以縮短一半的訓練時間,另外這樣還可以得到更平穩的GPU使用率。當然,我的電腦仍舊是機械尋道的硬盤,如果使用固態硬盤,也許並不需要這般操作。有關使用df.dataset創建高效流水線以及更全面的深度學習性能指南,請參考DenseNet性能分析

使用VAE很難得到比較好的效果,參見破解VAE的迷思,所以還請讀者關注本系列的第二篇——GAN

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章