FACEGAN(facial attribute reenactment GAN)
Introduction
- FACEGAN這篇paper的目的在於將driving image的臉部表情以及頭部的方向角度轉移到source image的identity上
- 也就是產生的圖片要看起來是source image的那個人, 但表情跟頭部的角度方向要跟driving image一樣
- FACEGAN的作法是利用source face的landmark並且將driving face的motion包含進來
- driving face的motion是用action units來extract出來, 包含臉部肌肉變化以及頭部的方向角度
- 這樣的做法在source face跟driving face的臉部架構很不相同時一樣能產生high quality的output image
- 為了可以讓output image的背景更真實, FACEGAN還將臉部區域以及背景分開處理, 不像現有的方法會為了產生臉部表情而將背景扭曲或是過度模糊

- 3D-face-model (Face2Face)
- 3D-face-model用3D model parameters來encode identity跟motion的feature
- 產生出來的reenact face是用source face的identity parameters以及driving face的motion parameters
- 雖然3D-face-model可以產生不錯的output, 但需要比較大的effort來產生臉部的3D representation, 所以沒辦法scale到比較大的dataset
- VAE (X2Face)
- VAE將input image encode成latent representation vector
- 用source face跟driving face的latent representation來生成圖片
- 但VAE很難將identity跟motion從latent representation中disentangle出來, 所以用VAE的效果沒有很好
- Deep GAN (FSGAN)
- Deep GAN的作法是利用source face然後based on driving face的landmark來做training
- 但是landmark會保留臉部的結構, 某種程度上也會透漏出driving image的identity
- 所以如果source face跟driving face的臉部結構很不像的話, output的quality就不會太好

- landmark transfer model (ReenactGAN)
- landmark transfer model想要去除driving face landmark的identity feature,
- 做法是用PCA來將shape跟expression parameters分開, 然後用source face的shape parameters
- 加上driving face的expression parameters來產生出transform過後的landmark
- 但這個做法是train在個別的identity pair上面, 它的decoder是id specified的
- 所以scalability一樣被限制住
- action units (ICFACE)
- action units是一位瑞典的解剖學家提出的, 他將各種臉部動作去編碼, 作為構成臉部表情的基本單位, 像是眉毛上揚, 嘴角下垂等等
- ICFACE這篇paper用action unit來做face reenactment
- 由於action unit跟臉部結構是independent的, 所以action unit能夠把driving face的臉部資訊跟identity資訊disentangle出來
- 但只用action unit的效果卻沒有像landmark-based的效果那麼好
Method
- 所以這篇paper提出的方式是將source face的landmark結合driving face的action units
- 來產生high quality的reenactment results, 同時不會有identity leakage的問題
- 主要的架構可以分成三個module: landmark trasformer, face reenactor, background mixer
- landmark trasformer
- landmark trasformer會將source face的landmark跟driving face的action units concatenate起來
- 經過fully-connected network形成transformed過後的landmark, 這個module目的在於
- 產生一個有source identity以及driving facial motion的landmark
- face reenactor
- face reenactor會把剛剛產生的landmark用2D Gaussian function轉成一個single channel image
- 再把這個single channel跟source image concatenate起來丟到generator裡
- 這樣做的用意是利用transform過後的landmark來改變source image的臉部表情及頭部姿勢
- generator的output是一個reenact過後的face image以及一個segmentation map
- 這個segmentation分成三個class: face, hair, background
- segmentation的用意是要將產生的reenact face的背景去掉
- background mixer
- 去掉背景的reenact face就會是第三個module background mixer的其中一個input
- background mixer的第二個input是將source image的臉部去除之後的背景圖
- 將兩者做concatenate, 目的是要讓一個單純是臉的image跟一個單純是background的image做結合, 最後產生出有source identity以及driving facial motion而且background的quality也很高的output

