周博磊:深度生成模型中的隱藏語義

AIBigbull2050發表於2020-10-10
  2020-10-08 01:07:07

周博磊:深度生成模型中的隱藏語義

作者 | 蔣寶尚

編輯 | 陳彩嫻

現在合成照片的真實感在某些程度上已經比真的還真,在這其中,GANs(生成性對抗網路)和變分自動編碼器功不可沒。

然而,對於生成模型在深層生成表徵中學到了什麼,以及如何由最近GANs引入的分層隨機性構成逼真的影像,研究者探索的還是不夠。

近日,香港中文大學教授周博磊近期分享了他們實驗室在視覺生成方面的成果,並做了題為《深度生成模型中的隱藏語義》的報告,介紹了生成模型中的可解釋性因子,如何去發現這些可解釋因子,以及如何把發現的可解釋因子應用到影像編輯應用之中。

以下是報告文字版,AI科技評論做了不改變原意的整理。

1 從GAN談起

影像生成近幾年進展非常迅猛,從2014年GAN被提出來開始,到2019年GAN生成的圖片質量逐年上升。到近期,StyleGAN v2以及BigGAN已經可以生成跟真實圖片幾乎沒有差異的圖片。這就向我們提出了問題,即神經網路為什麼可以從大量資料中學到關於實際資料的分佈,並可以生成如此真實的圖片。也就是說,我們想進一步探索生成模型到底學到了什麼樣的表徵。

下圖是一個簡單的生成模型的結構,我們向生成模型輸入一個噪聲,這個噪聲可以從一個分佈裡面取樣,然後生成模型的神經元經過層層傳遞,就可以生成一張圖片。

周博磊:深度生成模型中的隱藏語義

生成模型本身其實是一個卷積網路,每一層有很多的卷積神經元,透過逐漸把特徵圖放大,最後變成一張圖片。這裡就帶來一個問題:為什麼網路可以把一個完全噪聲的向量變成一張圖片?

下圖展示了一個簡單的視覺化,在隱空間裡面對隨機向量做一個簡單的隨機遊走,也就是說每一時刻對向量加上一個隨機擾動。然後你可以發現,輸出圖片的內容會進行很大的語義變化,包括髮型、人臉朝向、性別、年齡等因子,都被包含到隱空間裡面去了。

周博磊:深度生成模型中的隱藏語義

這自然而然引出一個問題,我們是不是可以在隱空間裡挖掘這些可解釋因子,從而可以按照意願去控制輸出圖片?

2 可解釋因子探索詳解

在今年CVPR2020,我們提出了一個叫InterFaceGAN的方法,這個方法就是為了在隱空間跟最後輸出圖片的語義空間建立聯絡。這個方法本身非常簡單,但是很有效。

具體步驟是,訓練好了生成模型過後,就得到了一個隱空間。然後我們可以從隱空間裡面進行取樣,把這些取樣出來的向量放到生成器之中,進行圖片生成,後面可以再接一個現有的分類器,給生成的圖片打上一個具體的語義標籤(比如性別標籤)。

周博磊:深度生成模型中的隱藏語義

這樣我們就可以把預測出來的標籤當做隱空間向量的真實標籤,我們進一步再回到隱空間,把預測的標籤當成真實標籤,然後訓練一個分類器,對隱空間向量進行分類。

我們發現,在隱空間裡面,GAN其實已經把隱空間的向量變得非常解耦。只需要用一個線性分類器,就可以在隱空間裡實現90%左右的二分分類準確率。

周博磊:深度生成模型中的隱藏語義

在訓練了一個線性分類器後,我們就在隱空間裡得到了一個子空間,這個子空間就對應了生成圖片的性別。

比如我們現在在隱空間裡面取樣兩個向量點,我們可以做一個操作,把這兩個向量朝著邊界推。我們會發現,圖片的語義產生了非常連續的變化。

