背景
基于生成對抗網絡(GAN)的動漫人物生成近年來興起的動漫産業新技術。傳統的GAN模型利用反向傳播算法,通過生成器和判别器動态對抗,得到一個目标生成模型。由于訓練過程不穩定,網絡難以收斂,導緻生成的圖像缺乏多樣性和準确性,甚至會産生模式崩潰。本文基于深度學習,參考相關實戰項目pytorch-book,學習網絡的訓練方法,采用經過标準化處理和分類的動漫人物面部圖像知乎使用者何之源分享的素材,訓練DCGAN,實作動漫人物圖像自動生成。在訓練過程中,控制實驗參數,進行定量分析和優化,得到可自動生成動漫人物圖像的生成器模型。主要工作如下:
- 設計DCGAN網絡模型。對課題中所涉及到GAN原理、優化器等技術進行分析,并根據DCGAN的基本原則設計面向動漫人物生成的神經網絡。
- 建立圖像樣本庫。采集40000張動漫人物圖像,按照比例随機分為訓練集和測試集,并利用資料集對DCGAN進行無監督訓練以及測試。
- 實作并訓練DCGAN網絡。使用Pytorch作為DCGAN的架構,利用Vidsom将圖像生成過程的可視化,完成目标網絡的構造以及訓練。在訓練過程中,控制實驗參數,進行定量分析和優化,得到一組高品質網絡參數。
背景及意義
随着二次元文化逐漸走進大衆視野,各種動漫作品所塑造的角色已經成為一種特殊的文化符号。但是,由于動漫本身複雜的性質,其對于制作成本,品質,創意都有較高的要求,導緻動漫行業頻頻出現投入高,收益低的現象。由于生成對抗網絡(GAN)在圖像生成領域和視訊生成領域具有巨大的發展潛力,許多研究者嘗試從GAN入手,實作動漫圖像的自動生成,為創作者帶來了靈感,還節省了巨額創作開支。
目前已有的動漫圖像生成方式主要分為兩種,第一種,是基于已有的真實人臉圖檔,進行人臉風格遷移,U-GAT-IT項目利用圖像處理将原始圖像内容與動漫風格相融合,實作動漫風格轉換,如圖1.1所示。雖然風格遷移技術已經有豐富研究成果,但有一些缺陷依然無法避免,例如:生成的卡通圖像表情單一、面部特征畸變、網絡結構複雜等問題。

圖 1.1(a)(b) 熱力圖 (c)動漫圖像
第二種方法,是将已有的動漫人物圖像,輸入到訓練好的生成對抗神經網絡模型中,對動漫圖像的面部進行特征提取,最後訓練出一組網絡模型,實作自動生成新的動漫人物圖像,如圖1.2所示。DCGAN模型一般為五層,相較于傳統的GAN模型更加穩定,生成的圖像也更具有多樣性,更能滿足創作者的需求。

