李燕
(華北科技學院電子信息工程學院,北京,065201)
在模式識別與多媒體研究等相關計算機視覺領域,基于深度學習的卷積神經網絡已經成為近年來的最為新興、熱門技術,憑借著簡潔、有效、易訓練等優勢迅速在圖像處理領域得到了廣泛的應用[1],尤其是在人臉識別相關的領域,卷積神經網絡的出現極大程度上提升了人臉識別和人臉屬性識別的準確率和精確度,儼然已經成為目前人臉領域的主流技術和最具前景的技術發展方向。作為神經網絡另外一個方向的演變,對抗生成網絡初期其實是為了探究神經網絡的內部構造原理。但隨著相關技術的不斷進化,借助其可以生成逼真圖像的特性,深度卷積神經網絡在圖像重建領域也體現出了很強的實用價值。生成對抗網絡,是由深度學習領域的重量級人物Ian.Goodfellow在2014年新提出的深度學習模型,該模型一經提出就收到了廣泛的關注和應用[6]。但是GAN也存在不足,如網絡層數太淺,網絡能力有限[2-6]。除此之外,經由大量嘗試證明GAN的訓練還存在不夠穩定的問題,該網絡經常生成不出和我們預期相同或者類似的圖片。為解決這些問題,AlecRadford將CNN與GAN結合,提出了深度卷積生成對抗網絡,將GAN中的生成器和鑒別器由兩個多層感知機替換為CNN,提高了樣本的質量和圖像收斂的速度。
Generative Adversarial Network即學術界耳熟能詳的GAN,該網絡是由Ian Goodfellow首先提出,一經問世就受到大家的廣泛關注,成為深度學習領域最熱門的東西,仿佛沒有什么東西是GAN做不出來的。首先我們要弄清楚什么是生成,其實生成就是構造一個生成模型,然后讓其學習一些數據,最后生成類似的數據。要讓計算機先看人臉的圖片,再來產生人臉的圖片。GAN是如何憑空捏造人臉表情的?我們必須明確一點這里的捏造并不是什么都沒有的盒子,而是由一些沒有意義的隨機數生成有意義的作品。生成器會根據隨機數據來生成有意義的數據,而判別器會學習如何判斷哪些數據是真實數據,哪些是生成數據,然后將學習到的經驗反向傳給生成器,生成器能夠根據隨機數生成更真實的數據。計算機是怎樣把生成網絡和判別網絡巧妙地結合在一起的呢?為了使生成出的數據跟真實數據更接近,一方面要讓生成網絡學習圖像的權重參數,結果就是要讓判別網絡判別不出生成圖片的真和假。這個過程就類似二人博弈的問題,最終生成模型的生成類似真實圖片的概率1/2,而判別網絡判別的概率是1/2。
一個判別模型,它必須要提高自己的能力以此確定樣本是來自模型分布還是來自數據分布。生成模型可以被認為類似于一組偽造者,試圖制造仿品并在不被發現的情況下使用它,而鑒別模型類似于鑒定古字畫的權威專家,試圖檢測仿品。這個游戲的對抗促使兩隊改進他們的造假能力和鑒別能力,直到仿冒品無法從真品中辨別出來。在這一系列不間斷的對抗過程中雙方能力都在不斷增強。在本論文中,我們研究了生成模型是怎樣通過一個多層感知器傳遞隨機噪聲進而生成虛擬樣本的特殊情況,而且判別模型本身也是一個多層感知器。在這種情況下,我們可以只應用表現不俗的反向傳播和dropout算法來訓練兩個模型,并且只使用正向傳播從生成模型中提取樣本,這種方法的一大優點是不需要近似推理或馬爾可夫鏈。生成器組成的生成模型以及判別器組成的判別模型組成了生成對抗網絡[7]。生成器和鑒別器兩者相互競爭的共同目標是生成與訓練中的數據點非常相似的數據點,即本論文的目標虛擬人臉表情,生成同一個人的不同表情,從而豐富我們的樣本庫。
生成對抗網絡的訓練過程是:生成器從隨機噪聲或潛在變量中生成類似于真實數據的樣本,判別器對生成的數據和真實數據進行判斷,并將結果反饋給生成器。同時對生成器和鑒別器訓練,生成器接收反饋信息后,不斷調整權重參數,直至達到納什均衡,而鑒別器不斷訓練自己的鑒別能力。即生成器生成的數據與真實樣本幾近相同,鑒別器無法準確辨別該數據是生成的數據還是真實的數據。下圖是對抗生成網絡結構。

