AttGAN: Facial Attribute Editing by Only Changing What You Want 論文閱讀筆記和AttGan的pytorch代碼實現
1.總體框架
上面的過程用詳細描述即是
Test階段:
Train階段:
由於我們無法得知編輯後的image,所以顯而易見人臉屬性編輯是一個無監督問題,而對於我們的xa需要獲得關於b的屬性,故利用attribute classififier來約束生成的xb使其獲得了b屬性;同時adversarial learning可以用來保證生成圖片的真實性;此外,我們在進行人臉屬性編輯的時候還需要保證只更改了我們需要編輯的屬性,所以引入了reconstruction learning。
Reconstruction Loss
關於重建過程,即
這裡希望生成的xa^能盡量等於之前未編碼的xa,就是一個encoder-decoder結構。
表示為
Attribute Classifification Constraint
為了使生成的xb^確實擁有b屬性,我們設置判別器C來鑒別,
(7)式代表最小化所有屬性上的二進制交叉熵總和,(8)式為該交叉熵具體表達式。該屬性分類器在原始圖像上訓練其屬性:
這兩個式子的解釋和(7)(8)類似。
Adversarial Loss

引入鑒別器和生成器之間的對抗過程使得生成的圖片盡量真實,下面的表示借鑒了WGAN
總體目標
結合上面的三種損失,解編碼器要優化的目標如下
判別器和屬性分類器要優化的目標如下:
屬性樣式操縱的擴展
我們生活中可能更關心某人「戴的是什麼顏色的眼鏡」而非「有沒有戴眼鏡」。因此這裡增添了一個參數theta,用來控制我們編輯的屬性。
這時候我們屬性編輯的方程就表示為:
我們要優化下面的互信息使其最大化
2.代碼粗覽