CVPR 2018摘要:第五部分

本文爲 AI 研習社編譯的技術博客,原標題 : What’s In a Face (CVPR in Review V) 作者 | Sergey Nikolenko、Anastasia Gaydashenko 翻譯 | 老趙 校對 | 醬番梨 整理 | 菠蘿妹 原文鏈接: https://medium.com/neuromation-io-blog/whats-in-a-face-cvpr-in-review-v-3086f60e1f1c 注:本文的相關鏈接請點擊文末【閱讀原文】進行訪問

人臉有什麼(CVPR 摘要第五部分)

我說她沒有面孔; 但那意味着她有一千個面孔...... - C.S. Lewis,直到我們面對面

今天我們向你介紹另一部分,我們將深入瞭解CVPR 2018(計算機視覺和模式識別)會議的一些論文的細節。 我們已經有四個:關於計算機視覺的GAN,關於人類的姿勢估計和跟蹤,關於合成數據,以及最後關於域適應。 特別在第四部分中,我們提出了三篇關於同一主題的論文,這些論文實際具有數字可比性。

今天,我們轉向一個不同的問題,也需要進行詳細的比較。 我們將討論面部生成,即從頭開始或通過改變真實照片的某些特徵來合成人臉的真實圖像。 實際上,我們剛剛在關於GAN的第一篇文章中已經觸及了這個問題。 但從那時起,生成對抗網絡(GAN)一直是機器學習中最熱門的話題之一,難怪今天有新的進步等待着我們。 再次,我很高興介紹Anastasia Gaydashenko,我們與他們共同撰寫了這篇文章。

合成面部的GAN和損失函數的重要性

我們已經多次談到模型架構和良好的數據集對深度學習的重要性。 在這篇文章中,一個反覆出現的主題將是損失函數的意義和重要性,即神經網絡實際代表的函數。 有人可能會說損失函數是架構的一部分,但在實踐中我們通常會分開考慮它們; 例如,相同的基本架構可以提供各種各樣的損失函數,只需要很小的改動,這就是我們今天將要看到的。

我們之所以選擇這些特別的論文,不僅是因爲我們最喜歡它們,還因爲它們都使用GAN,並且都在使用它們來修改面部圖片,同時保留了人的身份。 這是GAN的成熟應用; 像ADD這樣的經典論文用它來預測一個人如果隨着年齡的變化而變化,或者如果他們擁有不同的性別,他們會是怎樣的面部。 我們今天考慮的論文使這一系列研究更進了一步,以一種可能受到操縱的方式將一個人的外表(例如,化妝或情緒)的某些部分分開。

因此在某種程度上,今天的所有論文也解決了同樣的問題,並且可能相互比較。 但問題是,對模型結果的真實評估基本上只能由人來完成:你需要判斷新圖片的真實程度。 在我們的例子中,具體任務和數據集也有所不同,因此我們不會直接比較結果,而是提取和比較新的有趣想法。

一起看論文吧。

面向開集身份保持人臉合成

第一篇論文的作者,來自中國科學技術大學和微軟研究院研究人員的共同工作(完整pdf),旨在從單個面部圖像中解開身份和屬性。 這個想法是將一個面部的表示分解爲“身份”和“屬性”,使身份對應人,屬性基本上對應於在保留身份的同時可以修改的所有內容。 然後,使用提取的身份標識,我們可以添加從不同面部提取的屬性。

像這樣:

很有意思吧? 我們來研究他們是如何做到的。 本文中有許多有趣的小技巧,但這項工作的主要貢獻是一個新的基於GAN的架構:

在這裏,網絡將兩張圖片作爲輸入:身份圖片,和作爲除了人的身份之外的所有事物的來源:姿勢,情感,照明,甚至背景的屬性圖片。

該架構的主要組成部分包括:

  • 身份編碼器 I 產生身份輸入 xˢ 的潛在表示(嵌入);
  • 屬性編碼器 A 對輸入 xᵃ 的屬性執行相同的操作;
  • 混合圖像生成器 G 將嵌入(連接)作爲輸入併產生圖像 x',該圖像應該混合 xˢ 的身份和 xᵃ 的屬性;
  • 身份分類器 C 檢查生成的圖片 x' 中的人是否確實與 xˢ 中的人相同;
  • 鑑別器 D 試圖區分真實和生成的例子,以通常的GAN方式提高生成器性能。

這是用於訓練的模型結構; 當所有成分都經過訓練時,爲了生成本身,只需使用虛線內的部分就足夠了,因此網絡 C 和 D 僅包含在訓練階段。

