黃光輝,李錦朋,卓俊濤,陳雨鑫,黃貽望
(銅仁學(xué)院大數(shù)據(jù)學(xué)院,銅仁 554300)
圖像風(fēng)格遷移是指將原始風(fēng)格圖像的藝術(shù)風(fēng)格遷移到另一張沒有該風(fēng)格的圖片上,然后生成一張新的藝術(shù)風(fēng)格圖像,圖像在進(jìn)行風(fēng)格遷移后沒有太大的內(nèi)容損失,而且具有新的藝術(shù)風(fēng)格。在早期,風(fēng)格遷移主要包括基于紋理的合成和非真實(shí)感渲染。通過紋理合成的方法有Julesz 提出的基于紋理建模的特征提取方法,特征相似性表示視覺差異,獲取像素用于階信息統(tǒng)計(jì)。通常情況下,參數(shù)化的紋理建模是通過濾波器提取圖像的紋理特征,然后通過重新采樣方法來合成新的紋理。Lum 提出了非真實(shí)感渲染方法通過處理筆劃的混合顏色、拖尾和交叉,把原始圖像渲染成一個(gè)多色立體風(fēng)格圖像;使用轉(zhuǎn)換色彩、通過顯著性的細(xì)節(jié)層次繪制、沖擊模擬、濕畫效果模擬等方法,生成圖像風(fēng)格還原性比較高的水彩風(fēng)格圖像。但是,基于筆劃的算法只能設(shè)計(jì)指定的風(fēng)格,不能模擬任何風(fēng)格,具有很大的局限性。然而,基于卷積神經(jīng)網(wǎng)絡(luò)(CNN)的圖像樣式傳輸技術(shù)并不存在這些問題。利用vgg16網(wǎng)絡(luò)模型提取原始圖像和風(fēng)格遷移圖像的風(fēng)格和內(nèi)容,然后合成原始風(fēng)格圖像的風(fēng)格紋理和待風(fēng)格遷移圖像的內(nèi)容,從而生成新的風(fēng)格化圖像。早期的圖像樣式遷移是基于紋理合成和非真實(shí)感渲染的。當(dāng)需要生成新的樣式圖像時(shí),需要重寫樣式遷移代碼和合成算法,生成的樣式遷移圖像會(huì)扭曲高分辨率圖像?;诰矸e神經(jīng)網(wǎng)絡(luò)(CNN)的圖像風(fēng)格傳遞可以通過訓(xùn)練將每個(gè)訓(xùn)練結(jié)果保存為一個(gè)模型。每次樣式轉(zhuǎn)換只需訓(xùn)練即可保存模型,無需再次編寫代碼,保存的模型還可以執(zhí)行快速圖像樣式轉(zhuǎn)換。CNN 網(wǎng)絡(luò)模型的結(jié)構(gòu)非常適合于圖像處理,因此能夠很好地適應(yīng)高分辨率圖像。
本文的主要內(nèi)容是實(shí)現(xiàn)了Gatys 等提出的使用卷積神經(jīng)網(wǎng)絡(luò)進(jìn)行圖像風(fēng)格遷移,能對(duì)任意圖像的風(fēng)格進(jìn)行提取,并生成新的風(fēng)格化圖像,將模型保存后,能實(shí)現(xiàn)快速圖像風(fēng)格遷移。實(shí)現(xiàn)快速圖像風(fēng)格遷移后,需要更友好的使用體驗(yàn)以滿足日常使用和推廣,所以本文實(shí)現(xiàn)了一個(gè)基于卷積神經(jīng)網(wǎng)絡(luò)(CNN)圖像風(fēng)格遷移的Web應(yīng)用。
圖像的風(fēng)格遷移始于2015年Gatys 的論文“Image Style Transfer Using Convolutional Neural Networks”,所做的工作非常容易描述,就是由一張內(nèi)容圖片和一張風(fēng)格圖片進(jìn)行融合之后,得到經(jīng)風(fēng)格渲染之后的合成圖片,如圖1所示。
Gatys使用經(jīng)典的vgg19網(wǎng)絡(luò)。從圖1可以看出,vgg19 可分為五個(gè)塊。每個(gè)塊由幾個(gè)卷積層和后續(xù)池層組成。這五個(gè)塊的池層是最大池,但卷積層的數(shù)量不同。第一個(gè)塊有兩層卷積(conv1_1 和conv1_2),第二個(gè)塊也是兩層卷積,接下來的三個(gè)塊是4層卷積,最后是兩個(gè)完全連接的層(FC1 和FC2)和一個(gè)用于分類的softmax層。但是,樣式遷移任務(wù)與對(duì)象識(shí)別不同,因此不需要最后兩個(gè)完整連接層和softmax 層。最左邊的兩個(gè)輸入圖像,一個(gè)作為內(nèi)容輸入,另一個(gè)作為樣式輸入,分別通過vgg19 的五個(gè)塊。從淺層和深層可以看出,所獲得的特征圖的高度和寬度逐漸減小,但深度逐漸增加。為了讓人們更直觀地看到每個(gè)塊提取的特征,Gatys 做了一個(gè)技巧,即特征重建,將提取的特征可視化。然而,我們可以看到,內(nèi)容圖片特征的提取在很大程度上保留了原始圖片的信息,而對(duì)于風(fēng)格圖片,則基本看不到原始圖片的外觀,但可以粗略地認(rèn)為風(fēng)格是提取出來的。事實(shí)證明,這兩張圖片的特征提取處理是不同的,如圖2所示。
圖 1 圖像風(fēng)格遷移合成過程[2]
圖2 實(shí)現(xiàn)步驟及原理
在內(nèi)容損失上,只取conv4_2 層的特征用來計(jì)算噪聲圖片特征和內(nèi)容圖片特征之間的歐式距離,公式為:
在風(fēng)格損失上,計(jì)算方式與內(nèi)容損失不同。上面已經(jīng)知道,噪聲圖片→經(jīng)過VGG19網(wǎng)絡(luò)的5個(gè)塊得到的特征記為F,F的gram 矩陣記為G,風(fēng)格圖片a經(jīng)過VGG19 網(wǎng)絡(luò)的5 個(gè)塊得到的特征,再計(jì)算gram 矩陣后得到的內(nèi)容記為A,之后計(jì)算G和A之間的歐式距離,其中g(shù)ram 矩陣的公式為:
則風(fēng)格損失的公式為:
計(jì)算風(fēng)格損失時(shí),5個(gè)塊提取的特征參與了計(jì)算,而計(jì)算內(nèi)容損失,實(shí)際上只用到第四個(gè)塊提取出來的特征。這是因?yàn)槊總€(gè)塊提取到的風(fēng)格特征都是不一樣的,都參與計(jì)算可以增加風(fēng)格的多樣性。而內(nèi)容圖片每個(gè)塊提取到的特征其實(shí)相差不大,所以只需要取一個(gè)就好,而且使用哪一個(gè)也并沒有明確規(guī)定,這與各人審美有關(guān)??倱p失即為內(nèi)容損失和風(fēng)格損失的線性和,改變和的比重可以調(diào)整內(nèi)容和風(fēng)格的占比。
代碼中還使用了一個(gè)trick,總損失的計(jì)算還會(huì)加上一個(gè)total variation loss 來降噪,讓合成的圖片視覺上更加平滑。
對(duì)圖像的風(fēng)格遷移離不開圖像對(duì)風(fēng)格和內(nèi)容的提取,本文使用COCO 數(shù)據(jù)集對(duì)模型進(jìn)行內(nèi)容提取和風(fēng)格紋理提取的訓(xùn)練。COCO數(shù)據(jù)集是一個(gè)非常大型的數(shù)據(jù)集,它有豐富的物體識(shí)別、圖像分割和字幕數(shù)據(jù)集。這個(gè)數(shù)據(jù)集以scene understanding 為目標(biāo),其中圖像有91 類目標(biāo),328000個(gè)視頻影像和2500000個(gè)標(biāo)簽。目前為止它是語(yǔ)義分割的最大數(shù)據(jù)集,提供了80 個(gè)類別,超過33 萬張圖片,其中20 萬張有標(biāo)注,數(shù)據(jù)集中個(gè)體的數(shù)目超過150 萬個(gè)。
本文使用tensorflow+VGG16 和coco 數(shù)據(jù)集,實(shí)現(xiàn)了圖像風(fēng)格遷移系統(tǒng),并成功對(duì)圖像進(jìn)行了風(fēng)格遷移。在對(duì)風(fēng)格遷移的圖像中,均有不錯(cuò)的效果。
從表1的圖可以看到,本文對(duì)圖像進(jìn)行了有效的風(fēng)格遷移,沒有失真、模糊、內(nèi)容缺失等情況,本文一共訓(xùn)練了7 個(gè)模型,7 個(gè)模型均有效地對(duì)圖像的風(fēng)格進(jìn)行了遷移。因?yàn)榕虐鎲栴},本文對(duì)圖像進(jìn)行了縮放,所以可能會(huì)對(duì)參考有一些影響。
表1 圖像風(fēng)格遷移
本文將實(shí)現(xiàn)代碼加入Flask 框架之中,通過Flask 實(shí)現(xiàn)了一個(gè)基于卷積神經(jīng)網(wǎng)絡(luò)(CNN)圖像風(fēng)格遷移的Web 系統(tǒng),該代碼實(shí)現(xiàn)在項(xiàng)目的webapp 之中。本文之所以使用Flask 框架,是因?yàn)樗且粋€(gè)非常輕量級(jí)且高度自定義的框架,該框架使用Python 語(yǔ)言編寫,比同類型框架更為靈活、輕便、安全且容易上手。Flask 有非常高的可定制性,開發(fā)者可以輕松地將自己想要的框架或者功能集成到其中。
本文的Web 應(yīng)用使用前后端分離的架構(gòu),所有功能均通過API 接口方式訪問后臺(tái)實(shí)現(xiàn),js中使用當(dāng)下比較流行的前端技術(shù),如JQuery、Vue等框架,
JQuery是一個(gè)js框架,JQuery提供一個(gè)萬能的“$”符號(hào),它可以很輕松地操作HTML 的DOM 結(jié)構(gòu),也可以很方便地發(fā)起一個(gè)AJAX 請(qǐng)求,可以在開發(fā)的時(shí)候加快開發(fā)進(jìn)度。
圖3 圖像風(fēng)格遷移技術(shù)的Web應(yīng)用
本文實(shí)現(xiàn)基于卷積神經(jīng)網(wǎng)絡(luò)(CNN)圖像風(fēng)格遷移,并在此基礎(chǔ)上實(shí)現(xiàn)了一個(gè)基于卷積神經(jīng)網(wǎng)絡(luò)(CNN)圖像風(fēng)格遷移的Web 應(yīng)用,該應(yīng)用實(shí)現(xiàn)了在Web 上進(jìn)行快速圖像風(fēng)格遷移的功能、以及模型的訓(xùn)練、美圖欣賞等功能。本文雖然實(shí)現(xiàn)了基于卷積神經(jīng)網(wǎng)絡(luò)(CNN)圖像風(fēng)格遷移,但是在Web 應(yīng)用上,因?yàn)槭褂昧送粋€(gè)模型,會(huì)造成卡頓現(xiàn)象,接下來應(yīng)該考慮是否使用分布式來處理模型的訓(xùn)練以及圖像的風(fēng)格遷移。后續(xù)實(shí)驗(yàn)將使用生成對(duì)抗網(wǎng)絡(luò)來進(jìn)行圖像風(fēng)格遷移,對(duì)比實(shí)驗(yàn)是否能達(dá)到更好的效果。優(yōu)化模型,調(diào)整模型參數(shù),讓訓(xùn)練更加優(yōu)化,加快模型的收斂速度。