風格遷移、變裝模型這些改變圖像屬性的任務之前都是GAN的熱門話題。現(xiàn)在,OpenAI的研究者們提出了一種新的生成模型,能快速輸出高清、真實的圖像。以下是論智對OpenAI博客的編譯。
這篇文章介紹了我們的新成果——Glow,這是一個可逆的生成模型,其中使用了可反復的1×1卷積網(wǎng)絡。2015年,我們曾推出過NICE,它是一種針對復雜高維進行建模的深度學習框架。在可逆模型的基礎上,研究人員簡化了NICE的網(wǎng)絡結構,使模型能生成更加真實的高分辨率圖像,并支持高效的采樣,能發(fā)現(xiàn)可以用來控制數(shù)據(jù)屬性的特征。下面讓我們看看這個模型到底怎么玩:
這是年輕貌美的瑟曦。
黑化之后:
滄桑的瑟曦:
除此之外,你還能改變人物頭發(fā)的顏色、眼睛大小和胡子。接下來,還有另一種玩法,即混合兩張圖:
碧昂斯和小李子Mix一下,長這樣。
這是Glow模型的一個交互式Demo,感興趣的讀者可以移步官網(wǎng)體驗試試,支持上傳自己的照片調整臉部屬性和合成兩張圖片。
動機
以上是研究者Prafulla Dhariwal和Durk Kingma的面部表情特征變化圖。模型在訓練時并沒有被給予屬性標簽,但是它學會了一種隱藏空間,在其中特定的方向對應不同特征的變化,例如胡子的茂密程度、年齡、發(fā)色等等
生成模型與數(shù)據(jù)的觀察有關,就像面對許多人臉圖片,從中學習一種模型,了解數(shù)據(jù)是如何生成的。學習估計數(shù)據(jù)生成的過程需要學習數(shù)據(jù)中所有的結構,并且成功的模型可以合成和數(shù)據(jù)很相似的輸出結果。精確的生成模型可應用的場景非常廣泛,例如語音識別、文本分析合成、半監(jiān)督學習和基于模型的控制。
Glow是一種可逆的生成模型,也可以稱作“流式”生成模型,是NICE和RealNVP技術的擴展。目前,流式生成模型的關注度并不如GAN和VAE。
流式生成模型的幾個優(yōu)點有:
確切的隱藏變量推斷和對數(shù)相似度評估。在VAE中,模型智能大致推斷與數(shù)據(jù)點相對應的隱藏變量的值,而GAN根本就沒有能推測隱藏變量的編碼器。但是在可逆生成模型中,這一過程能精確地推算出來。這不但能輸出一個精確的結果,還能對數(shù)據(jù)的對數(shù)相似度進行優(yōu)化,而不是之前對數(shù)據(jù)的下限值優(yōu)化。
高效的推理和合成。自回歸的模型,例如PixelCNN同樣是可逆的,但是這種模型的合成結果很難平行化,通常在平行硬件上很低效。而類似Glow的流式生成模型不論在推理還是合成方面都很高效。
為下游任務提供了有用的隱藏空間。自回歸模型的隱藏層有著位置的邊緣分布,使其更難對數(shù)據(jù)進行正確操作。在GAN中,數(shù)據(jù)點經(jīng)常不能直接表現(xiàn)在隱藏空間中,因為它們沒有編碼器,可能無法支持數(shù)據(jù)分布。在可逆生成模型和VAE上就沒有這種情況。
對節(jié)省內存有重大意義。可逆神經(jīng)網(wǎng)絡的計算梯度應該是恒定的內存量,而不是線性的。
結果
利用這種技術,我們在標準上比較了RealNVP和我們的Glow,RealNVP是在這之前表現(xiàn)最佳的流式生成模型。結果如下:
在含有30000張照片的數(shù)據(jù)集上訓練之后,模型生成的樣本
Glow模型能生成非常逼真的高分辨率圖像,并且非常高效。模型在NVIDIA 1080 Ti GPU上只用130毫秒(0.13秒)就生成了一張256×256的照片。
在隱藏空間插值
我們還可以在兩個隨機面孔之間進行插值,利用編碼器在兩個圖片之間進行編碼,并從中間點中取樣。注意,輸入的是隨機面孔,并不是模型中的樣本,所以這也證明了模型可以支持完全的目標分布。
變臉過程十分流暢
在隱藏空間中處理
無需標簽,我們就可以訓練一個流式模型,然后利用學習到的隱藏表示進行下游任務。這些語義分布可以改變頭發(fā)的顏色、圖片風格、音調高低或者文本情感。由于流式模型擁有完美的編碼器,你可以編碼輸入并且計算輸入的平均隱藏向量。二者間向量的方向可以用來將輸入向該方向改變。
這一過程只需要少量的標記數(shù)據(jù),并且模型一訓練完就能完成。在此之前,用GAN做這些需要訓練一個單獨的編碼器,而VAE需要保證解碼器和編碼器適用于分布數(shù)據(jù)。其他類似CycleGAN直接學習表示變化的函數(shù),也需要重新訓練每一個變化。
# Train flow model on large, unlabelled dataset X
m = train(X_unlabelled)
# Split labelled dataset based on attribute, say blonde hair
X_positive, X_negative = split(X_labelled)
# Obtain average encodings of positive and negative inputs
z_positive = average([m.encode(x) for x in X_positive])
z_negative = average([m.encode(x) for x in X_negative])
# Get manipulation vector by taking difference
z_manipulate = z_positive - z_negative
# Manipulate new x_input along z_manipulate, by a scalar alpha in [-1,1]
z_input = m.encode(x_input)
x_manipulated = m.decode(z_input + alpha * z_manipulate)
用流式模型改變屬性的簡單代碼
進步之處
相比之前的RealNVP,我們的進步之處主要是一個可逆的1×1卷積,以及刪減掉其他元素,簡化了模型。
RealNVP架構由兩種圖層組成:具有棋盤蒙版的圖層和通道蒙版的圖層。我們去除了棋盤樣的圖層,簡化了結構。剩下的通道類型的蒙版起到以下作用:
在通道維度中改變輸入的順序
將輸入分成A和B兩部分,從特征維度的中部開始
將A輸入到一個較淺的卷積神經(jīng)網(wǎng)絡。根據(jù)神經(jīng)網(wǎng)絡的輸出線性地對B進行轉換
連接A和B
可以看到我們的1×1卷積在性能上有大大的提升
除此之外,我們取消了批歸一化,將它替換成激活歸一圖層。該圖層利用基于數(shù)據(jù)的初始化,簡單地轉換并縮放激活,該初始化在給定初始小批量數(shù)據(jù)的情況下將激活規(guī)范化。
訓練規(guī)模
我們的結構結合了多種優(yōu)化,例如梯度檢查點,可以讓我們在較大規(guī)模上訓練流式生成模型。我們使用Horovod輕松地將模型在多個機器上進行了訓練;文章開頭的Demo用了8個GPU。
未來方向
這篇研究表明,訓練流式模型生成真實的高清圖像是很有潛力的,并且經(jīng)過學習的隱藏表示可以很容易用于下流任務。我們對未來工作的方向有以下計劃:
1.在可能性上比其他模型更有競爭力
在對數(shù)相似度上,自適應模型和VAE的表現(xiàn)比流式模型要好,但是他們在采樣和精確推理上不如流式模型。未來我們會嘗試結合這幾種模型,以彌補不足。
2.改進結構,提高計算和參數(shù)效率
為了生成逼真的高分辨率圖像,人臉生成模型利用大約200M的參數(shù)和將近600個卷積層,訓練起來成本很高。但是更淺的網(wǎng)絡表現(xiàn)得又不好。使用自注意力結構或者進行漸進式訓練可能會讓訓練成本更便宜。
-
圖像
+關注
關注
2文章
1089瀏覽量
40535 -
深度學習
+關注
關注
73文章
5512瀏覽量
121410
原文標題:OpenAI提出能合成高清逼真圖像的模型:“我們和GAN不一樣!”
文章出處:【微信號:jqr_AI,微信公眾號:論智】歡迎添加關注!文章轉載請注明出處。
發(fā)布評論請先 登錄
相關推薦
評論