黃凱怡 姜佳琪 方建文 楊彩云
摘 要:傳統(tǒng)的圖像風格遷移程序通過人工建模只能局限于單一風格遷移,且資源消耗過大。2015 年jatys 等提出了一種基于卷積神經(jīng)網(wǎng)絡的圖像風格遷移算法,通過這一種算法便能生成各種具有原內(nèi)容和新風格的合成圖像。文章利用深度學習算法,對卷積神經(jīng)網(wǎng)絡模型和風格遷移算法進行圖像風格特征提取的研究,在MXNET 深度計算引擎上開發(fā)圖像風格遷移系統(tǒng)(Stvler),將一副圖像的風格遷移到另一副圖像,其成果可應用到設計、娛樂和社交等領域。
關鍵詞:深度神經(jīng)網(wǎng)絡:圖像風格遷移;卷積神經(jīng)網(wǎng)絡:VGG-19 模型
中圖法分類號:TP391文獻標識碼:A
1 引言
藝術源于人類對生活情趣的探索,它的價值在于人類的審美意識。隨著時代的進步與發(fā)展,現(xiàn)代人的基本物質(zhì)需求已經(jīng)得到了滿足。所以,大多數(shù)人會通過追求藝術享受來豐富自身經(jīng)歷、提升生活品質(zhì)。即使大部分藝術在生活中都不具備實際的功能性,大多數(shù)人卻還是會愛上各種各樣的藝術,甚至在有些人的心中,藝術有著不可代替的地位。從古至今,藝術繪畫大師的作品吸引著千千萬萬的人。人們渴望自己也能夠擁有同樣藝術風格的圖像,圖像風格化這一概念由此誕生。
然而,繪制風格圖像需要大批相關技術人員,并損耗大量資源。20 世紀90 年代,科研人員相繼提出大量風格化算法來完成圖像風格化的任務。傳統(tǒng)圖像風格化算法多采用人工建立數(shù)學和物理模型的方式來模仿圖像風格,即一種圖像風格對應一個數(shù)學或統(tǒng)計模型。這樣做出來效果是不錯的,但一個程序基本只能做一種風格或者只針對一個場景,程序的適用范圍過于局限。本選題基于深度神經(jīng)網(wǎng)絡來解答人類如何創(chuàng)造和感知藝術意象并實現(xiàn)圖像風格遷移。這樣一來,用一種算法就可以實現(xiàn)從任意圖像中提取風格并將其應用于內(nèi)容完全不同的其他圖像中。
2 系統(tǒng)總體結(jié)構設計
本系統(tǒng)主要包括圖像輸入、圖像預處理和圖像后處理、圖像特征提取、損失函數(shù)定義、合成圖像創(chuàng)建、模型訓練6 大模塊。本系統(tǒng)的第一步是在圖像輸入模塊中輸入內(nèi)容圖像和樣式圖像,讀取任意圖像后需要進行圖像預處理和后處理,通過標準化處理來增強系統(tǒng)圖像兼容性。第二步是利用VGG?19 網(wǎng)絡模型的某些層來抽取內(nèi)容和樣式特征。第三步是定義損失函數(shù)。內(nèi)容損失對比保留原始圖像,樣式損失對比合成樣式圖像,而總變差損失則優(yōu)化減少合成圖像中的噪點(圖像顆粒感)。第四步是創(chuàng)建和初始化合成圖像。第五步就是通過迭代來訓練模型最終輸出合成圖像??傮w結(jié)構設計如圖1 所示。
其中,基于VGG?19 卷積神經(jīng)網(wǎng)絡的遷移方法過程如圖2 所示。圖中輸入的內(nèi)容圖像為作者在舊金山漁人碼頭附近的街道拍攝的照片,輸入的樣式圖像是一幅內(nèi)容為樹木的油畫。最終輸出的合成圖像內(nèi)容還是街景,但是樣式融入了油畫筆觸,同時整體顏色也更加飽滿鮮艷了。
3 系統(tǒng)實現(xiàn)
3.1 圖像輸入模塊設計
導入程序相關的包和模塊,例如d2lzh,mxnet 以及time,然后調(diào)用函數(shù)分別讀取任意大小與尺寸的內(nèi)容圖像和樣式圖像,獲取圖像的尺寸和大小。
3.2 圖像預處理與后處理模塊設計
設計preprocess 函數(shù)并對輸入圖像進行預處理,將RGB 3 個通道分別進行標準化,使其變成卷積神經(jīng)網(wǎng)絡所接受的輸入格式。設計postprocess 函數(shù)后處理輸出圖像,把圖像的像素值還原回標準化之前的格式,以方便正確輸出圖像。輸出圖像用打印函數(shù)來表示,該函數(shù)要求每個像素的浮點數(shù)值在0~1 之間,所以clip 函數(shù)用來剔除非0~1 的數(shù)(小于0 的數(shù)?。?,大于1 的值分別1)。其中rgb 均值是在imageNet 數(shù)據(jù)集上學習到的。
rgb_mean = nd.array([0.485, 0.456, 0.406]
rgb_std = nd.array([0.229, 0.224, 0.225])
def preprocess(img, image_shape):
img = image.imresize(img, ?image_shape)
img = (img.astype('float32') / 255 - rgb_mean)/ rgb_std
return img. transpose ((2, 0, 1)). expand _ dims(axis=0)
def postprocess(img):
img = img[0].as_in_context(rgb_std.context)
return (img.transpose((1, 2, 0)) ? rgb_std +rgb_mean).clip(0, 1)
3.3 圖像特征抽取模塊
本項目使用Gatys 提出的VGG?19 網(wǎng)絡來抽取圖像特征。經(jīng)過研究者實驗,在遠離輸入層的地方易抽取圖像的全局信息,在靠近輸入層的地方則容易抽取圖像的局部細節(jié)信息。綜合以上考慮,本設計將第5個卷積塊中的第1 個卷積層作為樣式層,將第4 個卷積塊的最后一個卷積層作為內(nèi)容層,這樣可以得到作者認為的最佳效果。在抽取特征時,不需要使用整個VGG 網(wǎng)絡,只需使用上述的6 個卷積層。所以需要構建一個新的網(wǎng)絡net,具體層數(shù)可以從pretrained_net實例中查看獲取。
3.4 損失函數(shù)定義模塊
損失函數(shù)主要包括內(nèi)容損失函數(shù)、樣式損失函數(shù)、總變差損失函數(shù)。內(nèi)容損失函數(shù)采用平方誤差函數(shù)來匹配合成圖像與內(nèi)容圖像在內(nèi)容特征。樣式損失函數(shù)也是通過平方誤差函數(shù)來優(yōu)化樣式風格,具體是對比圖像像素點在每個通道上的統(tǒng)計分布。比如,顏色是通過對比RGB 直方圖來匹配2 圖之間的顏色差異;紋理則是通過對比先前用卷積神經(jīng)網(wǎng)絡中提取的紋理,然后,再用格拉姆(Gram)矩陣來有效地模擬紋理的各種變化,表示紋理信息。實驗中部分內(nèi)容圖像與特征圖像的特征結(jié)合后,其合成的圖像中會有大量高頻噪點,本系統(tǒng)采用總變差損失函數(shù)來降噪。總變差損失(TV loss)約束噪聲的具體方法是通過降低總變差損失來盡可能使鄰近的像素值相近[1~4] 。
3.5 合成圖像創(chuàng)建模塊
在遷移過程中,合成的目標圖像是一個需要一直更新的變量,本系統(tǒng)將合成圖像視為模型參數(shù),通過定義一個新的GeneratedImage 類來表示。類內(nèi)還需定義一個前向計算forward(self)函數(shù)來返回模型參數(shù)。
class GeneratedImage(nn.Block):
def __init__(self, img_shape, ??kwargs):
super(GeneratedImage, self).__init__(??kwargs)
self.weight = self.params.get('weight', shape=img_shape)
def forward(self):
return self.weight.data()
隨后還需定義一個get_inits 函數(shù)來創(chuàng)建合成圖像的模型實例,并將其初始化命名為圖像X。
def get_inits(X, ctx, lr, styles_Y):
gen_img = GeneratedImage(X.shape)
gen_ img. initialize ( init. Constant ( X),
ctx = ctx,force_reinit=True)
trainer = gluon. Trainer ( gen _ img. collect _params(), 'adam',{'learning_rate': lr})
styles_Y_gram = [gram(Y) for Y in styles_Y]
return gen_img(), styles_Y_gram, trainer
3.6模型訓練模塊
首先,定義train 函數(shù),該函數(shù)有7 個參數(shù)。X 代表初始化圖像也是最后輸出的合成圖像,contents_Y代表內(nèi)容圖像的內(nèi)容特征,styles_Y 則是風格圖像的風格特征,ctx 是GPU 相關參數(shù),lr 即學習率(learningrate)。max_epochs 為訓練迭代的次數(shù),不斷抽取合成圖像的內(nèi)容特征和樣式特征,并計算損失函數(shù)來優(yōu)化圖像。在每一個迭代周期調(diào)用一次同步函數(shù)waitall,可以解決內(nèi)存占用過高問題。每經(jīng)過lr_decay_epoch次迭代,將lr 減少1/10,使得收斂加速。
接著進行模型訓練。將內(nèi)容圖像和樣式圖像的高和寬調(diào)整為統(tǒng)一像素,大小可以調(diào)節(jié)??梢韵仍O置小一些的像素,這樣訓練速度較快,這里設置為225×150 像素。訓練迭代參數(shù)的設置是經(jīng)過試驗的,參數(shù)過小無法得到清楚結(jié)果,參數(shù)過大會導致訓練時間過長消耗過大且對結(jié)果影響并不大。代碼如下,其中內(nèi)容圖像content_X 初始化合成圖像,初始學習率設為0.01,迭代次數(shù)設為500,學習率改變的位置設為每200 次。
將訓練好的合成圖像保存為neural?style?1.png。一般而言,這樣的圖像已經(jīng)可以得到遷移到風格的新圖像。為了得到更加清晰的合成圖像,可以將上一步的輸出放在更大的像素尺寸上進行訓練。這里將高和寬放大2 倍,設置為450×300 的尺寸來初始化合成圖像。將合成圖像保存為neural?style?2.png,初始學習率仍設為0.01,迭代次數(shù)改為300,學習率改變的位置設為每100 次[5~10] 。
3.7 訓練結(jié)果分析
本節(jié)圖3(a)為原始內(nèi)容圖像,圖3(b)為原始風格圖像。首先,本節(jié)選取3 組圖像對比合成圖像在不同像素情況下的轉(zhuǎn)換情況。圖3(c)為分辨率225×150 像素的合成圖像,圖3(d)為分辨率450×300 像素的合成圖像。原始圖像為巴厘島的某一餐廳外景,模仿到風格圖像的紋理后合成圖變得有油畫的筆觸,色塊變得比較大,圖像有點朦朧感,多了些許詩情畫意。
圖4 為控制風格權重變量的結(jié)果圖像對比。圖4(c)、圖4(d)是分辨率為225×150 像素的合成圖像,圖4(c) 的風格權重為103,圖4(d) 的風格權重為104。圖4(e)、圖4(f)是分辨率為450×300 像素的合成圖像,圖4(e)的風格權重為103,圖4(f)的風格權重為104。從藍天上可以明顯發(fā)現(xiàn)在其他變量不變的情況下,風格權重越大模仿的風格特征更明顯。
4 結(jié)束語
本文主要介紹并回答了如何規(guī)定圖像風格;如何提取圖像紋理特征而不夾雜內(nèi)容特征;如何提取圖像內(nèi)容特征而不夾雜紋理特征;如何將兩種特征融合生成目標圖像。同時,分析并驗證深度卷積神經(jīng)網(wǎng)絡中不同層對于圖像特征表達的特性。通過反向傳播算法對VGG19 不同層所抽取的特征進行反向圖片生成,以可視化的方式驗證深層卷積神經(jīng)網(wǎng)絡中不同層所抽取的特征特性。找到一種基于交替訓練的風格遷移算法。該算法主要為解決經(jīng)典神經(jīng)風格遷移算法中所存在的內(nèi)容細節(jié)丟失,物體邊緣扭曲以及顏色覆蓋等問題,提出一種交替訓練的方式,以盡可能地保留內(nèi)容圖片中的細節(jié)信息。找到一種基于多路徑前饋神經(jīng)網(wǎng)絡的實時風格遷移算法。該算法在編碼器與解碼器之間添加多個由殘差塊所構成的通道,從而提高網(wǎng)絡收斂速度以及生成圖片的質(zhì)量。找到一種基于多層次特征轉(zhuǎn)換的任意風格遷移算法。訓練一個通用的解碼器,通過特征轉(zhuǎn)換的方式直接對編碼器所提取的特征圖進行操作,進而豐富所需渲染圖片的風格。
參考文獻:
[1] 黃海新,梁志旭,張東.基于深度學習的圖像風格化算法研究綜述[J].電子技術應用,2019,45(7):27?31.
[2] 陳淑環(huán),韋玉科,徐樂,等.基于深度學習的圖像風格遷移研究綜述[J].計算機應用研究,2019,26(8):2250?2255.
[3] EFROS A A, FREEMAN W T. Image quilting for texturesynthesis and transfer[C]∥Proceedings of the 28th AnnualConference on Computer Graphics and InteractiveTechniques.New York:ACM Press,2001:341?346.
[4] 錢小燕,肖亮,吳慧中.快速風格遷移[J].計算機工程,2006,32(21):15?17+46.
[5] 阿斯頓·張,李沐,扎卡里·C.動手學深度學習[M].北京:人民郵電出版社,2019.
[6] 劉建偉,劉媛,羅雄麟.深度學習研究進展[J].計算機應用研究,2014,31(7):1921?1930+1942.
[7] 孫志軍,薛磊,許陽明.深度學習研究綜述[J].計算機應用研究,2012,29(8):2806?2810.
[8] 牟晉娟.基于深度學習的圖像風格遷移技術的研究[J].電子元器件與信息技術,2019,3(4):82?85.
[9] 欒五洋.基于深度學習的圖像風格轉(zhuǎn)換淺論[J].經(jīng)驗交流,2018:248?250.
[10] 焦李成,楊媛淑,劉芳,等.神經(jīng)網(wǎng)絡七十年:回顧與展望[J].計算機學報,2016(8):1697?1716.
作者簡介:
黃凱怡(2001—),本科,研究方向:計算機應用技術。
方建文(1972—),博士,教授,研究方向:計算機應用技術(通信作者)。