如下圖所示,右邊這兩張圖在剛開始是男性頭像,然後我們逐漸把兩個向量往邊界推,發現圖中人物的女性特徵逐漸顯示出來,而且這個過程非常連續,這樣我們就實現了改變性別的目的。

周博磊:深度生成模型中的隱藏語義

這裡進一步做一個比較有意思的測試,比如說我們想看在GAN模型裡面,典型的女性特徵是什麼樣子。

下圖中6個人本來是男性,我們找到了他們的中性邊界,然後沿著邊界一直推。你會發現6張圖就從不同的帥哥變成了金髮美女,而且金髮美女之間也是比較類似的。這顯示出了GAN自己學到女性化特徵是金髮碧眼、妝容比較濃。

周博磊:深度生成模型中的隱藏語義

我們可以反過來做,一開始有6張女性的圖片,然後將她們往中性邊界推,我們來看看GAN學到的典型男性特徵是什麼樣子。

周博磊:深度生成模型中的隱藏語義

你會發現,這6張金髮美女的圖片都變成了同一個男性,這顯示出了GAN自己學到男性化特徵是禿頭大叔。

周博磊:深度生成模型中的隱藏語義

這樣我們就可以做一系列的編輯,比如說現在有一位男性,想讓自己的照片變得更酷,我們可以讓照片中的人物戴上墨鏡,然後有一位女性,希望自己的照片能看起來年輕一些,我們照樣能實現這個需求。另外這位女性覺得拍照角度不令人滿意,我們可以把側臉照變成正臉照,如果對自己的性別也不是很滿意,我們照樣能實現這個需求。每一個邊界其實都是一個線性的二分類器。

周博磊:深度生成模型中的隱藏語義

我們發現,在隱空間裡面,圖片的質量也是一個語義子空間。有時候GAN生成圖片的質量比較差,如下圖上排所示。我們可以把這些圖片向著質量更好的邊界推,就可以修復這些圖片。

周博磊:深度生成模型中的隱藏語義

我們儘可以在隱空間裡面學到其他語義相關的邊界,比如臉部朝向、表情、年齡等等。

周博磊:深度生成模型中的隱藏語義

周博磊:深度生成模型中的隱藏語義

我們原本訓練的是無條件的GAN,透過這種簡單的線性操作,就可以得到有條件的GAN,然後根據意願去改變圖片對應的語義特徵。

我們進一步發現,有時候有些特徵之間是有關聯的。比如下圖,使女性的年齡變大,結果最後她的性別也發生了變化。

周博磊:深度生成模型中的隱藏語義

針對性別變化,我們提出了條件操作(conditional manipulation)的解決方案,即在得到線性分介面之後,由於兩個語義(性別)都有不同的資訊分介面,因此可以進行投影操作,確保投影過後消除它在另外一個語義屬性上面的變化。

周博磊:深度生成模型中的隱藏語義

經過上述簡單操作,得到的結果如下圖所示,隨著年齡的增長,模型生成了正確的圖片。因此,性別保持不變,只改變年齡,這種條件操作產生的效果非常好。

周博磊:深度生成模型中的隱藏語義

另外,我們還有一些工作分析場景生成中存在的可解釋因子。例如下圖名為HiGAN的工作,就提出了一個解析場景生成裡面的解釋因子,找到可解釋因子過後,就能改變和場景相關的一些語義特徵,例如佈局、風格、光照情況。

周博磊:深度生成模型中的隱藏語義

雖然能夠讓圖片達到一些變化,但是仍然存在一個問題,即圖片的編輯都是在生成模型上面進行的。換句話說,這些圖片本質上都是從生成模型裡面進行取樣,然後生成。

但是我們實際需要的是編輯“自己”的圖片,例如下圖我個人真實的照片。但這就會面臨一個問題:GAN逆對映(GAN Inversion)

周博磊:深度生成模型中的隱藏語義