圖 1 對抗生成網絡結構
當模型是多層感知器時候,對抗性建??蚣茏钊菀讘谩N覀優榱肆私鈹祿上的生成器的概率分布Pg,我們定義了基于輸入噪聲變量的先驗概率Pz(z),然后用G(z)表示到數據空間的映射;在G(z;θg)中G是一個可微函數表示為一個多層感知器和參數θg。我們還定義了第二個多層感知器D(x;θd)。D(x)表示x來自數據而不是Pg的概率。我們對D進行訓練,使其能夠最大限度地為來自G的訓練示例和樣本分配的正確的標簽。

簡單解釋該公式:
x表示來自樣本集中的真實的圖片,z表示輸入生成器中的噪聲。Ex~Pdata(x)表示樣本的分布,Ez~Pz(z)表示噪聲分布,通過一個數據空間的映射得到Pg,即生成器的分布,模型的最終目的即讓Pg盡可能擬合Px[6]。
D(x)表示D網絡判斷真實圖片是否是真實的概率,這是因為x就是來自數據集的真實樣本,所以對于D來說,這個值越接近1越理想[6]。而D(G(z))是D網絡判斷G生成的圖片的是否為真實的概率。
G應該希望自己生成的圖片“越接近真實越好”。也就是說,G希望D(G(z)盡可能的大,此時V(D,G)會變小,因此我們看到式子的最前面的記號是minG。D的能力越強,D(X)應該越大,D(G(X))應該越小。這時V(D,G)會變大。因此式子對于D來說是求最大maxD[6]。
換句話說,D和G用值函數V(G;D)來進行兩者博弈游戲。博弈的最終結果有唯一的特解的存在,即G可以生成非常接近輸入的圖片G(z)。對于D來說,它難以判斷G生成的圖片究竟是不是真實的,因此D(G(z))=0.5,D(G(X))=0.5。圖2是本次使用的流程。

圖 2 實驗流程圖

圖 3 生成器模型

圖 4 判別器的結構
(1)生成器的定義
下面對該模型進行解釋:100表示生成網絡做了一次初始化,它代表一個噪聲向量,里面的值是沒有任何意義的,我們要把這100維的向量轉換成64×64×3的真實數據。首先要把100維的向量轉換成跟特征圖相似的東西,此時我們需要借助一個簡單的全連接層,將其變成一個維數更大的向量,然后對這個新的向量進行reshape操作變成4×4×512特征圖格式,接著我們爭取把特征圖格式轉化成圖像格式,并希望特征圖的長和寬不斷擴大最終擴大到64。此時我們就需要使用一種叫做反卷積的方案,每經過一次反卷積長和寬變為原來的2倍,在這個過程中特征圖的個數在不斷縮小。在實際寫代碼時我們只需要指定層的大小和反卷積的結構計算機就可以自己學習權重,讓網絡進行迭代和優化。當權重參數學習完成就可以進行圖片生成。
(2)判別器的定義
首先我們輸入一張64×64×3的圖片,然后利用上面定義的卷積層,構造深度卷積生成對抗網所需的鑒別器,圖像輸入卷積層,卷積層輸出特征映射個數,輸出減少到原來的四分之一,卷積層的輸出大小分別為32×32、16×16、8×8、4×4。判別器其實就相當于一個二分類器,這個二分類器對輸入圖片進行判別若判為真則輸出為1,否則判為假輸出為0。
CNN網絡其實可以看做一個一個函數或者黑箱。當輸入為一個二維像素陣列x,由于CNN的魯棒性和抗干擾能力非常強,經過平移、壓縮、加厚以及旋轉之后輸出的圖像依舊是輸入的圖像。對于我們人眼來講,識別這些圖片非常簡單,而對計算機而言它只能看到像素的陣列或者灰度圖里的+1和-1,+1代表亮部,-1代表暗部,所以對于計算機而言如何把它進行數字特征提取是非常重要的。如果一個人臉上有幾萬個特征,若是用幾萬個卷積和去對原圖進行處理,得到幾萬個featuremap,那么運算量就會非常大,對于自動駕駛或者人臉識別要求毫秒級的運算。例如馬路上躺著一個人,你要馬上判斷是否要繞開他,需不需要減速,那么這其中的運算量非常大,時間上又來不及,所以需要我們把圖像進行縮小,此時用到的就是池化,池化也稱下采樣。池化的原理就是把大矩陣化為二維矩陣,但是會丟失一些數據,但這是在我們可接受的范圍內的。池化分為兩種一種是maxpooling,另外一種是averagepooling。我們用大量圖片去訓練模型,接著通過一種叫做反向傳播的方法把生成出的圖片跟真實的圖片進行比較,比如是一只貓,而計算機卻將其識別為一只狗,接著進行誤差計算,產生損失函數。我們的目標就是講損失函數降到最低,對損失函數進行求導,然后找到它最小值,通過調節參數使損失函數達到最小。經過不停的訓練,不斷讓它學習貓的各種圖片,那么計算機自己就學會了采用哪些卷積和,接著全連接網絡中的每個神經元的權重是多少,它自己就學會了。我們認為是人為指定一個卷積和來識別人的面部表情的特征,其實并非如此,是通過計算機自己訓練,它知道它要得到什么特征,而不需要人為給它指定。這就是深度學習強大的地方。
本次設計我們采用的是GitHub上的開源代碼來實現DCGAN。利用該代碼訓練CelebA數據集,最終生成帶表情的人臉圖像。
本實驗使用的數據為CelebA數據集[7]。CelebA數據集是由香港中文大學開發的一個大型人臉屬性數據集。它包含20多萬張名人頭像,每張都有40個屬性注釋。共訓練5個epoch,每個epoch有3072張訓練圖片,每個100步采樣生成器,最后可以得到155個生成器生成的測試圖表。您可以看到帶有歷元的生成器測試圖為0,步驟數也為0。查看歷元0和3000步的測試圖,經過一輪的訓練,生成器已經能夠生成人類的基本帶有表情的面孔。然而,很明顯,生成的臉是相對畸形的,眼睛還沒有正確生成。大部分的頭發都被其他噪聲干擾。將訓練好的discrimination networks用于特征提取,然后分類,和其他一些無監督的效果進行了比對,效果還不錯。

圖 5 標記為A的人臉表情生成圖片集
經過數天在實驗室GPU上運行程序,跑出來的標記為A的人臉表情還是比較豐富,但是A人物的頭發還是失真得很嚴重,我們知道在DCGAN生成圖片的過程中受樣本的光照情況,遮擋情況等等的影響,結果生成的表情并不是很多,后期還需繼續查找原因進行改善。
基于TensorFlow的深度學習框架,結合了深度卷積生成對抗網絡,實現了虛擬人臉圖像的生成,取得了較好的效果。除了圖像生成外,深卷積生成對抗性網絡在圖像超分辨率領域的應用也是值得考慮的。image超分辨率的機理是通過對低分辨率圖像的變換,輸出細節清晰豐富的高分辨率圖像。當前圖像超高分辨率的問題是在轉換過程中丟失了高頻細節,這與它的目的相反。然而,生成式對抗網絡能夠很好地解決這一問題,因為生成式對抗網絡能夠在訓練過程中,然后輸出一個好的高分辨率的原版的形象。從結果來看,生成的人臉清晰度不高,希望在以后的研究中能夠對模型進行完善以達到更好的虛擬人臉效果。