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