照片美妝---卷積“換臉”
本文轉載自:http://blog.csdn.net/stdcoutzyx/article/details/69196428
“卷積”換臉
正文:
影象風格轉換[1][2][3]在效果上的成功,使得研究者們開始拓展它的應用範圍,換臉就是其中之一。在影象風格轉換演算法框架下,如果將風格影象換做目標人臉,那麼就有可能將影象中的人臉換掉。
由於影象風格轉換的演算法框架下是語義級別的影象內容操作,因而,在影象風格轉換框架下的換臉可以達到原圖的表情、膚色、光照不變。
上圖中,a是原圖,b是由本文描述的演算法得到的結果,c是直接使用影象編輯軟體得到的結果。
本文的演算法來源於參考文獻[4].下面將對演算法細節進行進行描述。
演算法細節
影象預處理
想要進行換臉操作,首先要將臉的位置對齊,這個步驟使用兩種技術,人臉對齊和背景切分。對齊使用如下步驟:
- 獲取原圖和目標圖中人臉的68個關鍵點
- 通過對這68個關鍵點進行線性變換,將原圖中的人臉擺正。
- 通過對這68個關鍵點進行匹配,將目標圖中的人臉對映到原圖中人臉的位置。
- 將原圖中的人臉與背景切分,以方便後續只對人臉區域進行操作。
網路結構
延循之前的演算法框架,本演算法採用一種多尺寸結構,小尺寸的影象經過卷積後自動上取樣為2倍大小,然後再和大尺寸的影象進行通道連線。
沒去看之前的演算法框架為何要採用這樣的方式,但個人推測是為了保證解析度,因為在低解析度的影象上容易訓練。
損失函式
內容損失
同[1][2][3]類似,影象的損失函式是基於一個已經訓練好的神經網路裡的feature_map。類似的,內容損失函式為:
風格損失
針對人臉問題,風格損失函式做了一些修改,因為Gram Matrix不能夠捕捉到影象中的結構資訊,因而在人臉問題上不能應用,所以,本文使用[3]中的最近鄰方法,即原圖中的某個位置的影象用目標圖中最相似的片段進行替換。
但同[3]不同的是,[3]中對於原圖中的某個patch,搜尋域是全域性域,即在全域性域去尋找相似patch,而本文演算法則根據從人臉中提取的關鍵點來對搜尋域進行限制。即對輸入影象的人臉的某個部分,只在目標圖中的某個部分附近進行相似patch搜尋。
本演算法還有一個要求:需要目標人臉的多張影象,即多張風格影象。在相似patch搜尋時,損失在影象區域上有所限制,但是可以在多張影象提取的patch上進行搜尋,這樣,可以保證能夠復現多種多樣的表情。
所以,風格損失函式為:
光照損失
上述兩種損失函式都是依賴於從訓練好的VGG網路中提取的特徵圖,而VGG網路是針對分類訓練的網路,並不能特定的提取光照特徵。
為了保持換臉過程中光照保持不變,那麼需要對光照上的變換進行懲罰。而為了提取光照變化,演算法針對光照訓練了一個CNN分類器,針對兩張除了光照外其他都不變的影象,分類器判斷這一對影象是否發生了光照變換。
使用從這個網路中得到的feature map進行光照損失的計算
平滑損失
與其他類似,
損失函式
綜上所述,損失函式為
效果
在本演算法框架下,針對每一個目標人臉,都需要一個網路。訓練了兩個網路,一個是Nicolas Cage,另一個是Taylor Swift。
正臉的作用
對比了各種角度人臉的替換結果
越是正臉,就越像Cage,原因可能是資料的不均衡性導致的,因為目標影象中側臉比較少。
光照損失的作用
左中右分別為,原圖,帶光照損失的換臉和不帶光照損失的換臉。
風格損失權重的作用
左中右分別為,原圖,風格損失權重=80,風格損失權重=120。
錯誤示例
左中,遮擋物被去掉了,說明演算法不支援遮擋物
右,效果差,因為不是正臉,且pose比較少見。
總結
可提升之處:
- 生成影象的質量來源於目標影象的豐富性。側臉的差效果可能是因為目標影象中側臉的影象少的緣故。增加目標影象的豐富程度可以提升效果
- 一些影象看起來被過度平滑了,新增GAN損失可能能解決這個問題。
- 修改損失函式使遮擋物可以儲存下來。
- 增強人臉關鍵點檢測演算法。
參考文獻
- [2]. 感知損失
- [4].Korshunova I, Shi W, Dambre J, et al. Fast Face-swap Using Convolutional Neural Networks[J]. arXiv preprint arXiv:1611.09577, 2016.