卷積「換臉」

圖像風格轉換[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損失可能能解決這個問題。
  • 修改損失函數使遮擋物可以保存下來。
  • 增強人臉關鍵點檢測算法。
  • 使用VGG-Face網絡來進行內容損失和風格損失的計算。
卷積“換臉”


分享到:


相關文章: