金智功,周孟然
(安徽理工大學(xué) a.計算機科學(xué)與工程學(xué)院;b.電氣與信息工程學(xué)院 ,安徽 淮南 232000)
圖像風(fēng)格遷移就是指將一張風(fēng)格圖片的藝術(shù)風(fēng)格遷移到另一張內(nèi)容圖片上,最后得到一張生成圖片。使得圖像在保證內(nèi)容特征不發(fā)生大的改變的情況下學(xué)習(xí)到藝術(shù)風(fēng)格,如圖1所示。
(a)內(nèi)容圖像 (b)風(fēng)格圖像 (c)生成圖像
早期的風(fēng)格遷移有基于紋理合成和基于非真實感渲染兩種。其中基于紋理合成的方法有Julesz[1]提出的基于紋理建模來進行特征提取的方法,用獲得的像素進行n階信息統(tǒng)計特征的相似程度來表達視覺上的差異;Bergen[2]等人用金字塔圖片來匹配不同尺度的濾波器響應(yīng)直方圖來分析紋理,而非直接統(tǒng)計像素點??偟膩碚f,參數(shù)化紋理建模就是先用濾波器提取圖像的紋理特征,之后用重采樣方法合成新的紋理?;诜钦鎸嵏袖秩镜姆椒ㄓ蠰u[3]提出的通過對筆觸的交叉、拖尾和顏色混合的處理,將原來的圖像渲染成多色彩立體風(fēng)格圖像;Wang[4]使用了通過顏色轉(zhuǎn)換、基于顯著性的細(xì)節(jié)層次圖繪制、手震模擬和濕畫效應(yīng)模擬,最后產(chǎn)生藝術(shù)還原度極高的水彩畫圖像的方法;Hertzmann等人[5]提出了使用一系列長而彎曲的筆觸,通過選擇源圖像的色彩,將風(fēng)格表示為一組直觀參數(shù),通過調(diào)整參數(shù)改變繪畫風(fēng)格,但是基于筆觸的算法是根據(jù)某一種特定的風(fēng)格設(shè)計的,不能模擬任意的樣式,局限性較大。
隨著深度學(xué)習(xí)的興起,Gatys等人[6]利用遷移學(xué)習(xí)[7]使用了在Imagnet數(shù)據(jù)集上預(yù)訓(xùn)練好了卷積神經(jīng)網(wǎng)絡(luò)(Convolutional Neural Networks,CNN)模型來實現(xiàn)了圖像風(fēng)格遷移。同時定義了基于卷積神經(jīng)網(wǎng)絡(luò)風(fēng)格遷移方法的損失函數(shù),利用較高的卷積層特征來提供內(nèi)容損失和綜合多個卷積層的特征圖來提供風(fēng)格損失。從而使計算機辨別并學(xué)會藝術(shù)風(fēng)格,從而用到普通照片上,就可成功地實現(xiàn)圖像風(fēng)格遷移。這種使用深度學(xué)習(xí)的風(fēng)格遷移方法的效果要遠(yuǎn)遠(yuǎn)好于傳統(tǒng)方法。
之后,劉洪麟等[8]提出了一種具有空間約束的快速神經(jīng)風(fēng)格遷移方法,可以使圖像風(fēng)格遷移效果更優(yōu);孫勁光等[9]采用殘差式神經(jīng)網(wǎng)絡(luò)完成了圖像特定區(qū)域的風(fēng)格化。但是都沒有對風(fēng)格遷移算法的網(wǎng)絡(luò)進行研究,都是沿用之前圖像風(fēng)格遷移算法的網(wǎng)絡(luò)。并且一次算法運行過程中,只能遷移單一的風(fēng)格。所以本文對風(fēng)格遷移算法做了完善:1)測試了計算機視覺領(lǐng)域幾種典型的卷積神經(jīng)網(wǎng)絡(luò)用于風(fēng)格遷移效果,并提出了一種更加適用于圖像風(fēng)格遷移的卷積神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu);2)對風(fēng)格遷移的損失函數(shù)做了改進,可以使一張圖片同時遷移多種不同的藝術(shù)風(fēng)格。
卷積神經(jīng)網(wǎng)絡(luò)是一種具有深度結(jié)構(gòu)的前饋神經(jīng)網(wǎng)絡(luò)(Feedforward Neural Networks),是深度學(xué)習(xí)領(lǐng)域最常使用算法之一。其基本結(jié)構(gòu)由輸入層、卷積層、池化層、全連接層及輸出層構(gòu)成。卷積層通過卷積核與輸入的圖像進行卷積操作,得到特征圖,卷積神經(jīng)網(wǎng)絡(luò)也由此而得名。一般若干個卷積層之后會接一個池化層,然后這樣交替設(shè)置,池化層主要有最大池化和平均池化兩種,其中最大池化比較常用。經(jīng)多個卷積層和取樣層后,會連接1個或者以上的全連接層。全連接層可以整合卷積層和池化層中具提取的特征信息,最后一層全連接層將最后輸出值傳遞給的輸出層。
最早是卷積神經(jīng)網(wǎng)絡(luò)是于上個世紀(jì)90年代提出的時間延遲網(wǎng)絡(luò)和LeNet-5。[10]但是到2012年,卷積神經(jīng)網(wǎng)絡(luò)才真正開始走進了人們的視野。在Imagenet圖像識別大賽上Alexnet[11]引入了全新的深層結(jié)構(gòu)和dropout方法,在圖片分類方面將正確率從75%提升到85%以上遠(yuǎn)遠(yuǎn)超過第二名,顛覆了圖像識別領(lǐng)域。從此卷積神經(jīng)網(wǎng)絡(luò)開始在計算機視覺領(lǐng)域開始了廣泛的應(yīng)用。
Bianco等人[12]對目前用于圖像識別的大多數(shù)卷積神經(jīng)網(wǎng)絡(luò)進行了深入的分析,通過觀察多個性能指標(biāo)。例如,在Imagnet數(shù)據(jù)集上TOP1和TOP5的準(zhǔn)確率,模型的結(jié)構(gòu)復(fù)雜度,訓(xùn)練網(wǎng)絡(luò)耗時和參數(shù)數(shù)量等等。這項工作幫助了后來從事計算機視覺的研究人員全面了解了這些網(wǎng)絡(luò)的性能,以及未來值得去研究的方向,并為從業(yè)者選擇更適合實際部署和應(yīng)用的資源限制的卷積神經(jīng)網(wǎng)絡(luò)架構(gòu)。使用其中幾種典型的在Imagenet數(shù)據(jù)集上有著優(yōu)秀表現(xiàn)的預(yù)訓(xùn)練卷積神經(jīng)網(wǎng)絡(luò)模型VGG19[13],Resnet50[14],InceptionV3[15]和NasnetMobile[16]等實現(xiàn)風(fēng)格遷移算法,結(jié)果如圖2所示。
(a)內(nèi)容圖片 (b)風(fēng)格圖片 (c)VGG19結(jié)果
(d)Resnet50結(jié)果 (e)InceptionV3結(jié)果 (f)NasnetMobile結(jié)果
從圖2可以看出VGG19和InceptionV3的風(fēng)格遷移效果較好,而Resnet50和NasnetMobile的風(fēng)格遷移效果則很差。圖(c)很好的遷移的風(fēng)格圖片的紋理,但是圖像出現(xiàn)一定程度的扭曲和細(xì)節(jié)丟失,如圖片右下角的石獅子就幾乎消失了;圖(d)不僅沒有遷移風(fēng)格,而且產(chǎn)生了大量噪聲使圖片變得模糊;圖(e)很好的保存了圖片的細(xì)節(jié),但是紋理感不強,最后圖(f)相較于內(nèi)容圖片則沒有多大的改變只是整幅圖片的顏色發(fā)生了少許變化。
Zeiler等人[17]提出了三種卷積神經(jīng)網(wǎng)絡(luò)可視化方法,分別為卷積核輸出的可視化、卷積核的可視化和熱度圖的可視化。通過其中的卷積核輸出可視化方法可以發(fā)現(xiàn)卷積神經(jīng)網(wǎng)絡(luò)的低層主要是學(xué)習(xí)一些線條,顏色,花紋等特征,而高層則學(xué)習(xí)到了一些更加具體的特征如狗的臉和鳥的翅膀等圖案。而圖像風(fēng)格遷移中的藝術(shù)風(fēng)格通常指的就是一些線條,顏色和花紋等基礎(chǔ)特征。所以隨著卷積神經(jīng)網(wǎng)絡(luò)層數(shù)的加深對風(fēng)格遷移的效果理論上不會有太大的提升。于是,分別取VGG19網(wǎng)絡(luò)的“block1_covn1”,“block2_covn1”,“block3_covn1”,“block4_covn1”,“block5_covn1”和InceptionV3網(wǎng)絡(luò)的“covn2d_2”,“covn2d_5”,“mixed0”,“mixed4”,“mixed7”各5個卷積層作了實驗,如圖3所示。
(a)block1_covn1 (b)block2_covn1 (c)block3_covn1 (d)block4_covn1 (e)block5_covn1
(f)covn2d_2 (g)covn2d_5 (h)mixed0 (i)mixed4 (j)mixed7
從圖3中的(a), (b), (c), (d), (e),可以看出,VGG19網(wǎng)絡(luò)中“block3_covn1”層和前面的卷積層風(fēng)格遷移效果差異較大而與之后的層差異則很小。從圖3中的(f), (g), (h), (i), (j)中可以發(fā)現(xiàn)InceptionV3與VGG19類似,InceptionV3的“miexd0”之前層風(fēng)格遷移差異較大,而之后的層則幾乎沒有變化,說明網(wǎng)絡(luò)的深度對于風(fēng)格遷移效果的影響并不是最主要的因素。所以在設(shè)計風(fēng)格遷移網(wǎng)絡(luò)時,可以不用追求太深的網(wǎng)絡(luò)。因為網(wǎng)絡(luò)的深度不能使風(fēng)格遷移的效果有太大的提升,可以選擇增加網(wǎng)絡(luò)的寬度來提升風(fēng)格遷移的效果。第一步將VGG19和InceptionV3網(wǎng)絡(luò)并聯(lián)起來,第二步根據(jù)上面實驗的結(jié)果,所以選取VGG19網(wǎng)絡(luò)中“block3_conv2”之前的層和InceptionV3網(wǎng)絡(luò)中第二個InceptionA模塊前所有的層來搭建網(wǎng)絡(luò)。本文的風(fēng)格遷移網(wǎng)絡(luò)結(jié)構(gòu)如圖4所示。
圖4 風(fēng)格遷移網(wǎng)絡(luò)結(jié)構(gòu)圖
本文的風(fēng)格遷移網(wǎng)絡(luò)結(jié)構(gòu)比VGG19減少了95.1%的參數(shù),比InceptionV3減少了95.5%的參數(shù),具體如表1所示。同時大大減少了需要占用的內(nèi)存空間,并提高了網(wǎng)絡(luò)的運算速度。又將兩種網(wǎng)絡(luò)并聯(lián)起來可以獲得更加豐富的圖像底層特征,兼顧了兩種網(wǎng)絡(luò)在風(fēng)格遷移方面的優(yōu)點。
表1 參數(shù)數(shù)量表
圖像風(fēng)格遷移的損失函數(shù)Ltotal主要分為兩個部分:
Ltotal=αLcontent+βLstyle
(1)
其中:Lcontent為內(nèi)容損失,描述了輸入的內(nèi)容圖像與生成圖像在內(nèi)容上的差別,該損失函數(shù)值越小,表示處理前后的圖在內(nèi)容上越接近,反之則越大;Lstyle為風(fēng)格損失,描述了生成圖片與風(fēng)格圖片之間的風(fēng)格差異,風(fēng)格損失越小圖像藝術(shù)化程度越高。
(2)
(3)
(4)
(5)
通常會使用多層卷積層來計算風(fēng)格損失,同時為每層設(shè)置一個權(quán)重系數(shù)wl,則最終的風(fēng)格損失函數(shù)為:
(6)
為了驗證方法的有效性,在Windows10 64位系統(tǒng)下,使用基于Python的Tensorflow[18]框架,實現(xiàn)本文的圖像風(fēng)格遷移算法。同時使用ImageNet數(shù)據(jù)集上預(yù)訓(xùn)練好的VGG19和InceptionV3網(wǎng)絡(luò)的權(quán)重。機器配置為inter i7-9750H CPU,16G內(nèi)存和NVIDA GeForce GTX 1660Ti 6G顯卡。
使用圖2(a)作為內(nèi)容圖片,圖2(b)作為風(fēng)格圖片。并且根據(jù)公式(6),設(shè)本文的風(fēng)格遷移網(wǎng)絡(luò)VGG19部分的卷積層權(quán)重為wvgg,InceptionV3部分的卷積層權(quán)重為winception,令winception:wvgg的比值分別為和100,102,104和106,迭代次數(shù)為500次,來進行實驗,結(jié)果如圖5所示。
(a)winception:wvgg=100 (b)winception:wvgg=102 (c)winception:wvgg=104 (d)winception:wvgg=106
從圖中可以看出,圖5中的(a)和圖2中的(c)結(jié)果相似,圖5中的(d)和圖2中的(e)結(jié)果相似,而圖5中的(b)和(c)的效果介于圖2中的(c)和(e)之間。這說明本文的風(fēng)格遷移網(wǎng)絡(luò)可以通過調(diào)節(jié)winception:wvgg的比值來調(diào)節(jié)風(fēng)格遷移的效果。
最后,調(diào)整winception:wvgg的比值到103這個數(shù)量級,取得的風(fēng)格遷移效果最佳。并且與VGG19與InceptionV3網(wǎng)絡(luò)的風(fēng)格遷移結(jié)果的細(xì)節(jié)做了一個對比,如圖6所示。
(a)整體效果 (b)Ours (c)VGG19 (d)InceptionV3
對比圖6中(b)和(c),可以看出相比于VGG19的遷移效果,這里的圖像并沒有出現(xiàn)扭曲。對比圖6的(b)和(d),(b)的紋理要比InceptionV3要清晰,兼顧了兩種網(wǎng)絡(luò)的優(yōu)點。同時引入了峰值信噪比(PSNR)和結(jié)構(gòu)相似性(SSIM)兩個指標(biāo)來對我們的風(fēng)格遷移效果進行評價。其中PSNR用來衡量圖片的失真情況,PSNR的值越大則失真越?。籗SIM用來衡量圖像的結(jié)構(gòu)相似性,SSIM值越高則兩幅圖像越相似。結(jié)果如表2所示:
表2 三種模型風(fēng)格遷移時間對比表
從表中可以看出,本文的方法在PSNR和SSIM兩項指標(biāo)上都要比VGG19和InceptionV3兩種方法略高一些。同時本文的網(wǎng)絡(luò)迭代速度比VGG19提升了47%,比InceptionV3提升了22%,具體如表3所示。
表3 三種模型風(fēng)格遷移時間對比表
Gatys方法中提出的原始風(fēng)格損失函數(shù)只能在一次風(fēng)格遷移過程中只能讓內(nèi)容圖片學(xué)習(xí)到單一的風(fēng)格圖片的風(fēng)格,為了使內(nèi)容圖片可以在一次風(fēng)格遷移過程中同時學(xué)習(xí)到多種不同的風(fēng)格,我們對Gatys損失函數(shù)的風(fēng)格損失部分(4),做出了改進得到公式(5)。使得一張內(nèi)容圖片可以在一次風(fēng)格遷移過程中學(xué)習(xí)到多種不同的藝術(shù)風(fēng)格。
于是,使用圖2(a)作為內(nèi)容圖片,使用梵高的《星夜》作為第一幅風(fēng)格圖像,《神奈川沖浪里》作為第二幅風(fēng)格圖像。并分別做風(fēng)格遷移與多風(fēng)格遷移的結(jié)果做出了對比,結(jié)果如圖7所示。
(a)風(fēng)格圖像1 (b)單風(fēng)格遷移結(jié)果1 (c)多風(fēng)格遷移結(jié)果 (d)單風(fēng)格遷移結(jié)果2 (e)風(fēng)格圖像2
本文使用了目前計算機視覺領(lǐng)域幾種常用的卷積神經(jīng)網(wǎng)絡(luò)來實現(xiàn)風(fēng)格遷移算法,并在此基礎(chǔ)上構(gòu)建了一種新的風(fēng)格遷移網(wǎng)絡(luò)模型。降低了網(wǎng)絡(luò)參數(shù),并提高了算法的運行速度和效果,同時為以后研究圖像風(fēng)格遷移的人員在網(wǎng)絡(luò)選擇和設(shè)計方面提供了參考。最后對Gatys提出的風(fēng)格損失函數(shù)做了改進,使得算法可以同時對一幅圖片遷移多種不同的藝術(shù)風(fēng)格。