- landmark trasformer是一個fully connected network, input有兩個
- 一個是source image的facial landmark, 會先reshape成136*1的一維vector ls
- 第二個input是driving image的action units, 是20*1的一維vector AUd
- 將這兩個concatenate之後經過fully-connected network
- 會產生一個對landmark movement的預測delta ls, 再將剛剛的input ls加上這個delta ls產生最後的output lt
- landmark trasformer用了三種loss function
- 第一個reconstruction loss直接去算產生出來的landmark lt跟driving face的landmark ld之間的MAE, 再加上對預測出來的delta ls做l2-weighted penalty regularization
- 由於reconstruction loss是針對landmark做計算, 沒辦法針對比較細微的臉部表情變化
- 所以作者用另一個fully-connected network La來對臉部表情變化計算loss
- 作者沒有說明La的output會是什麼, 但從loss function中可以看出作者想要讓La可以將landmark轉換到像是action unit的表示法
- 這樣就能針對臉部表情變化算loss
- 而為了要讓transform過後的landmark跟原本driving face的landmark相似, 作者用了第三個loss function, connectivity loss
- 這個loss是分別去看source face的landmark跟transform過後的landmark
- 兩個landmark圖上各自相鄰的landmark points的距離
- 大D是一個x維的vector, x代表在loss function中用了幾個landmark points, 裡面放相鄰landmark point的距離
- 比如說有10個點, 就會存放1到2的距離, 2到3的距離, 以此類推
- 那這個loss function可以讓兩者的landmark更相似
- 所以landmark trasformer的loss function可以寫成這三個loss function相加
face reenactor

- 這個module會先把上一個module的transformed landmark lt用2D Gaussian function map成single channel image Ht
- Ht再和source image Ls concatenate起來丟到generator Gr, 來改變source image的臉部表情及頭部姿勢, Gr會產生reenact過後的RGB image Ifr
- 同時也會產生一個segmentation map Sfr, 有臉部頭髮跟背景三個class
- segmentation是用來將產生的reenact face的背景去掉, 產生I'fr
- 而segmentation產生的方式是接一個CNN到generator的倒數第二層後面
- 這邊的generator跟discriminator作者使用High-Resolution Image Synthesis and Semantic Manipulation with Conditional GANs
- 這篇paper所提出的方法, 這篇paper是發表在CVPR2018的
- generator跟discriminator分別是coarse-to-fine generator以及multi-scale discriminator
coarse-to-fine generator

- 先介紹coarse-to-fine generator, 它使用了兩個generator
- 兩個都是一層convolution, 一系列的residual block,再加上一層transposed convolution
- 一個叫做local enhancer也就是圖中的G2, input是2048*1024,
- 另一個是global generator 圖中的G1, input是把原圖downsample變成1024*512
- 這樣的做法讓generator可以在不同的解析度下訓練
- 一開始會先把圖片放到local enhancer G2, 得到feature map
- 同時把downsample的圖片放到global generator G1, 接著把G1的feature map跟剛剛G2的feature map做element-wise sum, 再接著用後半部的G2訓練, 得到最後的結果
multi-scale discriminator

- multi-scale discriminator, 作者是用了三個discriminator
- 每個的架構都一樣, 但處理不同的image scale
- 圖片會downsample成長寬除以2跟長寬除以4的圖片, 再加上原尺寸的圖片總共是3張圖片
- 各自經過架構一樣的discriminator
- 這樣處理最小張的discriminator, 它的receptive field會最大
- 就會注重在圖片整體的真實度
- 處理原尺寸圖片的discriminator, 它的receptive field會最小
- 就會注重在圖片的細節上
- GAN的loss function就會是這樣, 有三個discriminator
- 接下來回到剛剛第二個module
- face reenactor的loss function, 有四個loss function
- 第一個一樣是reconstruction loss, 計算在把背景去掉的reenact face和driving face上
- 因為reenact face所產生的圖片就是要去學driving face的表情
- 第二個跟第三個loss是使用剛剛generator跟discriminator那篇paper所提出的loss function
- 分別是VGG perceptual loss跟adversarial loss
- VGG perceptual loss是把VGG-16當作loss network, 將生成圖片跟groundtruth的feature map去算loss
- Vi就是經過第i層的feature map, CiHiWi分之1是除上總共有這麼多個element
- 所以perceptual loss是針對feature去算loss
- adversarial loss跟一般的GAN adversarial loss不一樣的地方在於要對三個discriminator算loss
- 而最後一個loss Lce是對segmentation算loss, 作者先用pretrained的face-segmentation network來取得groundtruth
- 再來和生成的segmentation算cross entropy loss
- 所以face reenactor最後可以寫成四個loss的加總
background mixer