主要問題是如何從屬性中分離出身份。 我們怎樣才能告訴網絡應該在 xˢ 應該採取什麼措施以及 xᵃ ? 上面概述的體系結構本身並沒有回答這個問題,這裏的主要工作是通過仔細選擇損失函數來完成的。 它們中有不少; 讓我們逐一篩選。 NeuroNugget 格式不允許太多公式,因此我們將嘗試捕獲損失函數的每個部分的含義:

  • 最直接的部分是 softmax 分類損失 Lᵢ ,它訓練身份編碼器 I 識別照片上顯示的人的身份; 基本上,我們訓練 I 作爲人物分類器,然後使用該網絡的最後一層作爲特徵 fᵢ(xs);
  • 重建損失 Lᵣ 更有趣; 我們希望結果 x' 無論如何重建原始圖像 xᵃ 但這裏有兩個不同的情況:
  • 如果圖像 xᵃ 上的人與身份圖像 xs 上的人相同,毫無疑問我們應該做什麼:我們應該儘可能精確地重建 xᵃ ;
  • 如果 xᵃ 和 xˢ 顯示兩個不同的人(我們知道監督訓練階段的所有身份),我們也想重建 xa ,但對“錯誤”的懲罰較低(在作者的實驗中低10倍); 我們實際上並不想現在完全重建 xᵃ 但仍希望 x' 與 xᵃ 相似;
  • KL分歧損失 Lkl 旨在幫助屬性編碼器 A 注意屬性並儘可能“丟失”身份; 它作爲一個正則化器,使屬性向量分佈類似於預定義的先驗假設(標準高斯);
  • 鑑別器損失 Lᵈ 是標準的GAN:它顯示了 D能夠區分真實和假圖像; 然而,這裏也有一個轉折:不僅僅包括鑑別器損失 Lᵈ ,網絡開始使用Lᵍᵈ,一個特徵匹配損失,用於衡量 D 在 x' 和 xa 的某個中間層上提取的特徵有多相似; 這是因爲我們不能指望立即愚弄D,在訓練開始時鑑別器總是接近完美,我們必須首先解決較弱的損失函數(有關詳細信息,請參閱CVAE-GAN論文);
  • 並且,同樣的技巧適用於身份分類器 C ; 我們使用基本分類損失 Lᶜ ,但也用 C 的某個中間層上 x' 和 xˢ 的特徵表示之間的距離 Lᵍᶜ 來增加它。

聲明:我爲略微弄亂圖片中的符號而道歉但是Medium實際上不支持子/上標,所以我不得不使用現有的Unicode符號。)

這是相當多的東西,不是嗎?這就是現代基於GAN的架構通常的工作方式:它們的最終損失函數通常是許多不同術語的總和,每個術語都有自己的動機和意義。 但是由此產生的結構非常好; 我們現在可以用幾種不同的方式訓練它:

  • 首先,網絡 I 和 C 基本上做同樣的事情,識別人; 因此,他們可以共享架構和權重(這簡化了訓練),我們甚至可以使用標準的預訓練人員識別網絡作爲 I 和 C 的非常好的初始化;
  • 接下來,我們將整個事物訓練成具有已知身份的人的圖像數據集; 正如我們已經提到的,我們可以成對選擇 xˢ 和 xᵃ 作爲同一個人的不同圖像,並讓網絡嘗試精確地重建 xa,或者用不同的人選擇 xˢ 和 xᵃ 並以較低的重建損失進行訓練;
  • 但即便如此也不是全部; 公開提供的人員標籤數據集不夠多樣化,無法對端到端的整個架構進行訓練,但幸運的是,它甚至允許無人監督的訓練; 如果我們不知道我們不能訓練 I 和 C 的身份,那麼我們必須忽略他們的損失功能,但我們仍然可以訓練剩下的。我們已經看到 I 和 C 是最容易訓練的,所以我們可以假設他們在受監督的部分訓練得很好。 因此,我們可以簡單地從Web抓取一些隨機面,並在不知道身份的情況下將它們添加到訓練集中。

由於有意識和精確地選擇了架構,損失函數和訓練過程,結果非常棒。以下是論文中的兩個選項。 在第一個中,我們看到從訓練集中隨機選擇的面部變換,其中包含屬性的隨機面部:

而在第二,身份從未出現在訓練集中。 這些是網絡完全不爲人知的人(“零標識身份”,正如論文所稱)......它仍然可以正常工作:

成對循環GAN:用於應用和刪除化妝的非對稱風格轉移

來自普林斯頓,伯克利和Adobe的研究人員(完整的pdf)的合作與前一篇論文的工作方式相同,但解決了更爲精確的問題:我們可以在照片上添加/修改化妝而不是同時修改所有屬性,而保持臉部儘可能可識別。 這裏的一個主要問題是,在機器學習中經常發生的數據:如果我們有一個大型數據集對齊有和沒有化妝的面部照片,那麼相對直接的方法是很有可能的...但當然我們沒有。 那麼我們如何解決這個問題呢?

網絡仍然獲得兩個圖像作爲輸入:我們從中獲取面部的源圖像和我們採用化妝風格的參考圖像。 然後模型產生相應的輸出; 這裏有一些示例結果,它們非常令人印象深刻:

這種無監督的學習框架依賴於循環一致的生成對抗網絡的新模型; 它由兩個非對稱函數組成:前向函數對基於示例的風格轉換進行編碼,而後向函數則刪除風格。 下面是它的工作原理:

圖爲兩個耦合網絡,旨在實現這些功能:一個傳遞化妝風格(G),另一個可以消除化妝(F); 我們的想法是使其連續應用程序的輸出與輸入照片匹配。

