李燕
(華北科技學(xué)院電子信息工程學(xué)院,北京,065201)
在模式識別與多媒體研究等相關(guān)計(jì)算機(jī)視覺領(lǐng)域,基于深度學(xué)習(xí)的卷積神經(jīng)網(wǎng)絡(luò)已經(jīng)成為近年來的最為新興、熱門技術(shù),憑借著簡潔、有效、易訓(xùn)練等優(yōu)勢迅速在圖像處理領(lǐng)域得到了廣泛的應(yīng)用[1],尤其是在人臉識別相關(guān)的領(lǐng)域,卷積神經(jīng)網(wǎng)絡(luò)的出現(xiàn)極大程度上提升了人臉識別和人臉屬性識別的準(zhǔn)確率和精確度,儼然已經(jīng)成為目前人臉領(lǐng)域的主流技術(shù)和最具前景的技術(shù)發(fā)展方向。作為神經(jīng)網(wǎng)絡(luò)另外一個方向的演變,對抗生成網(wǎng)絡(luò)初期其實(shí)是為了探究神經(jīng)網(wǎng)絡(luò)的內(nèi)部構(gòu)造原理。但隨著相關(guān)技術(shù)的不斷進(jìn)化,借助其可以生成逼真圖像的特性,深度卷積神經(jīng)網(wǎng)絡(luò)在圖像重建領(lǐng)域也體現(xiàn)出了很強(qiáng)的實(shí)用價值。生成對抗網(wǎng)絡(luò),是由深度學(xué)習(xí)領(lǐng)域的重量級人物Ian.Goodfellow在2014年新提出的深度學(xué)習(xí)模型,該模型一經(jīng)提出就收到了廣泛的關(guān)注和應(yīng)用[6]。但是GAN也存在不足,如網(wǎng)絡(luò)層數(shù)太淺,網(wǎng)絡(luò)能力有限[2-6]。除此之外,經(jīng)由大量嘗試證明GAN的訓(xùn)練還存在不夠穩(wěn)定的問題,該網(wǎng)絡(luò)經(jīng)常生成不出和我們預(yù)期相同或者類似的圖片。為解決這些問題,AlecRadford將CNN與GAN結(jié)合,提出了深度卷積生成對抗網(wǎng)絡(luò),將GAN中的生成器和鑒別器由兩個多層感知機(jī)替換為CNN,提高了樣本的質(zhì)量和圖像收斂的速度。
Generative Adversarial Network即學(xué)術(shù)界耳熟能詳?shù)腉AN,該網(wǎng)絡(luò)是由Ian Goodfellow首先提出,一經(jīng)問世就受到大家的廣泛關(guān)注,成為深度學(xué)習(xí)領(lǐng)域最熱門的東西,仿佛沒有什么東西是GAN做不出來的。首先我們要弄清楚什么是生成,其實(shí)生成就是構(gòu)造一個生成模型,然后讓其學(xué)習(xí)一些數(shù)據(jù),最后生成類似的數(shù)據(jù)。要讓計(jì)算機(jī)先看人臉的圖片,再來產(chǎn)生人臉的圖片。GAN是如何憑空捏造人臉表情的?我們必須明確一點(diǎn)這里的捏造并不是什么都沒有的盒子,而是由一些沒有意義的隨機(jī)數(shù)生成有意義的作品。生成器會根據(jù)隨機(jī)數(shù)據(jù)來生成有意義的數(shù)據(jù),而判別器會學(xué)習(xí)如何判斷哪些數(shù)據(jù)是真實(shí)數(shù)據(jù),哪些是生成數(shù)據(jù),然后將學(xué)習(xí)到的經(jīng)驗(yàn)反向傳給生成器,生成器能夠根據(jù)隨機(jī)數(shù)生成更真實(shí)的數(shù)據(jù)。計(jì)算機(jī)是怎樣把生成網(wǎng)絡(luò)和判別網(wǎng)絡(luò)巧妙地結(jié)合在一起的呢?為了使生成出的數(shù)據(jù)跟真實(shí)數(shù)據(jù)更接近,一方面要讓生成網(wǎng)絡(luò)學(xué)習(xí)圖像的權(quán)重參數(shù),結(jié)果就是要讓判別網(wǎng)絡(luò)判別不出生成圖片的真和假。這個過程就類似二人博弈的問題,最終生成模型的生成類似真實(shí)圖片的概率1/2,而判別網(wǎng)絡(luò)判別的概率是1/2。
一個判別模型,它必須要提高自己的能力以此確定樣本是來自模型分布還是來自數(shù)據(jù)分布。生成模型可以被認(rèn)為類似于一組偽造者,試圖制造仿品并在不被發(fā)現(xiàn)的情況下使用它,而鑒別模型類似于鑒定古字畫的權(quán)威專家,試圖檢測仿品。這個游戲的對抗促使兩隊(duì)改進(jìn)他們的造假能力和鑒別能力,直到仿冒品無法從真品中辨別出來。在這一系列不間斷的對抗過程中雙方能力都在不斷增強(qiáng)。在本論文中,我們研究了生成模型是怎樣通過一個多層感知器傳遞隨機(jī)噪聲進(jìn)而生成虛擬樣本的特殊情況,而且判別模型本身也是一個多層感知器。在這種情況下,我們可以只應(yīng)用表現(xiàn)不俗的反向傳播和dropout算法來訓(xùn)練兩個模型,并且只使用正向傳播從生成模型中提取樣本,這種方法的一大優(yōu)點(diǎn)是不需要近似推理或馬爾可夫鏈。生成器組成的生成模型以及判別器組成的判別模型組成了生成對抗網(wǎng)絡(luò)[7]。生成器和鑒別器兩者相互競爭的共同目標(biāo)是生成與訓(xùn)練中的數(shù)據(jù)點(diǎn)非常相似的數(shù)據(jù)點(diǎn),即本論文的目標(biāo)虛擬人臉表情,生成同一個人的不同表情,從而豐富我們的樣本庫。
生成對抗網(wǎng)絡(luò)的訓(xùn)練過程是:生成器從隨機(jī)噪聲或潛在變量中生成類似于真實(shí)數(shù)據(jù)的樣本,判別器對生成的數(shù)據(jù)和真實(shí)數(shù)據(jù)進(jìn)行判斷,并將結(jié)果反饋給生成器。同時對生成器和鑒別器訓(xùn)練,生成器接收反饋信息后,不斷調(diào)整權(quán)重參數(shù),直至達(dá)到納什均衡,而鑒別器不斷訓(xùn)練自己的鑒別能力。即生成器生成的數(shù)據(jù)與真實(shí)樣本幾近相同,鑒別器無法準(zhǔn)確辨別該數(shù)據(jù)是生成的數(shù)據(jù)還是真實(shí)的數(shù)據(jù)。下圖是對抗生成網(wǎng)絡(luò)結(jié)構(gòu)。
圖 1 對抗生成網(wǎng)絡(luò)結(jié)構(gòu)
當(dāng)模型是多層感知器時候,對抗性建??蚣茏钊菀讘?yīng)用。我們?yōu)榱肆私鈹?shù)據(jù)x上的生成器的概率分布Pg,我們定義了基于輸入噪聲變量的先驗(yàn)概率Pz(z),然后用G(z)表示到數(shù)據(jù)空間的映射;在G(z;θg)中G是一個可微函數(shù)表示為一個多層感知器和參數(shù)θg。我們還定義了第二個多層感知器D(x;θd)。D(x)表示x來自數(shù)據(jù)而不是Pg的概率。我們對D進(jìn)行訓(xùn)練,使其能夠最大限度地為來自G的訓(xùn)練示例和樣本分配的正確的標(biāo)簽。
簡單解釋該公式:
x表示來自樣本集中的真實(shí)的圖片,z表示輸入生成器中的噪聲。Ex~Pdata(x)表示樣本的分布,Ez~Pz(z)表示噪聲分布,通過一個數(shù)據(jù)空間的映射得到Pg,即生成器的分布,模型的最終目的即讓Pg盡可能擬合Px[6]。
D(x)表示D網(wǎng)絡(luò)判斷真實(shí)圖片是否是真實(shí)的概率,這是因?yàn)閤就是來自數(shù)據(jù)集的真實(shí)樣本,所以對于D來說,這個值越接近1越理想[6]。而D(G(z))是D網(wǎng)絡(luò)判斷G生成的圖片的是否為真實(shí)的概率。
G應(yīng)該希望自己生成的圖片“越接近真實(shí)越好”。也就是說,G希望D(G(z)盡可能的大,此時V(D,G)會變小,因此我們看到式子的最前面的記號是minG。D的能力越強(qiáng),D(X)應(yīng)該越大,D(G(X))應(yīng)該越小。這時V(D,G)會變大。因此式子對于D來說是求最大maxD[6]。
換句話說,D和G用值函數(shù)V(G;D)來進(jìn)行兩者博弈游戲。博弈的最終結(jié)果有唯一的特解的存在,即G可以生成非常接近輸入的圖片G(z)。對于D來說,它難以判斷G生成的圖片究竟是不是真實(shí)的,因此D(G(z))=0.5,D(G(X))=0.5。圖2是本次使用的流程。
圖 2 實(shí)驗(yàn)流程圖
圖 3 生成器模型
圖 4 判別器的結(jié)構(gòu)
(1)生成器的定義
下面對該模型進(jìn)行解釋:100表示生成網(wǎng)絡(luò)做了一次初始化,它代表一個噪聲向量,里面的值是沒有任何意義的,我們要把這100維的向量轉(zhuǎn)換成64×64×3的真實(shí)數(shù)據(jù)。首先要把100維的向量轉(zhuǎn)換成跟特征圖相似的東西,此時我們需要借助一個簡單的全連接層,將其變成一個維數(shù)更大的向量,然后對這個新的向量進(jìn)行reshape操作變成4×4×512特征圖格式,接著我們爭取把特征圖格式轉(zhuǎn)化成圖像格式,并希望特征圖的長和寬不斷擴(kuò)大最終擴(kuò)大到64。此時我們就需要使用一種叫做反卷積的方案,每經(jīng)過一次反卷積長和寬變?yōu)樵瓉淼?倍,在這個過程中特征圖的個數(shù)在不斷縮小。在實(shí)際寫代碼時我們只需要指定層的大小和反卷積的結(jié)構(gòu)計(jì)算機(jī)就可以自己學(xué)習(xí)權(quán)重,讓網(wǎng)絡(luò)進(jìn)行迭代和優(yōu)化。當(dāng)權(quán)重參數(shù)學(xué)習(xí)完成就可以進(jìn)行圖片生成。
(2)判別器的定義
首先我們輸入一張64×64×3的圖片,然后利用上面定義的卷積層,構(gòu)造深度卷積生成對抗網(wǎng)所需的鑒別器,圖像輸入卷積層,卷積層輸出特征映射個數(shù),輸出減少到原來的四分之一,卷積層的輸出大小分別為32×32、16×16、8×8、4×4。判別器其實(shí)就相當(dāng)于一個二分類器,這個二分類器對輸入圖片進(jìn)行判別若判為真則輸出為1,否則判為假輸出為0。
CNN網(wǎng)絡(luò)其實(shí)可以看做一個一個函數(shù)或者黑箱。當(dāng)輸入為一個二維像素陣列x,由于CNN的魯棒性和抗干擾能力非常強(qiáng),經(jīng)過平移、壓縮、加厚以及旋轉(zhuǎn)之后輸出的圖像依舊是輸入的圖像。對于我們?nèi)搜蹃碇v,識別這些圖片非常簡單,而對計(jì)算機(jī)而言它只能看到像素的陣列或者灰度圖里的+1和-1,+1代表亮部,-1代表暗部,所以對于計(jì)算機(jī)而言如何把它進(jìn)行數(shù)字特征提取是非常重要的。如果一個人臉上有幾萬個特征,若是用幾萬個卷積和去對原圖進(jìn)行處理,得到幾萬個featuremap,那么運(yùn)算量就會非常大,對于自動駕駛或者人臉識別要求毫秒級的運(yùn)算。例如馬路上躺著一個人,你要馬上判斷是否要繞開他,需不需要減速,那么這其中的運(yùn)算量非常大,時間上又來不及,所以需要我們把圖像進(jìn)行縮小,此時用到的就是池化,池化也稱下采樣。池化的原理就是把大矩陣化為二維矩陣,但是會丟失一些數(shù)據(jù),但這是在我們可接受的范圍內(nèi)的。池化分為兩種一種是maxpooling,另外一種是averagepooling。我們用大量圖片去訓(xùn)練模型,接著通過一種叫做反向傳播的方法把生成出的圖片跟真實(shí)的圖片進(jìn)行比較,比如是一只貓,而計(jì)算機(jī)卻將其識別為一只狗,接著進(jìn)行誤差計(jì)算,產(chǎn)生損失函數(shù)。我們的目標(biāo)就是講損失函數(shù)降到最低,對損失函數(shù)進(jìn)行求導(dǎo),然后找到它最小值,通過調(diào)節(jié)參數(shù)使損失函數(shù)達(dá)到最小。經(jīng)過不停的訓(xùn)練,不斷讓它學(xué)習(xí)貓的各種圖片,那么計(jì)算機(jī)自己就學(xué)會了采用哪些卷積和,接著全連接網(wǎng)絡(luò)中的每個神經(jīng)元的權(quán)重是多少,它自己就學(xué)會了。我們認(rèn)為是人為指定一個卷積和來識別人的面部表情的特征,其實(shí)并非如此,是通過計(jì)算機(jī)自己訓(xùn)練,它知道它要得到什么特征,而不需要人為給它指定。這就是深度學(xué)習(xí)強(qiáng)大的地方。
本次設(shè)計(jì)我們采用的是GitHub上的開源代碼來實(shí)現(xiàn)DCGAN。利用該代碼訓(xùn)練CelebA數(shù)據(jù)集,最終生成帶表情的人臉圖像。
本實(shí)驗(yàn)使用的數(shù)據(jù)為CelebA數(shù)據(jù)集[7]。CelebA數(shù)據(jù)集是由香港中文大學(xué)開發(fā)的一個大型人臉屬性數(shù)據(jù)集。它包含20多萬張名人頭像,每張都有40個屬性注釋。共訓(xùn)練5個epoch,每個epoch有3072張訓(xùn)練圖片,每個100步采樣生成器,最后可以得到155個生成器生成的測試圖表。您可以看到帶有歷元的生成器測試圖為0,步驟數(shù)也為0。查看歷元0和3000步的測試圖,經(jīng)過一輪的訓(xùn)練,生成器已經(jīng)能夠生成人類的基本帶有表情的面孔。然而,很明顯,生成的臉是相對畸形的,眼睛還沒有正確生成。大部分的頭發(fā)都被其他噪聲干擾。將訓(xùn)練好的discrimination networks用于特征提取,然后分類,和其他一些無監(jiān)督的效果進(jìn)行了比對,效果還不錯。
圖 5 標(biāo)記為A的人臉表情生成圖片集
經(jīng)過數(shù)天在實(shí)驗(yàn)室GPU上運(yùn)行程序,跑出來的標(biāo)記為A的人臉表情還是比較豐富,但是A人物的頭發(fā)還是失真得很嚴(yán)重,我們知道在DCGAN生成圖片的過程中受樣本的光照情況,遮擋情況等等的影響,結(jié)果生成的表情并不是很多,后期還需繼續(xù)查找原因進(jìn)行改善。
基于TensorFlow的深度學(xué)習(xí)框架,結(jié)合了深度卷積生成對抗網(wǎng)絡(luò),實(shí)現(xiàn)了虛擬人臉圖像的生成,取得了較好的效果。除了圖像生成外,深卷積生成對抗性網(wǎng)絡(luò)在圖像超分辨率領(lǐng)域的應(yīng)用也是值得考慮的。image超分辨率的機(jī)理是通過對低分辨率圖像的變換,輸出細(xì)節(jié)清晰豐富的高分辨率圖像。當(dāng)前圖像超高分辨率的問題是在轉(zhuǎn)換過程中丟失了高頻細(xì)節(jié),這與它的目的相反。然而,生成式對抗網(wǎng)絡(luò)能夠很好地解決這一問題,因?yàn)樯墒綄咕W(wǎng)絡(luò)能夠在訓(xùn)練過程中,然后輸出一個好的高分辨率的原版的形象。從結(jié)果來看,生成的人臉清晰度不高,希望在以后的研究中能夠?qū)δP瓦M(jìn)行完善以達(dá)到更好的虛擬人臉效果。