圖 1.2自動生成的動漫人物圖像
1、基于GAN的圖像處理研究現狀
深度學習領域在近幾年取得了重大突破,其中大部分研究成果都基于感覺技術,計算機通過模仿人類的思維方式,感覺物體、識别内容。生成對抗網絡的理念由Goodfellow于2014年提出的,它的發展曆程隻有六年,卻對人工智領域帶來了極大的沖擊。
GAN的博弈過程,就是使用生成器制造的資料分布來拟合真實的資料分布。設定是一個生成動漫圖檔的網絡,接收一個随機的噪聲,生成動漫圖檔并輸出。設定為判别網絡,輸入一張動漫圖檔,判别器可以計算出該圖為生成的或真實圖檔的機率。兩者分别根據傳回的結果反向更新網絡,互相抗衡,動态變化最後達到納什均衡。
基于GAN性能的優越性,該模型逐漸被運用到圖像處理領域的各個方向,其中包括圖檔轉換、圖像修複、風格遷移、圖像生成等。例如:2016年Phillip Isola等人設計的pix2pixGAN[4]模型,可以将語義圖檔轉換為街景和建築的照片、素描圖轉彩色圖檔等,在圖像轉換領域實作了重大突破。
原始的GAN網絡雖然在2014年才首次提出,但其擴充速度迅猛,産生了大量衍生網絡,如:DCGAN、SGAN、ACGAN等。2015年Mattya首次提出了chainerGAN,通過DCGAN實作動漫人物生成,但Chainer架構并未得到大範圍應用。随後,Jie Lei等人在2017年發表了Animegan,該項目使用GAN架構,提出了三種新的損失函數:灰階風格loss、灰階對抗loss、色彩重構loss,将各類現實場景下的圖像轉化為動漫風格的圖像,例如自然風景、道路街景的轉換。但遺憾的是,這些項目對于非計算機領域的愛好者使用具有一定難度,産生了局限性。
2017年,複旦大學和CMU的學生共同釋出了一項名為MakeGirlsMore的動漫人物生成項目,釋出後在Github受到廣泛關注。該項目使用 React.js作為頁面基本架構,為了提高項目的實用性,開發者将Chainer模型轉化為基于WebAssembly的Java 模型。使用者可以在浏覽器的界面上設定動漫人物的相關參數,例如:眼睛顔色、面部表情、發型等資訊,實作動漫人物的自動生成。
1.2、訓練方案
首先,建立圖像樣本庫需要大量動漫圖像,可使用Python在動漫素材相關網站爬取或使用網絡上已有的資料集,按照固定比例劃分訓練集和測試集,并對樣本進行标準化處理,使圖像大小保持,每一張圖檔擁有唯一ID。
其次,選擇CNN作為DCGAN的基礎網絡,對CNN的池化層和全連接配接層進行調整。DCGAN是一種深度卷積網絡,可以實作目标特征提取以及圖像分類。在定義DCGAN中的生成網絡和判别網絡時,通過增加ReLU、Sigmoid等激活函數用于參數處理、圖像分類等工作。
在訓練網絡之前,使用Pytorch作為架構,Python作為程式設計語言完成代碼編寫,利用Adam優化器最小化損失函數,優化程式調整超參數。訓練網絡時,使用Visdom實作訓練過程的可視化,通過控制學習率、疊代次數、訓練比例等參數,設定多組對照實驗,觀察實驗結果并利用測試集進行多次測試。
将多組實驗結果進行對比分析,可得到一組最優網絡參數,利用訓練好的目标網絡模型,便可輸出多張不同的動漫圖像,技術路線如圖1.3所示:
圖1.3 技術路線圖
2 神經網絡及GAN相關技術介紹
2.1、神經網絡相關概念
計算機網絡中的神經元是神經網絡基本組成機關,它的結構參考了生物神經元。1943年McCulloch等人提出了神經元模型M-P。對于神經網絡的發展有着重要的影響。M-P抽象模型如圖2.1所示:

圖2.1 神經元結構模型
結合圖2.1來看,神經元的輸入輸出關系用有向箭頭來表示,輸入信号可以用Xi表示,輸出用Y來表示, Wi表示權重。多個神經元可以通過設定的連接配接關系組合成為神經網絡。
目前,神經網絡根據工作原理可以分為人工神經網絡和生物神經網絡,在計算機領域中,人工神經網絡的原理是利用計算機模拟大腦的工作方式。下圖2.2展示了神經網絡主要類别,本文的DCGAN模型就是基于多層神經網絡CNN實作的。

圖2.2 神經網絡主要類别
單層感覺器模型前饋神經網絡最經典的模型,該模型與1957年由Frank Rosenblatt提出,可實作二類線性分類。将神經元節點添加在網絡的輸入、輸出位置,作為網絡的輸入單元和輸出單元。輸入單元的功能是傳輸資料,輸出單元實作對上一層的輸入進行計算功能。下圖2.3為第一代神經網絡感覺模型:

圖2.3 第一代神經網絡模型
由于第一代神經網絡模型不能适用于處理異或問題,僅局限于線性可分問題。是以直至20 世紀 80 年代中期,分布式并行處理(Parallel Distributed Pro-cessing ,PDP)模型開始受到廣泛關注。反向傳播算法也逐漸成為 PDP 模型的主要學習算法這時,神經網絡才又開始引起人們的注意,并重新成為新的研究熱點[7]。第二代神經網絡結構也應運而生,如圖2.4所示:

圖2.4 第二代神經網絡結構圖
2006年Geoffrey Hinton提出了深度網絡,通過大量資料訓練神經元間的權重,讓整個網絡按照最大機率來生成資料,是一種機率生成模型,能夠通過學習表示高階抽象的複雜函數,可以使用它來識别特征、分類資料、生成資料等。
▐ 卷積神經網絡
卷積神經網絡(convolutional neural network,CNN)是指至少在網絡的一層中使用卷積運算來代替一般的矩陣乘法運算的神經網絡[18]。第一個卷積神經網絡是Alexander Waibel在1987年提出的時延神經網絡(TDNN),但是直到2012年ImageNet競賽之前,CNN才重新走進人們的視野。目前常用的CNN結構是由多個卷積層、池化層、全連接配接層組合構成的。如圖 2.5 所示