讓我們再次討論損失,因爲他們定義了方法並捕捉了這項工作中的主要新想法。 我們需要的唯一符號是 X 是“無化妝”域,Y 是化妝圖像的域。 現在:

  • 鑑別器 DY 試圖區分來自域 Y(帶化妝)的實際樣本和生成的樣本,並且生成器 G 旨在欺騙它; 所以在這裏我們使用對抗性損失將 G 的結果限制爲類似於域 Y 的化妝面部;
  • 由於同樣的原因,F 使用相同的損失函數:鼓勵它生成與從域 X 採樣的無化妝面部無法區分的圖像;
  • 但這些損失函數還不夠; 他們只是簡單地讓發生器重現與參考相同的圖像,而不受源的任何限制; 爲了防止這種情況,我們使用 G 和 F 組合的同一性損失:如果我們從 X 對面部 x 施加化妝然後立即將其移除,我們應該準確地取回輸入圖像 x ;
  • 現在我們已經使 G 的輸出屬於 Y(面部化妝)並保留了身份,但我們仍然沒有以任何方式使用參考化妝風格; 轉移風格,我們使用兩種不同的風格損失:
  • 風格重建損失 Ls 表示如果我們用 G(x,y)將化妝從臉部 y 轉移到臉部 x,然後用 F(y)從y移除化妝,然後從 G(x,y)應用樣式到F(y),我們應該回到 y,即 G(F(y),G(x,y))應該與 y 相似;
  • 然後在這一切之上,我們添加另一個鑑別器 DS,它決定一對給定的面部具有相同的構成; 它的風格鑑別器損失 LP 是目標函數的最終元素。

論文不僅僅是損失函數。 例如,另一個問題是如何獲取訓練集的照片數據集。 作者找到了一個有趣的解決方案:使用來自YouTube的美女博主。 他們從化妝教程視頻中收集了一個數據集(在亞馬遜機械土耳其人手動驗證),從而確保它包含高分辨率的各種化妝風格。

結果再次令人印象深刻:

如果你與藝術模特化妝轉移之前的狀態對它們進行比較:結果會特別令人印象深刻:

我們有一種感覺,下一個Prisma很可能潛伏在附近的某個地方......

去表達殘留學習的面部表情識別

隨着今天的最後一篇論文(完整pdf),我們從化妝轉向另一種非常特殊的面部特徵:情緒。 我們怎樣才能解開身份和情感?

在這項工作中,提出的架構包含兩個學習過程:第一個是學習通過條件GAN(cGAN)生成標準中性面部,第二個是從生成的生成器的中間層學習。 爲了訓練 cGAN,我們使用顯示一些表情(輸入)的面部圖像對和相同主題的中性面部圖像(輸出):

像往常一樣學習 cGAN:生成器基於輸入圖像重建輸出,然後將元組(輸入,目標,是)和(輸入,輸出,否)給予鑑別器。 鑑別器試圖區分生成的樣本和背景實況,而生成器不僅試圖混淆鑑別器而且還生成儘可能接近目標圖像的圖像(複合損失函數再次,但這次相對簡單)。

本文將此過程稱爲去表達(從臉部去除表達),並且其思想是在去表達期間,與實際情緒相關的信息仍被記錄爲發生器的中間層中的表達組件。 因此,對於第二學習過程,我們固定生成器的參數,並且中間層的輸出被組合並用作進行面部表情分類的深度模型的輸入。 整體架構如下所示:

在生成中性面部之後,可以通過在像素級別或特徵級別比較中性面部和查詢表達面部來分析表達信息。然而,由於圖像之間的變化(即,旋轉,平移或照明),像素級差異是不可靠的。即使表達式沒有任何變化,這也會導致較大的像素級差異。特徵級差異也是不穩定的,因爲表達信息可能根據身份信息而變化。由於查詢圖像和中性圖像之間的差異被記錄在中間層中,因此作者直接利用來自中間層的表達成分。

下圖說明了去表達殘基的一些樣本,它們分別是憤怒,厭惡,恐懼,快樂,悲傷和驚訝的表達成分;圖片顯示了每個表達組件的相應直方圖。我們可以看到,表達組件和相應的直方圖都是可以區分的:

以下是不同數據集的一些示例結果。 在所有圖片中,第一列是輸入圖像,第三列是同一面部的背景真實中性面部圖像,中間是生成模型的輸出:

結果,作者都獲得了用於去表達的良好網絡,即,從臉部移除情緒,並且通過在由去表達網絡捕獲的豐富特徵上訓練情緒分類器來改善用於情感識別的現有技術結果。

結語

謝謝你的閱讀。 有了這個,我們終於完成了2018年的CVPR。很難對這麼大的會議做出正確的判斷; 當然,有數百篇非常有趣的論文是我們無法涵蓋的。 但是,我們仍然希望它是一個有趣和有用的選擇。 我們很快會在下一個NeuroNugget分期介紹中再次見到你。好運。

Sergey Nikolenko Chief Research Officer, Neuromation

Anastasia Gaydashenko former Research Intern at Neuromation, currently Machine Learning Intern at Cisco

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章