- 最後是background mixer, input是reenact image把背景去掉也就是右上角的I'fr
- 還有source image把臉部跟頭髮去掉, 稱為Ib
- generator Gb會產生RGB圖片Ic跟一個single channel mask M
- 然後用這兩個output跟Ib去計算出最後的output Ir
- M乘上Ic代表只focus在頭髮跟臉部, (1-M)乘上Ib代表只focus在背景
- 這樣就能將臉部跟背景分開處理, 讓背景盡量跟source image當中的背景相似
- loss function針對mask使用total variation regularization, 可以在去除noise的同時又保留原本的edge, 再加上對mask做l2 weight penalty
- loss function還有其他三項, 對於reenact image跟driving image做reconstruction loss以及perceptual loss
- 還有對於generator跟discriminator做adversarial loss
- 這三個loss的算法都跟上一個module中提到的一樣
- background mixer的loss function就可以寫成這四個loss相加
Experiments
- training dataset是用IJB-C video, 臉部用landmark detector, 再用centroid tracker來追蹤, 形成image crop, 總共使用40萬張training data
- 並使用forensic++ dataset當作testing data, pre-processed的方式跟IJB-C一樣, 總共有20萬張image
- 所有的network都會先各自train幾個epoch, 再合起來用end-to-end的方式train
- landmark trasformer跟generator都是用learning rate 0.0002,
- landmark trasformer的batch size是用32, 而generator的batch size是用1
Experiment 1
- 作者做的第一個experiment是來評估landmark trasformer的重要性, 分別做了self-reenactment跟cross-reenactment在有無landmark trasformer情況下的比較
- self-reenactment代表source image跟driving image是同一個人
- cross-reenactment代表source image跟driving image是不同人
- self-reenactment因為identity是同一個人, 臉部的輪廓基本上是一樣的, 只有表情不同
- 所以可以把driving image直接當groundtruth, 這邊作者用pixel-wise的MSE來evaluate self-reenactment
- 而cross-reenactment的identity不同, 就無法用driving image當作groundtruth, 也就無法使用MSE來evaluate
- 所以作者採用另外三個方式來evaluate cross-reenactment
CSIM
- 第一個是cosine similarity between image embeddings CSIM
- 用Deep face recognition這個network來取得source image跟reenact image的embeddings
- 用來評估model是否能在reenact過程中保留source identity
PSIM
- 第二個是pose cosine similarity between image PSIM
- PSIM是用來評估model是否能保留driving image的頭部角度方向
- 做法是用Openface來計算driving image跟reenact image的頭部角度
ED
- 第三個是expression difference ED
- 用Euclidean distance來計算在action units上, 一樣是用openface來計算driving image跟reenact image的action units
- 是用來評估model是否能保留driving image的臉部表情

- 先看self-reenactment的分數, 沒有landmark transformer的效果反而比較好
- 這是因為source image跟driving image的identity是同一個人, 所以driving image的landmark本身就是landmark transformer能產生的最好的output
- 但有landmark transformer的分數也只有比沒有landmark transformer低一點點
- 這說明了driving face的臉部表情跟頭部角度方向都能很好地被transform到reenact output上
- 再來是cross-reenactment的分數, 作者認為PSIM跟ED都沒有差很多, 所以注重在CSIM的討論
- 但我認為PSIM的分數還是有一定的差距, 也就是加上landmark transformer, output的頭部角度方向反而會比較差一點
- 我自己的想法是因為加上landmark transformer, 整個臉的輪廓還是會影響到頭部角度方向
- 像這張圖, landmark transformer為了要保留source的landmark, 頭旋轉的角度就沒有那麼多
- 回到剛剛作者認為比較重要的CSIM, CSIM分數越高代表source identity越高程度被保留在reenact output中
- 所以在CSIM分數的差異代表使用landmark transformer可以提升reenactment的quality也可以減少identity leakage的問題
- 右圖顯示有沒有landmark transformer對於output的影響
- 我認為最明顯的就是臉部的輪廓, 像這邊的臉就因為driving face而縮小, 這邊也是
- 這樣就已經影響到source identity
- 整體來說在頭部姿勢上有些有些微的差距, 而在表情上我認為都差不多, 整體上都有反映左邊表格的分數
Experiment 2