圖2.5 神經網絡結構圖
卷積層主要通過卷積核進行圖像局部特征提取,其神經元按照寬度,高度和深度的排列方式,适用于彩色圖像的RGB三色通道結構,是以它的排列方式又稱為三維排列。避免了傳統的感覺器模型緯度較低的問題,可以更好地生成于高分辨率的圖像,卷積層的各個參數設定影響卷積神經網絡的性能,網絡的精度和卷積層數呈正相關。
激活層一般常使用ReLU激活函數,它可以緩解梯度消失問題,通過将特征圖映射到新的特征空間,提高模型魯棒性、非線性表達能力。
池化層的主要作用是進行特征選擇。池化層可以通過下采樣過程,對于特征圖進行融合和降維,相較于卷積層降低了計算量,避免了資訊備援。常用最大池化法和平均池化法。
全連接配接層用于将前一層輸出的局部特征,重新連接配接成完整的圖,可以将卷積神經網絡的尾部重新拟合,減少特征資訊的損失。
▐ 卷積運算
卷積(Convolution)的過程是在圖像每個位置進行線性變換映射成新值的過程。本節主要讨論卷積運算在圖像處中的運用。卷積運算主要是通過特征提取器(濾波器)對圖檔進行特征提取,例如圖像的線條、結構等,降低深層網絡模型的複雜度。其下列公式2.1、2.2可表示多層神經,上下層之間的關系:


上式2.1、2.2中有幾個重要參數,W1:卷積前圖像的寬度;W2:卷積後特征圖的寬度;H1:卷積前圖像的寬度;H2:卷積後特征圖高度 ;S:步長(Stride),卷積核在滑動時的間隔;F:filter的寬度;P:零補充(Zero Padiding),在原始圖像兩端補零的圈數。
下圖2.6是一張大小的原始圖檔,設定經過卷積操作後,得到一張大小的特征圖像的部分過程,圖2.6為原始輸入圖像,綠色部分為卷積核,藍色圖像為目标圖像,為卷積後圖像長度,圖2.7中的值可以通過綠色部分的運算。

卷積後圖像特征圖的長度為:

運算後的取值為:

通過以上運算過程,可以總結出,卷積運算就是将高維資料映射到低維資料,而逆卷積運算就是卷積運算的相反操作,将低維資料映射到高維資料。
動漫圖像生成網絡設計
▐ DCGAN設計原則
DCGAN目前是GAN在實際工程實踐中被采用最多的衍生網絡,為了提高圖像生成品質,增強其穩定性,許多研究學者嘗試進行優化,并提出了四點設計原則,本課題中DCGAN的生成器和判别器的設計是基于該原則實作,下面将進一步闡述它們之間的關系。
(1)卷積層代替池化層
池化操作會使卷積核在縮小的特征圖上覆寫了更大的圖像視野,但是對網絡性能的優化效果較小,使用卷積層代替池化層,讓網絡自動選擇篩去不必要資訊,學習上采樣和下采樣過程,提高計算機運算能力。
(2)去掉全連接配接層
全連接配接層一般添加在網絡的末層,用于将圖像特征進行連接配接,可以減少特征資訊的損失,但是由于其參數過多,會産生過拟合、計算速度降低等問題。由于面部圖像特征提取的感受野範圍較小,不需要提取全圖特征,是以為了避免上述問題,本項目中網絡模型去掉了全連接配接層。
(3)批量歸一化
本課題中的生成器和判别器都是五層神經網絡,每一層輸入的資料的複雜度都會逐層遞增,使輸出資料的分布發生變化,對網絡參數的初始化和BP算法的性能産生影響。将資料進行批量歸一化(Bach Normalization,BN),可以使輸出的資料服從某個固定資料的分布,把資料特征轉換為相同尺度,進而加速神經網絡的收斂速度。
(4)激活函數
激活函數(Activation Function)具有連續可導的特性,可以使神經網絡進行非線性變化,通過對數值優化來學習網絡參數,提升網絡的擴充性。本課題的生成器和判别器均為五層網絡模型,計算量較大,每一層的激活函數選擇需要滿足高計算效率和訓練穩定兩點,其導函數的值域分布合理。
基于以上原則,在DCGAN的生成器添加了ReLu函數、Tanh函數,判别器中添加了LeakyReLu函數和Sigmoid函數,如下内容将對這四個激活函數進行的簡單介紹。
Sigmoid函數是一種兩端飽和型函數,取值範圍在0∼1之間,Sigmoid函數定義如公式3.1所示:

下圖3.1是Sigmoid的函數圖像,它以坐标軸原點0為分界,輸入值變大,輸出結果接近于1,輸入值減小,輸出結果接近0,是以一般用它做輸出端,解決二分類問題。這種特性也存在一定弊端,例如,神經網絡訓練結果輸出恒大于零,并且當輸入資料為極大,極小值時,Sigmoid函數梯度無限趨近于0,不利于神經網絡的反向傳播。

圖3.1 Sigmoid函數圖像
Tanh函數的圖像也是S型,一般情況下Tanh的收斂速度都優于Sigmoid函數,它可以避免出現均值不為零的情況,公式如3.2所示:

由函數圖像3.2可得,它的值域為(0,1),DCGAN網絡在生成器的輸出層添加Tanh函數,有利于圖像色彩覆寫。

圖3.2 Tanh函數圖像
Relu激活函數是一種左飽和的激活函數。它的計算效率較高,一般常用于隐層神經元輸出,在近幾年被廣泛用于訓練多層神經網絡模型,其函數公式3.3所示:

由ReLU函數圖3.3可知,導數在x>0時為1,x<0時為0,可以提高神經網絡的收斂速度。但是ReLU也存在一些問題,例如“死亡ReLU”,在訓練時,如果有一個資料較大的梯度流通過ReLu神經元,導緻參數更新出現問題,資料分布被打亂,這個神經元的梯度保持為0,且無法對任一資料進行激活操作。
圖3.3 ReLU函數圖像
LeakyReLU函數可以解決“死亡ReLU”現象,是基于ReLU函數的基礎上提出的,函數公式如3.4所示:

如圖3.4所示,當小于0時,給增加一個斜率,取值一般較小,避免了ReLU在負半軸訓練時停滞的問題。

圖3.4 LeakyReLU函數圖像
▐ DCGAN網絡結構
DCGAN模型由生成網絡G與判别網絡D組成,網絡結構均為五層,生成網絡的接受一個随機輸入的噪聲,通過該噪聲生成一張目标圖像;判别網絡接受一張圖像,對該圖像做出判斷後,計算出一個機率值,若該圖像來源為生成網絡,則輸出0,若該圖像來自真實的資料分布,則輸出為1。兩者根據回報的結果,不斷更新自己的參數,直至達到納什均衡。
▐ 生成網絡和判别網絡詳細設計
生成器網絡結構
生成模型的網絡結構一共有五層,通過上采樣方法生成大小的圖像,它的主要結構如圖3.6所示:

圖3.6 DCGAN的生成器網絡結構圖
生成器整個網絡結構沒有池化層,輸入一個服從均勻分布的nz次元的噪聲,神經網絡根據輸入的向量資訊,分步擷取輸入圖像的特征資訊,例如:線條、風格等,随後根據網絡的深度,不斷優化圖檔的細節。
輸入一張的圖檔,根據需要的特征圖大小設定相應的卷積核,卷積核的大小影響了生成網絡的可學習空間特征值的大小。在代碼中使用nn.Sequential()函數可以根據傳入的次序,将卷積、激活、池化等按照順序加入該子產品中,在建構完網絡層後,自動調用forward方法。在除了輸出層之外的每一層,加上批歸一化(BN)處理,緩解模型崩潰問題。根據每層網絡結構的需求,使用對應的激活函數,最後,輸出一個像素的3通道RGB圖像。具體的層次結構如下表3.1所示:

表3.1 DCGAN生成模型層次結構
Layer1是輸入層,輸入随機噪聲,将Stride設定為1,将Padding設定為0。接下來,通過ConvTranspose2d()函數求逆卷積,并在BN層對資料進行批量歸一化處理,使用ReLU激活函數加速收斂,輸出對應的特征映射圖;
Layer2:将Stride設定為2,将Padding設定為1,添加BN層将資料批量歸一化處理,使用ReLU激活函數加速收斂,輸出對應的特征映射圖;
Layer3:将Stride設定為2,将Padding設定為1,添加BN層将資料批量歸一化處理,使用ReLU激活函數加速收斂,輸出對應的特征映射圖;
Layer4:将Stride設定為2,将Padding設定為1,添加BN層将資料批量歸一化處理,使用ReLU激活函數加速收斂,輸出對應的特征映射圖;
Layer5:輸出層,将Stride設定為3,将Padding設定為1,使用Tanh作為激活函數,輸出對應的圖像。
生成器代碼結構圖如圖像3.7所示:

圖3.7生成器代碼結構圖
判别器網絡結構
判别模型的網絡結構一共有五層,采用下采樣方法。整個網絡結構沒有池化層,采用LeakyReLU作為激活函數,最後,通過一個全連接配接層輸出判别結果,範圍為0∼1,表示輸入圖像屬于真實樣本還是由生成器所生成的圖像,它的結構如圖3.8所示:

圖3.8 DCGAN的判别器網絡結構圖
判别器中也添加了BN層,并且每一層都使用激活函數進行非線性處理,具體的層次結構如下表3.2所示:

表3.2 DCGAN判别模型層次結構
Layer1:輸入層,首先輸入圖檔,Stride設定為1,将Padding設定為0。通過Conv2d()函數求卷積,接下來使用LeakyReLU()激活函數,優化網絡收斂速度;
Layer2:輸入圖像,Stride設定為2,将Padding設定為1,添加BN層将資料批量歸一化處理,使用LeakyReLU()激活函數加速收斂;
Layer3:輸入圖像,Stride設定為2,将Padding設定為1,添加BN層将資料批量歸一化處理,使用LeakyReLU()激活函數加速收斂;
Layer4:輸入圖像,Stride設定為2,将Padding設定為1,添加BN層将資料批量歸一化處理,使用LeakyReLU()激活函數加速收斂;
Layer5:輸出層,Stride設定為3,将Padding設定為1,使用sigmoid()函數輸出機率,表示圖像的真實性。
綜上,可以看出這兩個網絡模型的Padding、Stride等設定幾乎相同,整體的網絡結構是對稱,隻是各層使用的激活函數有差異。
▐ 損失函數
損失函數是一種非負實數函數,可以評估模型的預測值與真實值不一緻的程度。兩者差距減少,機率分布越接近,差距增加,機率差異越高,在Pytorch中可以通過導入torch.nn包來使用。Pytorch中提供許多損失函數,每一種函數都有其特性,例如:MSELoss是一種均方誤差損失函數,使用梯度下降算法,一般常用于解決股票預測、房價預測等回歸類問題;SmoothL1Loss是一種穩定的損失函數,也被用于解決回歸問題,它的函數曲線光滑可以避免梯度爆炸的問題;BCELoss是CrossEntropyLoss的一個特例,常用于解決分類問題。在本課題中我們需要,判斷樣本的輸出是真實圖檔還是生成圖檔,是以本課題選擇BCELoss作為損失函數,它在 PyTorch 中的定義如公式2.1所示:

由于生成網絡和判别網絡的輸出層的激活函數分别為Than函數和Sigmoid函數,兩者都是S型函數,其函數特性會導緻反向傳播算法收斂速度降低,使用BCELoss函數後,解決了因sigmoid函數導緻的梯度消失問題。
▐ Adam優化器
在DCGAN的訓練過程中,可以通過優化器最小化損失函數,一般分為一階優化算法和二階優化算法。本課題選用Adam優化程式調整超參數,它結合了 AdaGrad 和 RMSProp 算法最優的性能,不僅可以計算每個參數的自适應學習率,還可以通過訓練資料的不斷疊代使網絡權重自動更新,相較于其他幾種算法而言Adam算法實作簡單、對計算機資源占用率較低,收斂速度也更快。
Adam算法有一些重要參數,其中params表示用于優化的可以疊代參數或定義參數組;lr表示學習率,可以調節權重的更新比例,影響網絡的收斂速度,在Pytorch源碼中定義如下:
torch.optim.Adam(params,lr=a,betas=(b,c),eps=d, weight_decay=e)
本文基于Adam優化器的預設參數做出改進,采用一種動态調整學習率的方法,改善訓練過程中産生的圖像模糊,模式崩塌,損失函數震蕩明顯等問題,詳細步驟在網絡訓練部分闡述。
動漫圖像生成實戰
本章首先将幾種常用的開源架構進行對比分析,選擇了最适用于本實驗需要的開源架構Pytorch,并對可視化工具Visdom的功能進行說明。接下來,較長的描述了網絡訓練流程,對各組實驗生成的圖像和Loss函數進行了分析,對傳統的DCGAN網絡訓練參數提出了改進,針對相關問題提出優化方案。
▐ 實驗環境搭建
深度學習架構Pytorch
随着各類開源深度學習架構的不斷更新疊代,大規模的深度學習模型得到了極大的簡化,促進了圖像處理、NLP、語音識别等技術的發展。本課題的核心功能是自動生成動漫圖像,近幾年大火的TensorFlow、Pytorch等架構都可用于處理圖像類問題。
TensorFlow架構屬于靜态計算圖,生成圖像後無法改變,在初始化時需要考慮到所有的可能性,對計算機配置要求高。在代碼中,靜态圖不支援基本的python文法,缺乏靈活性,不适用于研究性學習。
由于Pytorch架構的設計思想基于動态計算圖,它的 API的設計具有極高的通用性,源碼直覺簡潔,易于了解,支援python的條件判斷、循環等基本文法,可以動态執行并且調試友善。基于它的高效性、易用性,本課題選Pytorch作為深度學習架構。
可視化工具Visdom
可視化工具可以為我們實時提供程式運作過程中各類資料變化情況和訓練效果。Visdom是一款輕量級的可視化工具。适用于Pytorch架構下的圖像展示,支援Python語言,可繪制多種圖形,例如:熱力圖、地理圖、自定義圖像。
Visdom的UI可視化架構主要由環境和窗格組成。一般預設使用main環境,不同環境之間互相獨立。窗格相當于一個容器,支援多種圖像類型,一個環境中可以建立多個窗格。使用者通過建立一個自己的繪圖環境,啟動浏覽器視窗,便可以實時檢視圖像資料,這些圖像可以縮放、儲存、動态更新。
基于Visdom具有輕量、實用性、靈活性的特點,本課題選擇它作為可視化工具,繪制Loss函數和生成圖形變化過程,便于分析資料,調整優化器和網絡訓練參數。下圖4.1展示了在Visdom中網絡訓練過程和Loss函數。

圖4.1 Visdom可視化展示
綜上,選用第三方架構為Pytorch,使用Python完成代碼編寫,通過Visdom實作圖像生成過程的可視化,使用樣本庫對網絡進行訓練,實驗所需的環境和軟體的詳細資訊在下表4.1所示:

表4.1 實驗環境
▐ 訓練過程
1、建立圖像樣本庫
圖像樣本庫内容為動漫人物面部特征圖檔,可通過爬蟲擷取大量原始動漫人物形象素材後,使用opencv工具将圖檔進行剪裁,僅留出動漫人物面部圖像,本項目使用知乎使用者何之源提供的已處理好的動漫圖像樣本庫,按照1:1随機劃分為訓練集和測試集。
- 訓練集包含20000張動漫人物圖像,圖像格式為JPEG,分辨率為3✖️96✖️96,每張圖像的檔案名是一個唯一的id;
- 測試集包含20000張動漫人物圖像,圖像格式為JPEG,分辨率為3✖️96✖️96,每張圖像的檔案名是一個唯一的id,樣本參數圖4.1:

圖4.1 圖像樣本參數

圖4.2 圖像樣本庫(部分)
2、超參數設定
為了證明各參數設定對網絡訓練效果的影響,在不同的對照組中按照比例設定參數。其中,G代表生成器在機關周期的訓練次數,D代表判别器機關周期的訓練次數,LrG表示生成器學習率,LrD表示判别器學習率,Epcho表示總訓練周期,BatchSize為一次疊代時輸入的樣本數量,經過多次實驗與測試,選取了以下4組具有代表性的實驗參數用于實驗結果分析,如下表4.2所示:

表4.2 實驗參數
3、訓練網絡
訓練DCGAN時,我們需要分别固定生成器和判别器。将生成器輸出的動漫圖檔,與樣本庫所提供的動漫圖檔,輸入到判别器中,并利用sigmoid函數對這兩種圖像進行分類。生成器可以根據傳回的結果,不斷反向調整和優化參數,進而使生成的動漫圖像更加逼真,接近真實圖像。
判别器的輸入是一張動漫人物圖檔,計算出這張圖檔是真實圖檔的機率後,用Sigmoid函數将結果進行處理,使其輸出值範圍為0∼1之間。我們可以根據判别器的計算結果,來量化它的辨識能力,根據回報的結果,不斷優化,進而使它對真實的動漫圖像和生成的動漫圖像的判别結果更加準确。
這兩個過程交替重複,當達到指定的訓練次數後,便可儲存最後的網絡模型,并檢驗訓練效果,不斷改進,基本的訓練流程如下圖所示:
圖4.3 DCGAN動态博弈過程
4、訓練結果展示與分析
由于此次DCGAN網絡模型的主要功能是生成動漫人物圖像,主要根據生成圖形的色彩、清晰度、動漫人物面部完整性作為評價标準,用人眼主觀對圖像效果進行評價,Loss函數用于對網絡模型收斂程度的判定名額。
(1)當訓練次數比例G:D=5:1,G&D Learning rate=0.0002,batchsize=128,訓練200個周期時,DCGAN的第1、49、99、199個周期的圖像效果如下圖所示:


圖4.4 實驗一生成圖像對比

圖4.5 實驗一生成器和判别器損失函數圖像
以上實驗結果分析可知,随着訓練周期的提升,DCGAN生成的圖像品質不斷提高,但動漫人物面部存在畸變,圖像整體色彩發灰的問題。生成器得Loss函數數值振蕩明顯,網絡收斂效果較差,而判别器的Loss函數數值整體低于生成器,表面判别器的網絡收斂更快,能力更強。
(2)當訓練次數比例G:D=1:5,G&D Learning rate=0.0002,batchsize=128,訓練200周期,DCGAN的第1、49、99、199個周期的圖像生成效果如下圖所示:


圖4.6 實驗二生成圖像對比

圖4.7 實驗二生成器和判别器損失函數圖像
以上實驗結果分析可知,随着訓練周期的提升,DCGAN生成的動漫人物圖像趨于同化,産生了模式坍塌,生成器輸出一些不易被識别的圖像,大部分結果都與我們預期的圖像不符合。生成器的Loss函數值雖然比較低,但從訓練中期開始上升。本實驗生成的圖像與實驗一的圖像進行對比可得,生成器訓練次數小于判别器訓練次數時,網絡訓練不穩定。
(3)當訓練次數比例G:D=1:1,G&D Learning rate=0.0002,batchsize = 128,訓練第1、49、79、99個周期時,動漫人物圖像的生成效果如下圖所示:


圖4.8 實驗三生成圖像對比

圖4.9 實驗三生成器和判别器損失函數圖像
由以上實驗圖像可知,當訓練次數比例G:D=1:1時,在第49個訓練周期時已經産生較為完整的圖像,且圖像細節優于前面兩組實驗,但是圖像依然存在色調偏灰的問題,生成圖像無法滿足需求。生成器的損失函數一直處于增長狀态,網絡不斷反向更新參數,收斂效果較差。
(4)當訓練次數比例G:D=1:1,G Learning rate=0.0002,D Learning rate = 0.00005,Batchsize=128,訓練第1、49、79、99個周期時,動漫人物圖像的生成效果如下圖所示:


圖4.10 實驗四生成圖像對比

由以上實驗圖像可知,當訓練次數比例G:D=1:1時,調整生成網絡和判别網絡學習率的比值,可以 使DCGAN生成的圖像細節、色彩都更好。雖然圖像在第99個訓練周期出現了模式坍塌,但前98個周期的圖檔品質都較好,并且它們的損失函數在訓練中期“此消彼長”,生成器的學習率在5以下,判别器的學習率基本從40個訓練周期後變降到了0.5以下。後期可以通過動态調整判别器的學習率,減緩模式坍塌的發生。
通過上述實驗結果對比可以得出,實驗四設定的訓練參數可以獲得較好的動漫人物圖形,其色彩、細節都強于其他組實驗,并且損失函的數值變化狀态較為均衡,是以選用第四次實驗的第97個訓練周期輸出的網絡作為目标網絡。
7、DCGAN模型測試
使用同一組超參數對測試集進行訓練,圖像生成效果與訓練集基本一緻,使用第四次實驗的第97 個訓練周期DCGAN模型進行測試,選取4組圖像,如下圖所示:




