1. 程式人生 > >照片美妝---卷積“換臉”

照片美妝---卷積“換臉”

本文轉載自: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.