周燕玲,段金玲,譚高斌
(江西中醫(yī)藥大學(xué)計算機(jī)學(xué)院,330004,南昌)
圖像的風(fēng)格渲染是計算機(jī)視覺領(lǐng)域的重要研究方向,在電影產(chǎn)業(yè)、動畫制作、游戲渲染等諸多領(lǐng)域具有廣泛應(yīng)用[1]。在人工智能時代,深度學(xué)習(xí)也成為了機(jī)器學(xué)習(xí)領(lǐng)域中重要的研究方向,基于圖像處理的深度學(xué)習(xí)法具有重要作用,能夠?qū)崿F(xiàn)各種高效的圖像處理,如圖像增強(qiáng)、圖像復(fù)原、對比度增強(qiáng)、圖像分割、無損放大、圖像視頻自動上色、動漫風(fēng)格轉(zhuǎn)換以及如今火熱的AI換臉技術(shù)等[2]。
動漫是現(xiàn)在非常流行的一種藝術(shù)表現(xiàn)形式,這種藝術(shù)形式廣泛地應(yīng)用于社會的諸多方面,包括廣告、游戲、影視作品和攝影等多個方面。希望可以通過電腦將現(xiàn)實世界的圖片自動轉(zhuǎn)換為具有動漫風(fēng)格的圖片。同時可以人為地調(diào)控其對人像或背景進(jìn)行風(fēng)格遷移以滿足不同人對圖片風(fēng)格化的要求。
根據(jù)近幾年來圖像風(fēng)格遷移現(xiàn)狀來看,主要是以深度學(xué)習(xí)進(jìn)行研究,盡管現(xiàn)階段能夠?qū)崿F(xiàn)的圖像風(fēng)格轉(zhuǎn)換技術(shù)已十分強(qiáng)大,但在圖像風(fēng)格遷移過程中存在許多問題,如風(fēng)格轉(zhuǎn)化后的圖像邊緣輪廓不清晰[3]、內(nèi)容細(xì)節(jié)處理不當(dāng)、紋理合成有所失真[4]、筆觸形狀不清晰以及圖像質(zhì)量欠佳。為解決以上問題,實現(xiàn)更高效的圖像風(fēng)格遷移,改進(jìn)和優(yōu)化遷移算法具有重要意義和研究價值。
目前,基于深度學(xué)習(xí)的圖像風(fēng)格遷移已經(jīng)取得了相對較好的效果,使得深度學(xué)習(xí)成為了圖像風(fēng)格轉(zhuǎn)換的常用方法。GAN[5](對抗生成網(wǎng)絡(luò))是現(xiàn)階段最新的方法之一。
本文主要基于Tensorflow[6]對模型進(jìn)行訓(xùn)練,Tensorflow是一種基于數(shù)據(jù)流編程的符號數(shù)學(xué)系統(tǒng),被廣泛用于各類機(jī)器學(xué)習(xí)算法的編程實現(xiàn)。在訓(xùn)練數(shù)據(jù)后設(shè)計并實現(xiàn)了GAN-anime系統(tǒng),對上傳的照片進(jìn)行動漫風(fēng)格化,同時實現(xiàn)了在PyTorch上的擴(kuò)展。
生成對抗網(wǎng)絡(luò)GAN(Generative Adversarial Network)最初由Ian J.Goodfellow教授及其團(tuán)隊于2014年提出[7],GAN作為一種非監(jiān)督學(xué)習(xí)方式。生成對抗網(wǎng)絡(luò)GAN也是一種概率生成模型,它通過對抗訓(xùn)練的方式促使生成的樣本分布服從真實數(shù)據(jù)分布情況。
深度卷積生成對抗網(wǎng)絡(luò)DCGAN[8](Deep Convolution Generative Adversarial Networks),由卷積神經(jīng)網(wǎng)絡(luò)與生成對抗網(wǎng)絡(luò)結(jié)合而成,是一個無標(biāo)簽的非監(jiān)督生成模型。通過各類的圖像數(shù)據(jù)訓(xùn)練表明,DCGAN的生成器和鑒別器能夠?qū)W習(xí)從物體部分到場景的表示層次。并且能把學(xué)到的特征用于新的任務(wù)中,以證明它們可以作為一般圖像表征的適用性。
循環(huán)生成對抗網(wǎng)絡(luò)CycleGAN[9](Generative Adversarial Networks)本質(zhì)上是2個鏡像對稱的GAN,構(gòu)成了一個環(huán)形網(wǎng)絡(luò),它是一種無監(jiān)督的生成對抗網(wǎng)絡(luò),打破了圖像風(fēng)格遷移需要成對數(shù)據(jù)的難題[10]。
2018年清華大學(xué)Chen等人提出Cartton-GAN,用于將圖像風(fēng)格進(jìn)行動漫化[11]。CartoonGAN實際就是一個用于非成對image訓(xùn)練的GAN,可以說是單向的CycleGAN,它可以用真實景物的照片作為源圖片,生成任意風(fēng)格的漫畫。
AnimeGAN[12]是來自武漢大學(xué)和湖北工業(yè)大學(xué)的一項研究,采用的是神經(jīng)風(fēng)格遷移與生成對抗網(wǎng)絡(luò)(GAN)的組合,其視覺效果已超越了CartoonGAN。其在CartoonGAN的基礎(chǔ)上,改進(jìn)了網(wǎng)絡(luò)結(jié)構(gòu),由2個卷積神經(jīng)網(wǎng)絡(luò)構(gòu)成:一個是generator G,將照片轉(zhuǎn)化為動畫圖片;一個是discriminator D,判斷輸入的圖片是real或者fake,更加輕量,具有較少的網(wǎng)絡(luò)參數(shù),并引入了Gram矩陣來生成更生動的風(fēng)格圖像。為了生成更好的視覺效果的圖像,提出了3個損失函數(shù):灰度樣式損失、顏色重建損失和灰度對抗損失。在生成網(wǎng)絡(luò)中,灰度風(fēng)格損失和顏色重建損失使生成的圖像具有更明顯的動漫風(fēng)格,并保留了照片的顏色。識別網(wǎng)絡(luò)中的灰度對抗損失使生成的圖像具有鮮明的色彩。在鑒別器網(wǎng)絡(luò)中,本文也使用了 CartoonGAN 提出的促進(jìn)邊緣的對抗損失(edge-promoting adversarial loss)來保留清晰的邊緣。
另外,為了使生成的圖像具有原始照片的內(nèi)容,引入了預(yù)先訓(xùn)練好的 VGG19[13]作為感知網(wǎng)絡(luò),獲得生成的圖像和原始照片的深度感知特征的L1丟失。其與 CartoonGAN 使用的方法類似,通過預(yù)訓(xùn)練模型可以更好地提取圖片的高維信息,這樣可以在風(fēng)格不同的情況之下比較2個照片的差別,2個圖像的風(fēng)格即使不一樣,但是高維的語義信息是一樣的,不需要像Cycle GAN一樣需要同時訓(xùn)練2個模型來保證模型的正常收斂。
AnimeGAN具有的創(chuàng)新點:使用灰階損失來優(yōu)化生成圖像紋理和線條;使用顏色重構(gòu)損失來保留原始圖像中的色彩信息;使用了色彩損失,避免了使用灰階損失導(dǎo)致生成灰色圖像。
本文使用來自武漢大學(xué)與湖北工業(yè)大學(xué)研究的AnimeGAN,采用的是神經(jīng)風(fēng)格遷移和生成對抗網(wǎng)絡(luò)(GAN)的組合。相比于CartoonGAN,AnimeGAN的模型更小,計算量更小,記憶推理速度更快。提出了3個全新的損失函數(shù)用于提升風(fēng)格化的動漫視覺效果,這3個損失函數(shù)分別是灰度風(fēng)格損失、灰度對抗損失和顏色重建損失。
模型使用的數(shù)據(jù)集為kaggle網(wǎng)站上搜集的Anime Faces數(shù)據(jù)集以及Anime Scenery數(shù)據(jù)集,分為動漫風(fēng)格圖和真實圖片,共1 650張動漫圖片,包括人物圖和風(fēng)景圖,6 656張真實圖片。
訓(xùn)練模型之前對風(fēng)格圖片進(jìn)行了預(yù)處理,對動漫圖片進(jìn)行邊緣平滑處理,使用OpenCV的Canny算法,對圖片進(jìn)行邊緣檢測,使用高斯濾波對圖片降噪,使圖像變得平滑,排除非邊緣像素,保留一些較細(xì)的線條,在保留原有圖像屬性的情況下,顯著減少圖像的數(shù)據(jù)規(guī)模,然后對邊緣檢測后的圖片進(jìn)行膨脹操作。
采用AnimeGAN模型進(jìn)行動漫風(fēng)格化模型訓(xùn)練,其中生成器的總損失函數(shù)如式(1)所示。
L(G,D)=ωadvLadv(G,D)+ωconLcon(G,D)+ωgraLgra(G,D)+ωcolLcol(G,D)
(1)
式中:Ladv(G,D)是對抗性loss,影響圖像風(fēng)格遷移部分;Lcon(G,D)是圖像內(nèi)容信息的loss,使生成的圖像保留原始圖像的內(nèi)容;Lgra(G,D)是圖像灰度風(fēng)格loss,使生成的圖像在線條和紋理上具有清晰的動漫風(fēng)格;Lcol(G,D)是顏色重構(gòu)loss使得生成的圖像保留原始圖像的色彩。
最終的生成器損失函數(shù)L(G)如式(2)所示:
L(G)=ωadcEpi~Sdata(p)[(G(pi)-1)2]+ωconLcon(G,D)+ωgraLgra(G,D)+ωcolLcol(G,D)
(2)
鑒別器的損失函數(shù)L(D)如式(3)所示:
L(G)=ωadv{Eai~Sdata(a)[(D(ai)-1)2]+Epi-Sdata(p)[(D(G(pi)))2]+Exi-Sdata(x)[(D(xi))2]+0.1Eyi-Sdata(y)[(D)yi))2]}
(3)
權(quán)重系數(shù)ωadv=333,ωcon=1.5,ωgra=3,ωcol=10。對于Lcon(G,D)和Lgra(G,D)使用了VGG-19作為感知網(wǎng)絡(luò)來提取高層次的語義特征。判別器的總損失由灰度對抗損失和邊界促進(jìn)的對抗損失組成。
生成器網(wǎng)絡(luò)(Generator Network)的學(xué)習(xí)率為0.000 08,判別器網(wǎng)絡(luò)(Discriminator Network)的學(xué)習(xí)率為0.000 16,使用Adam優(yōu)化器,傳入總的損失loss值。
在搜集了大量各類場景數(shù)據(jù)集之后,對其進(jìn)行大量的訓(xùn)練測試,在有關(guān)風(fēng)景動漫化模型的訓(xùn)練過程,共迭代訓(xùn)練100個epoch,每個epoch需要迭代1 109次,每次迭代需要花費近30 s,batch_size為4。需要在GeForce GTX 1080 Ti上跑共花費2個星期左右,最終經(jīng)過訓(xùn)練后生成的效果圖如圖1所示。
照片動漫風(fēng)格化系統(tǒng)頁面展示采用PyQt5技術(shù),借助PyCharm平臺,設(shè)計系統(tǒng)頁面布局效果,編寫功能和事件代碼,進(jìn)入主功能界面,如圖2所示。單擊“選擇圖片”,上傳圖片文件后有2種實現(xiàn)風(fēng)格化效果模型,可以進(jìn)行人臉風(fēng)格化或場景
圖1 動漫化訓(xùn)練結(jié)果對比圖
風(fēng)格化,根據(jù)不同的選擇,進(jìn)行對應(yīng)目標(biāo)圖像動漫風(fēng)格轉(zhuǎn)換效果,效果圖像展示在右側(cè),可以選擇“保存圖片”將生成后的動漫化效果目標(biāo)圖片保存在本地。如圖3所示是人臉動漫化的效果,圖4所示是風(fēng)景動漫化的效果。
圖2 照片動漫風(fēng)格化系統(tǒng)主界面
圖3 人臉動漫化效果
圖4 風(fēng)景動漫化效果
經(jīng)過反復(fù)大量多次迭代訓(xùn)練后,生成的人物效果圖其面部特征沒有很大失真,且能夠很好地實現(xiàn)動漫風(fēng)格轉(zhuǎn)換效果。從眼睛、細(xì)紋等細(xì)節(jié)觀察可知,基于AnimeGAN動漫風(fēng)格人臉風(fēng)格化實現(xiàn)效果相較于風(fēng)景風(fēng)格化實現(xiàn)效果好很多,說明此模型訓(xùn)練較佳。訓(xùn)練完成后根據(jù)生成的log文件,利用tensorboard畫出的損失函數(shù)曲線見圖5所示。
圖5 損失函數(shù)曲線圖
Generator_loss是生成器總損失曲線圖,是G_gan和G_vgg之和,Discriminator_loss是判別器總損失曲線圖,G_vgg是內(nèi)容損失,灰度風(fēng)格損失、顏色重建損失之和,G_gan是Least Squares Loss。由圖5也可看出,生成器總損失在Epoch 80的時侯曲線開始在固定范圍內(nèi)波動,趨于收斂,且G_gan收斂效果良好,說明圖像風(fēng)格遷移訓(xùn)練有所成效。判別器總損失在Epoch 80的時侯曲線開始在固定范圍內(nèi)波動,趨于收斂,且收斂效果穩(wěn)定,這說明判別器的訓(xùn)練是成功的,從圖5也可以看出來效果是令人滿意的。最后本文選取Epoch 80保存的檢查點文件對模型的權(quán)值系數(shù)進(jìn)行了保存。
照片動漫風(fēng)格化系統(tǒng)可以實現(xiàn)人臉動漫化和風(fēng)景動漫化效果,風(fēng)格化效果的實現(xiàn)是通過調(diào)用已經(jīng)訓(xùn)練好的模型,便能夠直接通過點擊“人臉動漫化”或“風(fēng)景動漫化”直接進(jìn)行風(fēng)格轉(zhuǎn)換。
調(diào)用模型函數(shù)的建立是在預(yù)測文件的基礎(chǔ)上改編的,首先采用if函數(shù)判斷是否打開圖片文件路徑為初始賦值'./results/1.jpg',若為初始值則不執(zhí)行該函數(shù),若不為初始值則讀取文件路徑。根據(jù)文件路徑信息用Image.open方法打開圖片,再調(diào)用deeplab.detect_image函數(shù)將打開的圖片應(yīng)用模型處理。處理后獲得的圖片文件較大不能直接顯示在QLabel顯示圖片窗口,需要通過image.save方法將圖片保存在文件夾中,保存過程中圖片被自動壓縮,再通過setPixmap方法可將圖片顯示在QLabel窗口中。
針對人臉的動漫化,還存在許多的限制,如照片的分辨率太低導(dǎo)致動漫化的效果不理想,許多邊緣化信息模糊不清,在訓(xùn)練的過程中調(diào)參不當(dāng)
會產(chǎn)生模式坍塌。對于基于AnimeGAN的圖片動漫風(fēng)格化模型,由于訓(xùn)練的照片是人物和風(fēng)景的圖片混合在一起,且風(fēng)景圖占多數(shù),在生成效果中可以清晰地感受到模型在對于人臉的生成方面不夠細(xì)致,專門分開訓(xùn)練人臉的處理,又顯得十分冗余。其次是模型的訓(xùn)練還未在pytorch上實現(xiàn),只能對tensorflow上生成的模型進(jìn)行轉(zhuǎn)化,期望日后能有所改進(jìn)。以后將會完善本項目的不足,力求實現(xiàn)清晰度更好,達(dá)到更好的動漫風(fēng)格效果。