圖4-12 生成器輸出圖像結果
觀察以上實驗結果可以得出,生成器所輸出的圖像風格符合動漫人物風格的要求,但細節上還存在缺陷。從動漫人物面部圖像的完整性來看,人物的發型、面部輪廓的特征全都覆寫;約11%的圖像存在眼睛不清晰、不完整的問題;約38%的圖像存在嘴巴不完整的問題。
從動漫人物圖像的色彩性來看,圖像的“發灰”問題已經解決,生成的圖像色彩與真實圖像已經非常接近。由于動漫人物圖像的特殊性,樣本的面部細節與真實世界人類的面部特征存在較大差異,動漫人物的鼻子、嘴巴等特征都是由簡單線條構成,具體的形狀、顔色資訊不夠豐富,導緻訓練效果低于其它面部特征,可以通過收集面部細節更精細、面部特征更明顯的圖像樣本改善這一問題。
通過GAN模型實作動漫圖像自動生成的研究工作,在本文之前已經取得一定的研究成果。一種是通過風格遷移,将真實的人物圖像轉換為動漫風格;另一種是将已有的動漫人物圖像,輸入DCGAN模型中,對動漫圖像的面部進行特征提取,最後訓練出一組網絡模型,輸出動漫人物圖像。本課題基于第二種方案,不同之處在于優化了預設的參數設定和傳統的訓練方式,在更短的訓練周期内獲得細節更完善、色彩更飽滿的圖像。
8、問題與解決方案
從上述訓練過程可以得出,随着實驗參數的調整、樣本的優化,DCGAN的效果不斷提高,基于以上實驗内容,總結出兩個主要問題,并根據實踐提出了對應的解決方案。
(1)判别網絡收斂速度太快,導緻生成器Loss數值持續上升。
解決方案1:
調整生成器和判别器機關周期内的訓練次數。就目前實驗資料來看,當生成器和判别器學習率相同的情況下,提高生成器的訓練次數,DCGAN訓練效果更好。
解決方案2:
調整生成器和判别器學習率。一般情況下,進行DCGAN訓練時兩者在Adam優化器的學習率都使用參考值0.0002。當出現其中一方收斂速度過快時,可以通過觀察Loss函數的變化,按照一定比例調整學習率,在本課題中,判别器的網絡收斂速度更快,導緻虛假圖像很快被識别。生成器反向更新參數後,導緻後續每一層輸入的資料分布也發生變化,Loss函數值持續增加。可以通過降低判别器的學習率,間接影響生成器的網絡收斂狀況。
(2)生成圖像品質較差,有畸變、模糊、模式崩潰等現象。
檢查圖像樣本庫,在樣本數量足夠的情況下,檢查樣本中是否存在非動漫圖像,動漫風格是否類似,樣本的表情、發色等面部屬性是否足夠豐富。
将訓練次數比例和學習率結合,動态調整。判别器訓練效果太好,會導緻生成器反向調整參數,生成一些已經被識别為“真”的樣本,特殊情況下,還輸出許多面部特征畸變的圖像,導緻樣本缺乏多樣性和準确性。根據Loss函數,檢視損失值突變的訓練周期,可以按照周期來動态調整生成器或判别器的學習率或訓練次數,例如,每經過10個訓練周期,将生成網絡或判别網絡的學習率遞減為原來的1/2。
總結
此次網絡訓練過程在前人研究的基礎上,基本完成了深度神經網絡的訓練,得到一組高品質網絡參數。但是受制于能力和硬體等方面的因素,還有許多不足之處,在以下幾個方面需要進行更加深入的學習和探索:
(1)精細化樣本庫。由于圖像樣本庫的素材由網絡圖檔剪裁而成,動漫人物形象風格、色彩、背景都有較大差異,對網絡訓練産生幹擾,影響生成圖像的品質。采集白色或統一背景的動漫人物面部圖像,可以提高生成圖檔品質。
(2)增加網絡模型深度。可以使生成的圖檔細節更加完善,圖檔品質清晰,雖然目前實驗環境有限制,但是生成更加清晰的動漫圖像可以擴充其使用範圍,更加滿足動漫創作者的需求。
(3)改善生成圖像品質。随着訓練次數的增多,部分會産生圖像色彩失真現象,圖檔看起來色調偏灰,可以在圖檔輸出之前對生成圖檔品質判斷,根據色彩飽和度等資訊,使用Torch中的圖像增強函數,對圖檔色彩進行調整。
(4)優化工程界面。軟體的普及離不開其易用、美觀的特點。目前本課題還需要利用指令行完成運作,通過一鍵點選自動生成動漫圖像,并用簡潔的前端頁面展示是接下來的工作目标。
連結:
https://github.com/chenyuntc/pytorch-book?spm=ata.13261165.0.0.4061525dFyDth4
https://zhuanlan.zhihu.com/p/24767059?spm=ata.13261165.0.0.4061525dK3i1w7
https://make.girls.moe/#/