- 第二個experiment將FACEGAN跟一些現有方法做比較, 可以看到FACEGAN的結果都能夠將source identity很好地保留
- 跟其他方法比較也沒有嚴重的identity leakage的問題, 而這個差異主要來自於加入了landmark transformer
- 也可以看到其他方法都只對於臉部區域做處理, 卻忽略了背景或其他身體部位的整合
- 由於FACEGAN加入了background mixer, 將臉部和背景分開處理
- 所以像背景的線都還是能很好地被還原出來, 不像有些被模糊或是扭曲了
Experiment 3
- 第三個experiment將剛剛的比較用數據來呈現, 使用的metrics有剛剛提到的
- MSE, CSIM, PSIM, ED, 以及作者為了能夠分析結構上比較細微的變化而提出的
LSIM
- landmark similarity score LSIM
- LSIM的計算比較複雜, 要先隨機拿同一個identiy的兩張source image, 稱為source image 1跟source image 2
- 然後再找一張跟source image 2的action unit很相似但identity不同的driving image
- 用source image 1跟driving image進行FACEGAN的處理
- 產生出來的reenact face會跟source image 2做比較
- 這邊source image 2是當作groundtruth, 因為它的identity跟source image 1相同, 同時它的表情又跟driving image相同
- 為了要focus在結構上微小的變化, 作者用MSE在reenact face跟source image 2對應的landmark location上, 而不是pixel level的MSE
- 所以如果reenact face有同時保留facial shape跟臉部表情, LSIM就會比較低

- 接著回到表格的比較, self-reenactment除了ICFace之外, 其他的MSE都差不多
- 由於ICFace只有使用action unit而沒有使用landmark, 所以這邊顯示使用landmark的好處
- 而cross-reenactment的部分, CSIM由FACEGAN獲得最高分, 顯示FACEGAN保留source identity的能力最好
- 在PSIM, FSGAN獲得最高的分數, PSIM是用來評估model是否能保留driving image的頭部角度方向
- FSGAN只有使用landmark, 沒有用action unit
- 我認為FACEGAN在PSIM沒有獲得最高分的原因跟我剛剛的想法一樣
- 因為用了landmark transformer, 臉的輪廓還是會稍微影響到頭部的角度方向
- 而X2Face在PSIM獲得最低的分數, 最前面有提到X2Face使用VAE, 所以效果本來就不是很好
- 而ICFACE獲得第二低的分數, 也再次說明只用action unit是很難產生接近driving image的頭部姿勢
- 在ED的部分, FACEGAN取得最好的分數, 但其他方法的分數也很接近
- 最後LSIM的部分, 評比的是同時要有facial shape以及臉部表情
- 所以FACEGAN同時使用landmark以及action unit來達到這個目的, 在LSIM中也獲得最高分
Experiment 4


- 最後一個experiment說明可以如何去改變reenact face的action unit以及背景
- FACEGAN用了17個臉部表情以及3個頭部角度方向的action unit
- 前面的例子action unit都是從driving face得到, 但其實也可以從source face得到
- 可以把source face的action unit做一些改變當成driving information丟到model裡
- 圖中的x軸就是各種action unit, y軸就是對這個action unit的value做改變,
- 可以看到藉由調整action unit的值就能產生不同表情跟頭部姿勢的reenact face
- 而對於背景的變換, background mixer可以將rennact face跟任何background combine在一起
- 如圖中所示, 這邊每兩個圖片是同一個source identity, 左邊的是source圖片
- 但右邊的圖片是使用其他background來形成reenact image
Conclusion
- FACEGAN結合facial landmark以及action unit來產生高質量的reenactment
- 可以減少identity leakage problem, 同時不像過去的方法會對於source跟driving image pair有很多限制
- FACEGAN還將臉部區域以及背景分開處理, 這樣的方法甚至可以對圖片更換不同背景, 也能夠產生更多不同應用