為什麼有這個問題?原因是:相對於VAE(自動編碼器),GAN模型並沒有推斷的能力。因為GAN並不能直接把圖片轉換成隱變數,GAN從噪聲開始,並沒有編碼(encode)的操作,所以需要GAN逆對映:給定一張真實的圖片,然後進行逆對映,從而將其返回到隱空間中。

周博磊:深度生成模型中的隱藏語義

來看最簡單的測試:先把圖片放進去,然後用L2 損失函式進行最佳化,然後發現此問題非常困難,並不只是簡單的求解最佳化問題。

周博磊:深度生成模型中的隱藏語義

上圖是一個效果,也就是進行簡單的最佳化操作之後,得到的一個最佳化編碼(code),然後我們將其放回生成器當中去,結果如下圖所示,它生成了一個“不像我”的人臉。

周博磊:深度生成模型中的隱藏語義

將這張圖片和之前圖片進行對比,有趣的發現是,這兩張圖片在細節和紋理上面“對得上”,但是整體表現有差異,出現這種問題的原因可能與初始化有關。

周博磊:深度生成模型中的隱藏語義

然後我用不同的初始化操作進行了測試,結果是依然沒有生成非常完美的圖片,更多生成的還是“西方人臉”。因此這便證明了生成器自身存在偏見,原因在於資料,因為我們訓練模型的時候用的都是celebrate HQ此類的資料集,其包含的大部分都是歐洲人的面部圖片。

周博磊:深度生成模型中的隱藏語義

除了資料,演算法偏見也是原因之一,如何探索資料和演算法中存在的偏見,也是現在AI的熱點。因此我們便想著如何重建模型,然後避免這種偏見。

我們進行的操作和Style GAN模型裡面的操作類似,相對於之前的 DCGAN跟PGGAN,它是使用了多維度的隱變數,每一層裡面都引入了一個隱變數,然後同時呈現多個層次的隱變數,如此便能重建。

這樣會使得向量空間裡面編碼的資訊非常多。例如重建的隱空間的資料維度只有512,現在每一層都有了變數,那麼就是512X層數,比如說有14層,那就是512X14層,向量相當於大了14倍。

周博磊:深度生成模型中的隱藏語義

其實,這種直接最佳化不同層的隱變數的方法,是去年ICCV提出的Image2StyleGAN的方法。我們也對這種方法進行了測試:進行14X512維的隱空間最佳化之後,就可以比較好的把圖片進行重建。

周博磊:深度生成模型中的隱藏語義

但我們又發現一個問題:訓練過程好像是單純在“過擬合”一張圖片。由於生成器“只見過”人臉,因此我們用非人臉圖片進行了測試,例如把貓、臥室的圖片放進去,仍然有比較好的結果。

周博磊:深度生成模型中的隱藏語義

為什麼人臉生成器可以把一個非人臉的圖片“完美”重建出來?我們進一步進行了測試,發現重建過程完全是在“過擬合”。

具體操作過程是:我們把之前InterfaceGAN的操作的方法(改變隱空間)以及latent code進行應用,然後在小布什的人臉圖片上面進行操作,例如加上微笑,加上眼鏡,能發現此效果都非常差,這就說明重構圖片的時候完全是在“過擬合”。

周博磊:深度生成模型中的隱藏語義

其實,輸入圖片,逆對映出來的latent code並沒有語義性質,因此並不具有可編輯性。這是因為存在領域外(out of domain)的問題,也就是說我們解最佳化問題的時候,其實並沒有任何約束,有可能它並沒有回到原始的隱空間。

周博磊:深度生成模型中的隱藏語義

另外有一部分工作是為了增強GAN的推斷能力,引入了一些編碼器。換句話說,就是得到生成器之後,強行訓練編碼器,從而達到高效重建圖片的結果。類似的工作,例如Bigbigan,雖然它能夠把輸入圖片重構出來,但效果並不好。因為此方法本身並不是以重建效果好的圖片為目標,它是為了構建特徵學習的過程。

