?

基于深度神經網絡的圖像風格遷移系統開發

2023-08-09 18:20黃凱怡姜佳琪方建文楊彩云
計算機應用文摘 2023年15期
關鍵詞:樣式卷積像素

黃凱怡 姜佳琪 方建文 楊彩云

摘 要:傳統的圖像風格遷移程序通過人工建模只能局限于單一風格遷移,且資源消耗過大。2015 年jatys 等提出了一種基于卷積神經網絡的圖像風格遷移算法,通過這一種算法便能生成各種具有原內容和新風格的合成圖像。文章利用深度學習算法,對卷積神經網絡模型和風格遷移算法進行圖像風格特征提取的研究,在MXNET 深度計算引擎上開發圖像風格遷移系統(Stvler),將一副圖像的風格遷移到另一副圖像,其成果可應用到設計、娛樂和社交等領域。

關鍵詞:深度神經網絡:圖像風格遷移;卷積神經網絡:VGG-19 模型

中圖法分類號:TP391文獻標識碼:A

1 引言

藝術源于人類對生活情趣的探索,它的價值在于人類的審美意識。隨著時代的進步與發展,現代人的基本物質需求已經得到了滿足。所以,大多數人會通過追求藝術享受來豐富自身經歷、提升生活品質。即使大部分藝術在生活中都不具備實際的功能性,大多數人卻還是會愛上各種各樣的藝術,甚至在有些人的心中,藝術有著不可代替的地位。從古至今,藝術繪畫大師的作品吸引著千千萬萬的人。人們渴望自己也能夠擁有同樣藝術風格的圖像,圖像風格化這一概念由此誕生。

然而,繪制風格圖像需要大批相關技術人員,并損耗大量資源。20 世紀90 年代,科研人員相繼提出大量風格化算法來完成圖像風格化的任務。傳統圖像風格化算法多采用人工建立數學和物理模型的方式來模仿圖像風格,即一種圖像風格對應一個數學或統計模型。這樣做出來效果是不錯的,但一個程序基本只能做一種風格或者只針對一個場景,程序的適用范圍過于局限。本選題基于深度神經網絡來解答人類如何創造和感知藝術意象并實現圖像風格遷移。這樣一來,用一種算法就可以實現從任意圖像中提取風格并將其應用于內容完全不同的其他圖像中。

2 系統總體結構設計

本系統主要包括圖像輸入、圖像預處理和圖像后處理、圖像特征提取、損失函數定義、合成圖像創建、模型訓練6 大模塊。本系統的第一步是在圖像輸入模塊中輸入內容圖像和樣式圖像,讀取任意圖像后需要進行圖像預處理和后處理,通過標準化處理來增強系統圖像兼容性。第二步是利用VGG?19 網絡模型的某些層來抽取內容和樣式特征。第三步是定義損失函數。內容損失對比保留原始圖像,樣式損失對比合成樣式圖像,而總變差損失則優化減少合成圖像中的噪點(圖像顆粒感)。第四步是創建和初始化合成圖像。第五步就是通過迭代來訓練模型最終輸出合成圖像??傮w結構設計如圖1 所示。

其中,基于VGG?19 卷積神經網絡的遷移方法過程如圖2 所示。圖中輸入的內容圖像為作者在舊金山漁人碼頭附近的街道拍攝的照片,輸入的樣式圖像是一幅內容為樹木的油畫。最終輸出的合成圖像內容還是街景,但是樣式融入了油畫筆觸,同時整體顏色也更加飽滿鮮艷了。

3 系統實現

3.1 圖像輸入模塊設計

導入程序相關的包和模塊,例如d2lzh,mxnet 以及time,然后調用函數分別讀取任意大小與尺寸的內容圖像和樣式圖像,獲取圖像的尺寸和大小。

3.2 圖像預處理與后處理模塊設計

設計preprocess 函數并對輸入圖像進行預處理,將RGB 3 個通道分別進行標準化,使其變成卷積神經網絡所接受的輸入格式。設計postprocess 函數后處理輸出圖像,把圖像的像素值還原回標準化之前的格式,以方便正確輸出圖像。輸出圖像用打印函數來表示,該函數要求每個像素的浮點數值在0~1 之間,所以clip 函數用來剔除非0~1 的數(小于0 的數?。?,大于1 的值分別1)。其中rgb 均值是在imageNet 數據集上學習到的。

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 網絡來抽取圖像特征。經過研究者實驗,在遠離輸入層的地方易抽取圖像的全局信息,在靠近輸入層的地方則容易抽取圖像的局部細節信息。綜合以上考慮,本設計將第5個卷積塊中的第1 個卷積層作為樣式層,將第4 個卷積塊的最后一個卷積層作為內容層,這樣可以得到作者認為的最佳效果。在抽取特征時,不需要使用整個VGG 網絡,只需使用上述的6 個卷積層。所以需要構建一個新的網絡net,具體層數可以從pretrained_net實例中查看獲取。

3.4 損失函數定義模塊

損失函數主要包括內容損失函數、樣式損失函數、總變差損失函數。內容損失函數采用平方誤差函數來匹配合成圖像與內容圖像在內容特征。樣式損失函數也是通過平方誤差函數來優化樣式風格,具體是對比圖像像素點在每個通道上的統計分布。比如,顏色是通過對比RGB 直方圖來匹配2 圖之間的顏色差異;紋理則是通過對比先前用卷積神經網絡中提取的紋理,然后,再用格拉姆(Gram)矩陣來有效地模擬紋理的各種變化,表示紋理信息。實驗中部分內容圖像與特征圖像的特征結合后,其合成的圖像中會有大量高頻噪點,本系統采用總變差損失函數來降噪??傋儾顡p失(TV loss)約束噪聲的具體方法是通過降低總變差損失來盡可能使鄰近的像素值相近[1~4] 。

