CIAGAN笔记
paper:
CIAGAN: Conditional Identity Anonymization Generative Adversarial Networks
code:
Official PyTorch implementation of CIAGAN
CIAGAN論文
CIAGAN能對原圖進行匿名,之前的GAN匿名,有時會將多個原圖映射到同一個假的身份,于是CIAGAN提出了一個控制向量的方法,來控制其生成過程;同時,CIAGAN通過使用面部landmark的方式來保持原圖的姿態。
CIAGAN的訓練流程
①上圖中,首先將原圖通過landmark detection形成面部的輪廓以及帶有mask的背景圖,將他們拼接成[B,6,128,128]維度的數據并饋送入生成器中。
②生成器時一個auto-encoder的形式,將目標圖的onehot向量經過轉置卷積神經網絡形成[B,256,4,4]維度的數據,此時,輸入到生成器中的數據經過下采樣也是[B,256,4,4]的維度,然后將他們拼接為[B,512,4,4]維度的數據進行上采樣,最終輸入假圖。
③圖中右上角的判別器是用來判別圖片的真假。
④圖中右下角的判別器是身份判別器,用于判別G生成的假圖與目標圖之間的差異,類似于id分類器
我個人理解:由于輸入到G里面的數據包含原圖的背景信息,所以D使得G往原圖的面部進行生成,而id的判別器使得G往目標圖的面部進行生成。
CIAGAN生成器
生成器是一個Auto-encoder的形式,具體形式如下圖:
轉置卷積神經網絡的結構:
CIAGAN判別器
CIAGAN損失函數
- D和G的損失函數
論文中D和G使用的最小二乘法的損失函數
- id判別器的損失函數
對于id判別器的損失函數,其使用了對比損失Contrastive Loss
其中d是指兩個樣本之間的歐氏距離
CIAGAN代碼
dataset
CIAGAN的數據集是使用的celeba,不過在進行訓練時,需要先對數據集進行處理,即先形成下圖中的三個文件夾(clr、Indm、msk)
其中clr存放原圖,Indm存放對應的面部landmark(可用OpenCV+dlib實現),msk存放對應的帶有遮罩的原圖。
此外這些文件夾中的圖片是需要按照id進行存放的,即相同id的圖片放在一個文件夾里
- clr
- 0
- 小李圖片1.jpg
- 小李圖片2.jpg
- 1
- 小王圖片1.jpg
- 小王圖片2.jpg
- 0
- Indm
- 0
- 小李landmark1.jpg
- 小李landmark2.jpg
- 1
- 小王landmark1.jpg
- 小王landmark2.jpg
- 0
- msk
- 0
- 小李msk1.jpg
- 小李msk2.jpg
- 1
- 小王msk1.jpg
- 小王msk2.jpg
- 0
訓練
run_training.py:運行該文件即可跑通代碼,可以設置訓練的一些超參數
train.py:具體的訓練過程可見該文件夾
util_data.py:數據加載文件,源碼中返回的img是list,list[0]代表原圖,list[1]表示onehot的目標圖
util_func.py:定義了保存模型、加載模型、初始化權重等一些方法
util_loss.py:定義了對應的GAN的loss
模型
arch_resnet_siam.py:定義了id判別器的模型結構,該結構為孿生網絡結構
arch_siam_discr:定義了id判別器的模型結構(代碼中并未用到,這是用于消融實驗的,代碼中用的是上面的孿生網絡)
arch_unet_flex.py:定義了G和D的模型結構
總結
- 上一篇: 记录安卓与uni-app混合开发遇到的坑
- 下一篇: Tesla Autopilot,处理器和