王 婷 李 航 胡 智
(沈陽師范大學(xué)軟件學(xué)院 遼寧 沈陽 110034)
圖像風(fēng)格遷移是指利用機(jī)器學(xué)習(xí)算法學(xué)習(xí)藝術(shù)畫作的風(fēng)格,并將這種風(fēng)格應(yīng)用到另一幅圖片上的技術(shù)[1]。簡(jiǎn)單來講,風(fēng)格遷移和紋理生成是緊密相關(guān)的[2],這種技術(shù)的趣味性就是將一幅照片在內(nèi)容保持不變的情況下被渲染成有藝術(shù)風(fēng)格的新畫作。
圖像風(fēng)格遷移主要包括基于圖像迭代和基于模型迭代兩個(gè)方面[2]。傳統(tǒng)的圖像風(fēng)格遷移都是基于圖像局部特征的統(tǒng)計(jì)模型手動(dòng)建模,舊式的手工數(shù)學(xué)建模方法耗時(shí)耗力、效果不佳。2015年,Gatys等[5]開創(chuàng)性地提出基于神經(jīng)網(wǎng)絡(luò)的圖像遷移算法后,圖像的風(fēng)格遷移已不再局限于只基于筆觸、物理模型的繪制和紋理合成的非參數(shù)圖像遷移。文中的基于圖像迭代和基于模型迭代兩大創(chuàng)新點(diǎn)引起了熱潮,這一技術(shù)越來越多地應(yīng)用于眾多應(yīng)用領(lǐng)域。文獻(xiàn)[6]提出一種利用內(nèi)容圖和訓(xùn)練好的前向網(wǎng)絡(luò)結(jié)合的方法,通過求解全局最優(yōu)解轉(zhuǎn)換成用前向網(wǎng)絡(luò)接近最優(yōu)解來合成具有新紋理的網(wǎng)絡(luò)。文獻(xiàn)[7]利用GAN(Generative Adversarial Networks)網(wǎng)絡(luò)對(duì)抗訓(xùn)練模型,增加了圖片轉(zhuǎn)換的多樣性。文獻(xiàn)[8]提出采用感知損失函數(shù)代替逐像素差距的損失函數(shù),實(shí)現(xiàn)實(shí)時(shí)風(fēng)格轉(zhuǎn)換和圖像超分倍率重建。文獻(xiàn)[9]提出了N個(gè)風(fēng)格共用一個(gè)模型的方式,緩解了模型存儲(chǔ)所消耗的空間問題,實(shí)現(xiàn)實(shí)時(shí)的風(fēng)格插補(bǔ)并可應(yīng)用在視頻上。文獻(xiàn)[10]設(shè)計(jì)了一種轉(zhuǎn)換神經(jīng)網(wǎng)路U-StyleNet,并采用遷移學(xué)習(xí)的方法解決了網(wǎng)絡(luò)參數(shù)初始化導(dǎo)致輸出圖像有黑塊或亮塊的問題,同時(shí)加快了網(wǎng)絡(luò)的訓(xùn)練速度。2016年上線的手機(jī)APP Prisma綜合了圖像風(fēng)格遷移技術(shù)和人工智能技術(shù),獲取世界的藝術(shù)大師和主要流派的藝術(shù)風(fēng)格,它是基于深度學(xué)習(xí)的圖像風(fēng)格化應(yīng)用非常成功的實(shí)例。Artisto APP可直接將視頻處理為藝術(shù)性的風(fēng)格化,從抽象主義到現(xiàn)代派大師畢加索的立體主義。
本文主要基于圖像迭代的圖像遷移方法,采用預(yù)訓(xùn)練卷積神經(jīng)網(wǎng)絡(luò)[11](Visual Geometry Group-Network,VGG-Net)模型和快速靈活的Keras深度學(xué)習(xí)框架作為核心組件來實(shí)現(xiàn)圖像風(fēng)格遷移。預(yù)訓(xùn)練的VGG-19卷積模型[12]具有較快的收斂速度和更好的泛化特性,整個(gè)VGG19網(wǎng)絡(luò)的卷積核對(duì)一幅圖片的輪廓線條的刺激以及顏色刺激更為敏感。實(shí)驗(yàn)證明基于VGGNet的圖像風(fēng)格遷移算法將損失度降低至最低時(shí),VGGNet模型的性能最好,合成圖片的匹配度最佳,并降低了實(shí)現(xiàn)復(fù)雜度。
在機(jī)器學(xué)習(xí)中,卷積神經(jīng)網(wǎng)絡(luò)(Convolutional Neural Network,CNN)是一種深度前饋人工神經(jīng)網(wǎng)絡(luò)。它的人工神經(jīng)元可以響應(yīng)一部分覆蓋范圍內(nèi)的周圍單元,包括卷積層、池化層和全連接層等。CNN的基本結(jié)構(gòu)包括兩層:特征提取層和特征映射層。卷積神經(jīng)網(wǎng)絡(luò)以其局部權(quán)值共享的特殊結(jié)構(gòu)在圖像處理、圖像識(shí)別、圖像分割等有著獨(dú)特的優(yōu)越性。權(quán)值共享降低了網(wǎng)絡(luò)的復(fù)雜性,多維輸入向量的圖像可直接輸入網(wǎng)絡(luò),避免了復(fù)雜的數(shù)據(jù)重建。
卷積神經(jīng)網(wǎng)絡(luò)中被證明圖像識(shí)別能力出色的VGGNet在2014年ILSVRC比賽中取得定位任務(wù)第一名和分類任務(wù)第二名的優(yōu)異成績(jī),具有較好的泛化能力。因此,實(shí)現(xiàn)圖像風(fēng)格遷移的過程中,使用含19個(gè)參數(shù)的標(biāo)準(zhǔn)VGG網(wǎng)絡(luò),包含16個(gè)卷積層和5個(gè)池化層。VGG19和普通的VGGNet稍有區(qū)別,VGGNet通常是利用全連接層輸出物體類別,而VGG19在圖像風(fēng)格遷移中提取特征時(shí),通過輸入特征后直接輸出對(duì)應(yīng)這種特征的圖片。選擇深層’block5_conv2’卷積層提取內(nèi)容特征;選擇’block1_conv1’至’block5_conv1’的五個(gè)從低維到高維過渡的卷積層提取樣式特征。圖1為VGG19網(wǎng)絡(luò)在圖像風(fēng)格遷移中的工作流程,圖2為VGG19網(wǎng)絡(luò)結(jié)構(gòu)圖。
圖1 VGG19網(wǎng)絡(luò)在圖像風(fēng)格遷移的工作流程
圖2 VGG19網(wǎng)絡(luò)結(jié)構(gòu)圖
VGG19的拓展性較強(qiáng),遷移到其他圖片數(shù)據(jù)集上的泛化性較好;結(jié)構(gòu)簡(jiǎn)單,整個(gè)圖2網(wǎng)絡(luò)結(jié)構(gòu)使用相同尺寸大小為3×3的卷積核和池化尺寸大小2×2。三個(gè)3×3的卷積核相當(dāng)于一個(gè)7×7卷積核的感受域,數(shù)量更少、模型更具有判別性、便于加快訓(xùn)練;池化層選擇平均池化代替最大池化,利用RELU激活函數(shù)提高優(yōu)化率。因此,在實(shí)現(xiàn)圖像風(fēng)格遷移中,選擇VGG19可有效地縮短訓(xùn)練時(shí)間、提高圖像識(shí)別的精度。
深度學(xué)習(xí)的模型很難看到其中的內(nèi)部結(jié)構(gòu),但是對(duì)于卷積神經(jīng)網(wǎng)絡(luò)來說,它能以可視化的形式看到內(nèi)部特征表示。常見的三種可視化方法為卷積核輸出的可視化、卷積核的可視化和熱度圖的可視化。使用可視化方法可以使圖像風(fēng)格遷移過程中卷積核感受圖像的方式,以及通過熱度圖定位圖像中物體的位置更加容易。
VGG19中卷積的過程就是特征提取的過程,每一個(gè)卷積核代表著一種特征。在可視化卷積核的過程中,低層次的卷積核對(duì)目標(biāo)圖像的顏色、邊緣信息感興趣,提取的特征是簡(jiǎn)單的檢測(cè)點(diǎn)和線等。隨著層次的不斷加深,內(nèi)容越來越抽象和復(fù)雜,卷積層感知圖像中的物體位置更準(zhǔn)確,提取的特征通常是復(fù)雜的特定物體。圖3為VGG19網(wǎng)絡(luò)第一層和第四層的可視化對(duì)比。
圖3 VGG19網(wǎng)絡(luò)第一層和第四層的可視化對(duì)比
圖像風(fēng)格遷移算法通過內(nèi)容、樣式和風(fēng)格三方面給每張圖片編寫損失函數(shù)。為了開始改變生成的圖像以最大限度地減少損失函數(shù),本文算法使用不同的權(quán)重進(jìn)行圖像遷移的實(shí)現(xiàn)。算法設(shè)計(jì)過程中,使用多個(gè)內(nèi)容圖層,伴隨VGG19感受野的增大,精確內(nèi)容相似度;使用多個(gè)風(fēng)格圖層,在損失函數(shù)中添加更多不同風(fēng)格的圖片;加入全變分去噪,緩解合成圖像中含有不必要的顆粒情況。
圖片風(fēng)格化的算法主要包含最重要的三部分:內(nèi)容重構(gòu)、風(fēng)格表示和樣式轉(zhuǎn)換。風(fēng)格本質(zhì)是各種空間尺度中圖像的紋理、顏色、視覺圖案等。本文算法通過定義內(nèi)容損失函數(shù)保證從上層看生成的圖片與原始圖片類似;通過風(fēng)格損失函數(shù)嘗試獲取所有空間比例的樣式圖片的外觀;利用L-BFGS算法優(yōu)化最終的總變化損失值。Gram矩陣計(jì)算在特定空間尺度模式下不同維度之間特征激活值的相關(guān)性,保證合成圖和樣式圖具有相同的紋理。
(1)
(2) 風(fēng)格表示。利用Gram矩陣計(jì)算樣式圖片中的紋理、顏色和視覺圖案信息,公式如下:
(2)
(3)
樣式損失函數(shù)為:
(4)
(3) 風(fēng)格轉(zhuǎn)換。利用L-BFGS梯度下降算法優(yōu)化生成的總損失度,調(diào)整α和β權(quán)重系數(shù)可調(diào)整content或style在生成圖中的比重??倱p失函數(shù)為:
(5)
本文的核心思想是利用卷積神經(jīng)網(wǎng)絡(luò)將目標(biāo)圖像的內(nèi)容特征表示和風(fēng)格圖像的特征表示進(jìn)行分離,最后進(jìn)行高度化合成。在實(shí)現(xiàn)過程中,分別將內(nèi)容圖像和藝術(shù)風(fēng)格圖像輸入到預(yù)訓(xùn)練好的VGG19模型,接收?qǐng)D像的VGG19模型分別提取這兩幅圖片中的全局特征和抽象特征,計(jì)算這兩種圖片和生成圖片的圖層激活函數(shù)值。神經(jīng)網(wǎng)絡(luò)中不同層級(jí)的激活值使得圖像內(nèi)容在各種空間尺度上進(jìn)行分解,使用三幅圖上計(jì)算的圖層激活值來定義內(nèi)容損失值、樣式損失值和總損失值loss。從隨機(jī)噪聲圖像開始,利用基于Scipy庫的L-BFGS優(yōu)化算法設(shè)置隨梯度下降過程并最小化的總損失函數(shù)值,設(shè)置迭代次數(shù)后生成具有原內(nèi)容和新風(fēng)格的合成圖像。具體的技術(shù)實(shí)現(xiàn)流程如圖4所示。
圖4 圖像風(fēng)格遷移技術(shù)的實(shí)現(xiàn)流程
實(shí)驗(yàn)使用Keras框架搭建網(wǎng)絡(luò),本實(shí)驗(yàn)中Keras框架由純Python編寫的基于Tensorflow為后端。它是一個(gè)高層神經(jīng)網(wǎng)絡(luò)的API,可以迅速地將想法轉(zhuǎn)換為結(jié)果,允許簡(jiǎn)單而快速的原型設(shè)計(jì),更適配卷積神經(jīng)網(wǎng)絡(luò),模型庫中含有很多經(jīng)典的模型使得深度學(xué)習(xí)的建模與算法設(shè)計(jì)較為方便。實(shí)驗(yàn)硬件平臺(tái)為Intel(R) Core(TM) i7-4790 CPU主頻3.60 GHz,16 GB內(nèi)存,AMD Radeon R5 340 CPU。
為驗(yàn)證不同內(nèi)容圖片與不同藝術(shù)風(fēng)格的遷移效果,本文進(jìn)行了大量的實(shí)驗(yàn)。為突出研究的趣味性和藝術(shù)性,本文僅僅給出了選擇素描人像、上海外灘作為目標(biāo)內(nèi)容圖片,選擇具有代表性的梵高作品《星月夜》和色彩鮮明的油畫兩種風(fēng)格作為藝術(shù)風(fēng)格圖作為案例。
實(shí)驗(yàn)1選擇素描人像作為目標(biāo)內(nèi)容圖片,色彩鮮明的油畫作為藝術(shù)風(fēng)格圖。
實(shí)驗(yàn)1使用了兩幅素描人像圖像和油畫風(fēng)格圖像。圖5為原始人像圖、油畫和迭代優(yōu)化20次生成的合成效果圖。設(shè)置迭代訓(xùn)練次數(shù)20次,style weight=1,content weight=0.025。通過實(shí)驗(yàn)效果得知,圖像風(fēng)格遷移算法在本組實(shí)驗(yàn)圖片中可有效的實(shí)現(xiàn),但存在訓(xùn)練速度較慢、圖片有失真現(xiàn)象,以及不能自然地將樣式轉(zhuǎn)移到原始圖片中并結(jié)合等問題。
(a) 內(nèi)容圖(b) 樣式圖(c) 合成圖圖5 迭代20次后的人像合成圖
實(shí)驗(yàn)2選擇上海外灘作為目標(biāo)內(nèi)容圖片,梵高的《星月夜》作為藝術(shù)風(fēng)格圖。
在實(shí)驗(yàn)2中分別選擇上海外灘和梵高畫作《星月夜》分別作為內(nèi)容圖和風(fēng)格圖。實(shí)驗(yàn)設(shè)置環(huán)境與實(shí)驗(yàn)1相同,但迭代優(yōu)化次數(shù)增加至150次。圖6中,(a)為目標(biāo)圖上海外灘、(b)為藝術(shù)風(fēng)格圖星月夜、(c)為合成效果圖。圖7中,生成第45張圖的損失值1.017 29e+08最低,第46次到第150次迭代中,損失值從9.981 48e+07降低至4.217 42e+07。這說明迭代45次時(shí),兩幅圖像合成的匹配度最高,但樣式不夠清晰,隨著迭代次數(shù)的增加,樣式轉(zhuǎn)移度越來越高,但紋理清晰度下降。
(a) (b) (c)圖6 上海外灘和梵高-星月夜的內(nèi)容圖、樣式圖和合成圖
(a) 原始圖(b) 迭代14次(c) 迭代50次(d) 迭代150次 Loss value:1.01729e+08 Loss value:9.20596e+07 Loss value:4.21742e+07圖7 目標(biāo)內(nèi)容圖、迭代次數(shù)為44、50、150的合成圖
為測(cè)試文中算法的有效性,改進(jìn)實(shí)驗(yàn)1的不足,在本組實(shí)驗(yàn)中增加了VGGNet網(wǎng)絡(luò)中的VGG16模型。具體模型區(qū)別如下:VGG16包含13個(gè)卷積層,VGG19包含16個(gè)卷積層。兩種模型均迭代150次,對(duì)比實(shí)驗(yàn)結(jié)果如表1所示。
表1 不同網(wǎng)絡(luò)模型在不同迭代次數(shù)下的總損失度
可以看出,VGG16和VGG19模型均在迭代45次時(shí)損失度最低,合成匹配度最高。但隨著迭代次數(shù)增加至150次,VGG19模型的合成損失度明顯低于VGG16模型。圖8為VGG16和VGG19兩種模型的合成圖。通過150次迭代優(yōu)化后,明顯看出VGG19圖像遷移的合成圖效果更好,而VGG16合成圖出現(xiàn)明顯的失真效果。本文提出的算法對(duì)于層數(shù)較高的卷積神經(jīng)網(wǎng)絡(luò)VGG19模型具有一定的優(yōu)勢(shì),雖然利用兩種不同的VGGNet模型,但匹配程度最佳均為第45次迭代,VGG19在合成圖片的過程中準(zhǔn)確率更高,合成效果更優(yōu)。
(a) VGG16合成圖(b) VGG19合成圖圖8 對(duì)比VGG16和VGG19兩種模型合成圖
依據(jù)風(fēng)格轉(zhuǎn)換總損失函數(shù)公式,調(diào)整content和style的所占比重,可看出不同效果的實(shí)驗(yàn)結(jié)果圖。合理選擇比重所占比,才可實(shí)現(xiàn)匹配度較佳的風(fēng)格遷移技術(shù)。表2為VGG19訓(xùn)練圖片迭代次數(shù)45次的不同content和style占比損失度表。圖9為三種不同權(quán)重占比合成效果圖。增加內(nèi)容權(quán)重占比可提高合成圖中的內(nèi)容原始度,設(shè)置style weight=0.025、content weight=1,樣式圖星月夜遷移效果明顯下降。設(shè)置style weight=1、content weight=0.5時(shí),內(nèi)容圖上海外灘較清晰。設(shè)置style weight=1、content weight=0.025時(shí)實(shí)現(xiàn)圖像遷移算法后的合成匹配度最佳、損失度最低。
表2 VGG19迭代45次下調(diào)整權(quán)重占比損失度
(a) style weight=0.025 content weight=1 (b) style weight=1 content weight=0.5(c) style weight=1 content weight=0.025圖9 三種不同權(quán)重占比合成效果圖
本文在Gatys等提出的Gram矩陣算法基礎(chǔ)上,采用靈活性較好的VGG19網(wǎng)絡(luò)作為核心模型,提出了一種基于VGGNet的圖像風(fēng)格遷移算法設(shè)計(jì)與實(shí)現(xiàn),有效地實(shí)現(xiàn)了不同風(fēng)格圖像間的風(fēng)格遷移。實(shí)驗(yàn)表明,本文算法適用于風(fēng)格遷移,能夠生成逼真的藝術(shù)性合成圖像,在深度學(xué)習(xí)Keras框架的基礎(chǔ)上,實(shí)現(xiàn)過程較為簡(jiǎn)單,選擇合理的迭代訓(xùn)練次數(shù)可使得損失度降到最低、合成圖片的匹配度最佳。生成對(duì)抗網(wǎng)絡(luò)和變分自編碼器(Variational Auto-encoder,VAE)網(wǎng)絡(luò)的誕生可能對(duì)解決這些問題有很大幫助,需進(jìn)一步研究和討論。