今年CVPR有一篇講述ALA的方法,它是在架構前面加上了自動編碼器,然後相對可以得到一個比較好的重建,但是其標識(identity)還是不能保留。

然後我們最近在ECCV上的一個工作是改進了編碼器,重建效果自然非常棒。但是仔細觀察,生成的圖片和原始的圖片也不是同一個人,所以他編碼器重建的再好,其實也沒辦法保證百分之一百進行重建。

周博磊:深度生成模型中的隱藏語義

所以我們提出了一個把兩者結合的方法,把編碼器當成一種約束(constraint),也就是編碼器約束最佳化(encoder constraint optimization)。

以前求解最佳化問題的時候,只是單純進行最佳化。現在的操作是:先生成圖片,然後重新編碼回去,最後將圖片的latent code進行重建。

周博磊:深度生成模型中的隱藏語義

我們在損失函式項中新增了約束,使得重建出來的latent code儘可能分佈在原始的領域(domain)。我們把這個方法稱為領域內逆對映(in domain inversion),因為有了正則項的存在,就使得重建出來的編碼受到約束,因此便能更好的保留原始語義空間或隱空間的語義特性。

所以,我們ECCV上面的一項工作提出了GAN逆對映的方法,與Image2styleGAN進行對比之後,發現重構效果是相差無幾,區別在於我們使用InterfaceGAN之後,新增約束的最佳化能夠極大改進其語義特徵。例如在進行改變小布什的年齡、增加微笑、戴上眼鏡等等操作之後,都比image2StyleGAN直接最佳化的效果要好。

3 可解釋因子的應用

周博磊:深度生成模型中的隱藏語義

以下動圖是一個簡單的 demo,對模型輸入的圖片都是真實的人臉,透過在隱空間裡進行重構,可以對這些圖片進行比較真實的編輯。

周博磊:深度生成模型中的隱藏語義

然後可以進行插入操作,如下動圖所示,可以生成一個漸變的人臉圖片。即可以調整不同人臉的語義特徵,從而實現從一個人臉到另一個人臉的生成過程。

周博磊:深度生成模型中的隱藏語義

根據上述方法,我們實現了一個有趣的應用:語義傳播(semantic diffusion),大致意思如下圖所示:橫軸是背景,可以看到有很多背景圖片,現在有一張前景的圖片,我們需要操作的是把Yann LeCun的正臉“貼”到背景圖片上去。

直接複製貼上不太現實,於是我們把直接把圖片放進模型的最佳化過程中,讓前臉重構,讓背景自由浮動,從而達到相容的效果。這是一個非常逼真的傳播(diffusion)過程,其本質是前臉的資訊逐漸傳播到背景。

周博磊:深度生成模型中的隱藏語義

我們另一個工作是探索圖片處理的應用,例如用GAN 逆對映進行上色、超分、去噪等操作。把訓練好的GAN當做圖片的先驗,然後整合到過程中去,會起到四兩撥千斤的效果,還能夠填充缺失的區域資訊。

周博磊:深度生成模型中的隱藏語義

還可以透過非監督的方法尋找隱空間裡面可控的因子,例如將其應用在卡通圖片上面。下圖(左)就是一個簡單的互動頁面,它本來只是生成一個卡通圖片,我們可以透過改變它不同的語義特徵、臉型、筆觸的大小、嘴巴的大小、眼睛的大小等等進行非常有意思的改變。這相當於把InterfaceGAN的方法用到了非監督的領域。

周博磊:深度生成模型中的隱藏語義

大多數情況下,訓練的圖片,例如油畫、國畫或者一些卡通圖片,其實並沒有標籤,那麼如何非監督的去尋找可解釋因子?這也是一個比較任何重要的問題。

以上介紹的所有工作,都已經開源。

開源地址:





來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69946223/viewspace-2725722/,如需轉載,請註明出處,否則將追究法律責任。

相關文章