3.5 合成圖像創建模塊

在遷移過程中,合成的目標圖像是一個需要一直更新的變量,本系統將合成圖像視為模型參數,通過定義一個新的GeneratedImage 類來表示。類內還需定義一個前向計算forward(self)函數來返回模型參數。

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 函數來創建合成圖像的模型實例,并將其初始化命名為圖像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 函數,該函數有7 個參數。X 代表初始化圖像也是最后輸出的合成圖像,contents_Y代表內容圖像的內容特征,styles_Y 則是風格圖像的風格特征,ctx 是GPU 相關參數,lr 即學習率(learningrate)。max_epochs 為訓練迭代的次數,不斷抽取合成圖像的內容特征和樣式特征,并計算損失函數來優化圖像。在每一個迭代周期調用一次同步函數waitall,可以解決內存占用過高問題。每經過lr_decay_epoch次迭代,將lr 減少1/10,使得收斂加速。

接著進行模型訓練。將內容圖像和樣式圖像的高和寬調整為統一像素,大小可以調節??梢韵仍O置小一些的像素,這樣訓練速度較快,這里設置為225×150 像素。訓練迭代參數的設置是經過試驗的,參數過小無法得到清楚結果,參數過大會導致訓練時間過長消耗過大且對結果影響并不大。代碼如下,其中內容圖像content_X 初始化合成圖像,初始學習率設為0.01,迭代次數設為500,學習率改變的位置設為每200 次。

將訓練好的合成圖像保存為neural?style?1.png。一般而言,這樣的圖像已經可以得到遷移到風格的新圖像。為了得到更加清晰的合成圖像,可以將上一步的輸出放在更大的像素尺寸上進行訓練。這里將高和寬放大2 倍,設置為450×300 的尺寸來初始化合成圖像。將合成圖像保存為neural?style?2.png,初始學習率仍設為0.01,迭代次數改為300,學習率改變的位置設為每100 次[5~10] 。

3.7 訓練結果分析

本節圖3(a)為原始內容圖像,圖3(b)為原始風格圖像。首先,本節選?。?組圖像對比合成圖像在不同像素情況下的轉換情況。圖3(c)為分辨率225×150 像素的合成圖像,圖3(d)為分辨率450×300 像素的合成圖像。原始圖像為巴厘島的某一餐廳外景,模仿到風格圖像的紋理后合成圖變得有油畫的筆觸,色塊變得比較大,圖像有點朦朧感,多了些許詩情畫意。

圖4 為控制風格權重變量的結果圖像對比。圖4(c)、圖4(d)是分辨率為225×150 像素的合成圖像,圖4(c) 的風格權重為103,圖4(d) 的風格權重為104。圖4(e)、圖4(f)是分辨率為450×300 像素的合成圖像,圖4(e)的風格權重為103,圖4(f)的風格權重為104。從藍天上可以明顯發現在其他變量不變的情況下,風格權重越大模仿的風格特征更明顯。

4 結束語

本文主要介紹并回答了如何規定圖像風格;如何提取圖像紋理特征而不夾雜內容特征;如何提取圖像內容特征而不夾雜紋理特征;如何將兩種特征融合生成目標圖像。同時,分析并驗證深度卷積神經網絡中不同層對于圖像特征表達的特性。通過反向傳播算法對VGG19 不同層所抽取的特征進行反向圖片生成,以可視化的方式驗證深層卷積神經網絡中不同層所抽取的特征特性。找到一種基于交替訓練的風格遷移算法。該算法主要為解決經典神經風格遷移算法中所存在的內容細節丟失,物體邊緣扭曲以及顏色覆蓋等問題,提出一種交替訓練的方式,以盡可能地保留內容圖片中的細節信息。找到一種基于多路徑前饋神經網絡的實時風格遷移算法。該算法在編碼器與解碼器之間添加多個由殘差塊所構成的通道,從而提高網絡收斂速度以及生成圖片的質量。找到一種基于多層次特征轉換的任意風格遷移算法。訓練一個通用的解碼器,通過特征轉換的方式直接對編碼器所提取的特征圖進行操作,進而豐富所需渲染圖片的風格。

參考文獻:

[1] 黃海新,梁志旭,張東.基于深度學習的圖像風格化算法研究綜述[J].電子技術應用,2019,45(7):27?31.

[2] 陳淑環,韋玉科,徐樂,等.基于深度學習的圖像風格遷移研究綜述[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] 欒五洋.基于深度學習的圖像風格轉換淺論[J].經驗交流,2018:248?250.

[10] 焦李成,楊媛淑,劉芳,等.神經網絡七十年:回顧與展望[J].計算機學報,2016(8):1697?1716.

作者簡介:

黃凱怡(2001—),本科,研究方向:計算機應用技術。

方建文(1972—),博士,教授,研究方向:計算機應用技術(通信作者)。

猜你喜歡
樣式卷積像素
CPMF-I 取樣式多相流分離計量裝置
像素前線之“幻影”2000
CPMF-I 取樣式多相流分離計量裝置
基于3D-Winograd的快速卷積算法設計及FPGA實現
取樣式多相流分離計量裝置
“像素”仙人掌
從濾波器理解卷積
基于傅里葉域卷積表示的目標跟蹤算法
éVOLUTIONDIGAE Style de vie tactile
高像素不是全部
91香蕉高清国产线观看免费-97夜夜澡人人爽人人喊a-99久久久无码国产精品9-国产亚洲日韩欧美综合