藉助影像資料集,無監督影像到影像轉換方法可以將給定類的影像對映到另一類的模擬影像,例如 CycleGAN 將馬轉換為斑馬。雖然這種模型非常成功,但在訓練時需要大量源類和目標類的影像,也就是說需要大量馬和斑馬的影像。而這樣訓練出來的模型只能轉換斑馬與馬,作者認為這極大限制了這些方法的應用。
因為人類能夠從少量樣本中抓住新事物的本質,並「想象」出它們在不同情況下的狀態。作者從中獲得啟發,探索一種 few-shot 無監督的影像到影像遷移演算法,這種演算法適用於測試時僅由少量樣本影像指定的以前沒見過的目標類。
透過對抗訓練方案和新網路設計的結合,該模型能夠實現 few-shot 影像生成。此外,在經過大量實驗驗證以及與基準資料集上的幾種基線方法比較後,作者證實了所提出框架的有效性。
試用效果
既然效果這麼棒,小編忍不住拿出了家崽的百天照試試效果。
Demo 試用地址:https://nvlabs.github.io/FUNIT/petswap.html
下面這張照片展示了我家小溪溪的日常——喪。(微笑臉)
我把這張照片上傳到 demo 頁面,經過後臺系統的一系列神操作之後,嗯,我看到了一堆喪喪的動物。(苦笑臉)
第 2 張的小狗狗是溪溪的犬版嗎?表情一毛一樣!我的天吶~
再試一下,下面這張照片也是溪溪的經典表情——嚴肅臉,嚴肅中帶著一點驚訝,驚訝中還有一點彷徨……(此處省略表情描述 500 字)。
嗯哼,系統生成的圖如下,一堆目瞪口呆.jpg。寶寶們為啥不開心呀?
突然想起來,溪溪還有一張 wink 照呢,老母親私以為神似劉昊然(請迷妹們不要打我)……
不知道是不是因為背景太複雜(溪溪害羞鑽進了被子裡),生成的圖效果似乎不太好。看第 15 張,小貓有一隻眼完全閉上了,但是溪溪可沒有閉眼哦。不過溪溪小警長的小白爪在生成的每張圖中都有體現,雖然看不太出是爪子還是耳朵還是別的什麼……
影像到影像的轉換到底怎麼了?
上面英偉達的 FUNIT 已經非常強了,那麼一般的影像轉換又有什麼問題呢?說到影像到影像的轉換(image-to-image translation),我們最熟悉的可能就是 CycleGAN,它可以將某種影像轉換為另一種,例如將馬轉換為斑馬。
這樣看起來非常有意思,但卻有一個很大的限制。如果我們希望完成馬和斑馬之間的轉換,那麼要弄一堆馬的照片和一堆斑馬的照片,再訓練 CycleGAN 模型就能獲得兩類影像之間的轉換關係。雖然馬和斑馬之間的影像不需要成對匹配,但這樣是不是還有一些複雜?感覺不能像人那樣自由「想象」?
其實人類擁有出色的泛化能力,當看到從未見過的動物照片時,我們可以輕易想象出該動物不同姿態的樣子,尤其是當我們還記得該姿態下的其它動物長什麼樣子。這是一種很強的泛化能力,那麼機器學習也能做到這一點嗎?
雖然當前無監督影像到影像轉換演算法在很多方面都非常成功,尤其是跨影像類別的複雜外觀轉換,但根據先驗知識從新一類少量樣本中進行泛化的能力依然無法做到。具體來說,如果模型需要在某些類別上執行影像轉換,那麼這些演算法需要所有類別的大量影像作為訓練集。也就是說,它們不支援 few-shot 泛化。
雖然無監督影像到影像方法取得了顯著成功,但總體而言有以下兩方面的限制:
其一,這些方法通常需要在訓練時看到目標類的大量影像;
其二,用於一個轉換任務的訓練模型在測試時無法應用於另一個轉換任務。
為了解決這些限制,作為縮小人類和機器想象能力之間差距的一種嘗試,英偉達的研究者提出一種 Few-shot 無監督影像到影像轉換(FUNIT)框架。該框架旨在學習一種新穎的影像到影像轉換模型,從而利用目標類的少量影像將源類影像對映到目標類影像。也就是說,該模型在訓練階段從未看過目標類影像,卻被要求在測試時生成一些目標類影像。
為了更好地理解這種新穎的影像轉換,作者在下圖展示了動物面部的 few-shot 轉換結果:
如上所示,其中 y_1 和 y_2 是測試階段可用的目標類 few-shot 樣本影像、x 是源類輸入影像,而 x bar 就是源類到目標類的轉換結果了。我們可以看出來,x 和 x bar 之間的「神態」都非常相似。
英偉達的 Few-Shot 解決方案
接著,研究者假設人們的 few-shot 生成能力是由過去的視覺體驗發展而來—如果一個人過去看過很多不同物件類的影像,則能夠更好地想象出新物件類的影像。基於此假設,他們使用包含眾多不同物件類影像的資料集來訓練 FUNIT 資料集,以模擬過去的視覺體驗。具體來說,他們訓練該模型,從而將其中一類的影像轉換為另一類(利用該類的少量樣本影像)。
他們假設透過學習提取用於轉換任務的少量樣本影像的外觀模式,該模型得到了一個可泛化的外觀模式提取器,在測試時,該提取器可以在 few-shot 影像到影像轉換任務中應用於未見過類別的影像。
在實驗部分,他們給出了實驗性證據,即 few-shot 轉換效能會隨著訓練集中類的增加而提升。
研究者提出的框架基於生成對抗網路(GAN)。透過對抗訓練方案和新網路設計的結合,他們實現了預期的 few-shot 影像到影像轉換能力。
此外,在經過三個資料集的實驗驗證以及與其他基線方法在一些不同的效能指標上進行比較之後,他們證實了所提框架的有效性,並且該框架可應用於 few-shot 影像分類任務。透過在 few-shot 類影像模型生成的影像上訓練分類器,FUNIT 框架效能優於當前基於特徵錯覺(feature hallucination)的最佳 few-shot 分類方法。
FUNIT 框架
為了訓練 FUNIT,研究者使用一組物件類影像(如不同動物的影像)並將其稱為源類。他們不假設任何兩類之間都存在可以配對的影像(也就是說沒有兩種不同物種的動物是完全相同的姿態)。他們使用源類影像訓練多類無監督影像到影像轉換模型。在測試階段,他們為模型提供少量新物件類(稱為目標類)影像。該模型利用非常少的新目標類影像將任何源類影像轉換成目標類的模擬影像。當他們為同一模型提供少量新的不同目標類影像時,該模型必須將任何源類影像轉換成這一新的不同目標類的模擬影像。
FUNIT 框架包含一個條件式影像生成器 G 和一個多工對抗判別器 D。與現有無監督影像到影像轉換框架中輸入一個影像的條件式影像生成器不同,研究者提出的生成器 G 能夠同時輸入內容影像 x 和一組 K 個類別的影像 {y_1, ..., y_K},並透過
輸出影像 x bar。
研究者假設內容影像屬於物件類 c_x,而每一個 K 類影像屬於物件類 c_y。一般來說,K 值很小,物件類 c_x 區別於 c_y。他們將 G 稱為 few-shot 影像轉換器。
圖 1:訓練。訓練集包含來自幾種物件類別(源類別)的影像。研究者訓練一個模型在這些源物件類別影像之間進行轉換。
部署。研究者向訓練得到的模型展示極少的目標類別影像,儘管模型在訓練期間從未見過來自目標類別的任何影像,但這已經足夠使其將源類別影像轉換為目標類別的類似影像。注意,FUNIT 生成器接收兩個輸入:1)一幅內容影像和 2)一組目標類別影像。它的目標是生成與目標類別影像類似的輸入影像的轉換。
如圖 1 所示,G 將一個輸入內容影像 x 對映到一個輸出影像 x bar,這樣一來,x bar 看起來就會像是一幅屬於源類別 c_y 的影像,x bar 和 x 結構相似。讓 S 和 T 分別表示源類集和目標類集。在訓練期間,G 學習在兩個任意取樣的源類別 c_x, c_y∈ S(c_x ≠ c_y)之間進行影像轉換。測試期間,G 從一個未見過的目標類別 c ∈ T 中提取幾幅影像作為類別影像,並將從任何一個源類取樣的影像對映到目標類別 c 的類似影像。
FUNIT 的學習過程
如果想要了解 FUNIT 的學習過程,那麼瞭解它的目標函式及組成模組是最好不過了。如前所述,整個 FUNIT 框架主要包含 Few-shot 影像轉換器和多工對抗判別器。其中 Few-shot 影像轉換器 G 又包含內容編碼器 E_x、類別編碼器 E_y 和解碼器 F_x,透過這些模組,前面方程 (1) 就可以改寫為:
其中 X bar 就是我們希望生成的影像。如果構建了轉換器 G 和判別器 D,那麼整個 FUNIT 框架就能透過類似 GAN 的方法得到訓練,即解極小極大最最佳化問題:
其中 L_GAN、L_R 和 L_F 分別是 GAN 的損失函式、影像內容重構損失和特徵匹配損失,它們共同構建了整個模型的目標函式。下面簡要地展示了這三種損失函式的計算公式,當然在原論文中,這三個損失函式都有詳細的解釋,讀者可參考原論文理解。
如上在 GAN 的損失函式中,D 的上標表示不同的目標類別。整個損失函式僅使用對應類別的二元預測分進行計算。
如上很容易看出來,重構損失 L_R 主要會幫助 G 學習轉換模型,原始影像要和轉換的影像相近一點比較好。
最後是特徵匹配損失,它會為整個訓練提供正則化效果。其中 D_f 為特徵抽取器,它會從輸出影像與影像類別中抽取特徵。
實驗
根據目標類別中的影像在訓練過程中是否可用,研究者將基線模型分為兩類:公平(不可用)和不公平(可用)。
如表 1 所示,本文中提出的 FUNIT 框架在 Animal Faces 和 North American Birds 資料集上的所有效能指標上都優於 few-shot 無監督影像到影像轉換任務基線。
表 1:與「公平」和「非公平」基線的效能比較結果。↑表示值越大越好,↓表示值越小越好。
從表中還可以看出,FUNIT 模型的效能與測試時可用目標影像 K 的數量呈正相關。
研究人員視覺化了 FUNIT-5 few-shot 無監督影像到影像轉換方法得到的結果(如下圖 2 所示)。結果顯示,FUNIT 模型可以成功地將源類影像轉換為新類的類似影像,輸出的影像非常逼真。
圖 2:利用本文中的 few-shot 無監督影像到影像轉換方法得到的結果。
該結果利用 FUNIT-5 模型計算得到的。從上到下依次是動物面部、鳥、花和食物資料集得到的結果。研究者為每個資料集訓練一個模型。y_1、y_2 是 5 個隨機取樣類別影像中的兩個,x 是輸入內容影像,x¯表示轉換輸出。結果顯示,儘管在訓練過程中沒有見過任何來自目標類的影像,但 FUNIT 能夠在困難的 few-shot 設定下生成可信的轉換輸出。從圖中可以看出,輸出影像中的物件與輸入中的物件姿態類似。
下圖 3 提供了幾種基線模型與 FUNIT 在 few-shot 影像到影像轉換任務中的效能比較。由於基線模型不是為 few-shot 影像轉換任務設計的,它們在如此具有挑戰性的任務中表現無法令人滿意。
圖 3:Few-shot 影像到影像轉換效能的視覺化比較。上圖中的 6 列影像從左到右依次是輸入內容影像 x、兩個輸入目標類影像 y_1、y_2、從「不公平」及「公平」StarGAN 基線得到的轉換結果及本文中的框架得到的結果。
研究人員還讓人類受試者參與了生成影像的評價,受試者偏好得分如下圖所示(表中數字為喜歡 FUNIT 生成結果的使用者所佔百分比)。
表 2:受試者使用者偏好得分。
結果表明,無論是與「公平」還是「不公平」的基線相比,受試者都認為 FUNIT-5 生成的結果更加可信。
研究人員還分析了在訓練時見到的物件類別數發生變化時模型效能的變化(設定為一個樣本,即 FUNIT-1)。如圖所示,在轉換準確率方面,效能與物件類別數呈正相關。這表明,在訓練中看到的物件類別數越多,FUNIT 模型在測試中表現越好。
圖 4:Few-shot 影像轉換效能 vs. 在動物面部資料集上訓練時見到的物件類別數。效能與訓練期間見到的源物件類別數成正比。
研究者使用動物和鳥類資料集對 FUNIT 的 few-shot 分類效能進行了評估(結果如下圖)。更確切地說,他們利用訓練得到的 FUNIT 模型為每個 few-shot 類別生成 N 個影像,然後利用生成的影像訓練分類器。
他們發現,與 Hariharan 等人提出的 few-shot 分類方法相比,利用 FUNIT 所生成影像訓練得到的分類器效能更好。
表 3:在 5 種類別上的 few-shot 分類平均準確率。
最後,想要搞點事情的小夥伴們可以看看論文與實現呀。
論文:Few-Shot Unsupervised Image-to-Image Translation
論文地址:https://arxiv.org/pdf/1905.01723.pdf
實現地址:https://github.com/NVlabs/FUNIT