謝志明,劉少鍇,蔡少霖
(汕尾職業(yè)技術(shù)學(xué)院工程學(xué)院,汕尾 516600)
自1987年Alexander Waibel等人提出第一個卷積神經(jīng)網(wǎng)絡(luò)(CNN)——時延網(wǎng)絡(luò)(TDNN),和1988年Zhang提出平移不變?nèi)斯ど窠?jīng)網(wǎng)絡(luò)(SIANN),CNN仍然不被人們所熟知和關(guān)注,直到LeCun于1998年提出基于CNN構(gòu)建的LeNet-5模型并成功應(yīng)用于手寫數(shù)字識別,該模型的成功使得CNN的應(yīng)用得到空前的關(guān)注及大批學(xué)者參與研究。2006年深度學(xué)習(xí)理論提出后,CNN得到更進一步的研究,兩者相輔相成,CNN的深入研究推動著深度學(xué)習(xí)不斷快速向前發(fā)展。2015年Gatys等提出運用CNN來實現(xiàn)圖像風(fēng)格遷移這一目標(biāo),通過分類目標(biāo)內(nèi)容圖像A的內(nèi)容特征和參考風(fēng)格圖像B的風(fēng)格特征實現(xiàn)圖像風(fēng)格遷移,獲得了非常可觀的藝術(shù)效果,此外關(guān)于這方面的諸多研究成果還成功轉(zhuǎn)化成商業(yè)應(yīng)用。為此,本文實驗將依據(jù)VGG算法模型并結(jié)合TensorFlow2框架,利用神經(jīng)網(wǎng)絡(luò)遷移開展圖像風(fēng)格遷移應(yīng)用研究。
VGGNet由牛津大學(xué)的視覺幾何組(visual geometry group,VGG)提出,并在2014年舉辦的ILSVRC賽項中獲得了定位任務(wù)第1名和分類任務(wù)第2名的成績。VGGNet網(wǎng)絡(luò)結(jié)構(gòu)是通過改良AlexNet的層數(shù)得到的,AlexNet是2012年ImageNet競賽目標(biāo)識別任務(wù)賽項的冠軍,該網(wǎng)絡(luò)在LeNet思想啟發(fā)下將CNN應(yīng)用到更深更寬的網(wǎng)絡(luò)中,效果提升明顯。此后,VGGNet在AlexNet基礎(chǔ)上對CNN網(wǎng)絡(luò)進一步改良的過程中發(fā)現(xiàn)網(wǎng)絡(luò)深度與性能的相關(guān)性,通過持續(xù)性地添加小尺寸卷積核來代替大卷積核,當(dāng)網(wǎng)絡(luò)堆疊到一定層數(shù)后,網(wǎng)絡(luò)效果得到進一步改善。目前,主流的VGGNet網(wǎng)絡(luò)結(jié)構(gòu)主要有六種配置模式,其效果展示如表1所列。
從表1可以發(fā)現(xiàn)VGG六種配置中,VGG-16和VGG-19效果最好,由于VGG-16網(wǎng)絡(luò)結(jié)構(gòu)相較簡單,比VGG-19少了3個卷積層,參數(shù)量也相對較少,因此從理論上來說更加適合神經(jīng)網(wǎng)絡(luò)遷移學(xué)習(xí)。后面我們將通過實驗對其驗證,找到最佳VGG模型并進行優(yōu)化。
表1 VGGNet網(wǎng)絡(luò)配置效果及參數(shù)量
VGG模型是由Simonyan等于2014年提出的,模型非常簡單,只有卷積層、最大池化層和全連接層。VGG模型首次提出了小卷積核的優(yōu)勢,在卷積層使用小尺寸卷積核(3×3)可添加更多的卷積層,使得網(wǎng)絡(luò)層次變得更深。VGG-19相比AlexNet的一個重要改進是采用連續(xù)的3×3的卷積核代替AlexNet中的較大卷積核(11×11,7×7,5×5),研究發(fā)現(xiàn)小卷積核的疊加可以使其感受野達到大卷積核的效果。比如2個3×3的卷積核疊加,它們的感受野等同于1個5×5的卷積核,疊加3個卷積核則感受野相當(dāng)于1個7×7的效果,由于感受野相同,又使用ReLU激活函數(shù),網(wǎng)絡(luò)增加了非線性表達能力,從而可以提供更復(fù)雜的模式學(xué)習(xí)。
VGG-19共有16個卷積層,3個全連接層,比VGG-16多了3個卷積層,其全部采用3×3卷積核,步長和Padding統(tǒng)一為1,最大池化層為2×2,N個卷積層和后面緊接的最大池化層為一個block。VGG-19和VGG-16一樣,都共有5個block,每個block的通道數(shù)一致,最大池化層減少特征圖的尺寸。隨著卷積層一層層的運算,卷積核輸出的內(nèi)容變得越來越抽象,特征圖尺寸和留存信息變小變少。Block5完成后將特征圖平鋪成一維數(shù)據(jù)作為全連接層的輸入。最后3層為全連接層,前2層每層具有4096個神經(jīng)元,使用ReLU非線性激活函數(shù),第3層有1000個神經(jīng)元(1000個類別)使用softmax函數(shù)。VGG-19網(wǎng)絡(luò)結(jié)構(gòu)如圖1所示。
圖1 VGG-19神經(jīng)網(wǎng)絡(luò)模型結(jié)構(gòu)
Gatys等認為風(fēng)格參考圖片與生成圖片之間會在不同的層激活過程中保留相似的內(nèi)部相互關(guān)系。風(fēng)格損失使用了CNN多個層,并從所有空間尺度上而非單一尺度上提取風(fēng)格參考圖像外觀特征,依據(jù)特征之間相互關(guān)系映射在特定空間尺度下模式的統(tǒng)計規(guī)律,使用層激活的格拉姆矩陣(Gram matrix),即某一層特征圖的內(nèi)積。風(fēng)格損失主要有以下兩個特點:
(1)在目標(biāo)內(nèi)容圖像和生成圖像之間保持相似的較高層激活能夠保留內(nèi)容。卷積神經(jīng)網(wǎng)絡(luò)能夠“看到”目標(biāo)圖像和生成圖像包含相同的內(nèi)容;
(2)通過在較低和較高的激活層中保持類似的內(nèi)部相互關(guān)系能夠保留風(fēng)格。特征相互關(guān)系捕捉到的是紋理,生成圖像和風(fēng)格參考圖像在不同的空間尺度上具有相同的紋理。
本實驗的實驗環(huán)境為Windows7+Python3.8+TensorFlow2.3.0,CPU為3.40GHz的Inter i7-6700,內(nèi)存為DDR4 16 G,顯卡為NVIDIA GT-720 2 G,CUDA為10.2,使用的神經(jīng)網(wǎng)絡(luò)模型為VGG-16和VGG-19。
(1)導(dǎo)入相關(guān)庫,如TensorFlow,IPython,numpy,matplotlib和time模塊;
(2)自定義編寫圖片預(yù)處理函數(shù),將加載的圖片解碼成像素值數(shù)組并做歸一化處理;
(3)從VGG中挑出風(fēng)格層和內(nèi)容層,風(fēng)格層的輸出旨在代表風(fēng)格圖片的特征,內(nèi)容層的輸出旨在表示內(nèi)容圖片的特征;
(4)對VGG模型輸出重新定義,因為原始的VGG輸出為分類結(jié)果,而風(fēng)格遷移時需要輸出的是兩張圖片的特征;
(6)建立風(fēng)格遷移模型,得到風(fēng)格圖片的風(fēng)格特征和內(nèi)容圖片的內(nèi)容特征;
(7)定義優(yōu)化函數(shù)和損失函數(shù),模型訓(xùn)練不斷迭代,得到風(fēng)格遷移圖片。
本組實驗選取一張海龜為內(nèi)容圖片,隨機選取康丁斯基的一幅抽象畫為風(fēng)格圖片,同時選擇多組內(nèi)容層參數(shù)和風(fēng)格層參數(shù)進行風(fēng)格遷移實驗,找到最佳的參數(shù)組合。如圖2所示。
圖2 不同內(nèi)容層和風(fēng)格層的圖像風(fēng)格遷移結(jié)果
通過實驗我們找到最佳內(nèi)容層和風(fēng)格層組合為content_layers=[‘block5_conv2’],style_layers=[‘block1_conv1’,‘block2_conv1’,‘block3_conv1’,‘block4_conv1’,‘block5_conv1’],同時從圖2中發(fā)現(xiàn)選取的內(nèi)容層越靠前,內(nèi)容圖片保存的數(shù)據(jù)就越豐富,而要得到較好風(fēng)格圖片數(shù)據(jù)盡量選取各blocks的靠前卷積層,這樣得到的風(fēng)格數(shù)據(jù)會更多。
本組實驗根據(jù)找到最佳內(nèi)容層和風(fēng)格層參數(shù)組合,選擇VGG-16和VGG-19模型來對比圖像風(fēng)格遷移效果,內(nèi)容圖片和風(fēng)格圖片選取不變,根據(jù)訓(xùn)練迭代次數(shù)的不同,觀察不同迭代次數(shù)遷移結(jié)果圖像的色彩特征及紋理特征。如圖3所示。
圖3 不同模型不同迭代次數(shù)的圖像風(fēng)格遷移結(jié)果
從圖3可以看出,VGG-16和VGG-19風(fēng)格遷移效果都還是比較成功的,相比之下,VGG-19的圖像色彩表現(xiàn)得更加豐富自然,紋理也更加清晰明亮,這和參數(shù)量多了6 M有一定的關(guān)系,實驗過程還發(fā)現(xiàn)相同條件下訓(xùn)練迭代1000次后,VGG-19耗時會更長,比VGG-16多了500秒左右。
本組實驗仍然選擇同一張海龜為內(nèi)容圖片,并選取4張出自不同畫家的風(fēng)格圖片,以風(fēng)格遷移效果最優(yōu)的VGG-19為網(wǎng)絡(luò)模型,在相同的訓(xùn)練迭代次數(shù)(1000次)的情況下,得到的圖像風(fēng)格遷移結(jié)果分別如圖4所示。
圖4 不同風(fēng)格圖片迭代1000次的圖像風(fēng)格遷移結(jié)果
從圖4可以看出,當(dāng)采用同一內(nèi)容圖像,不同的風(fēng)格圖像,在相同的模型參數(shù)和訓(xùn)練次數(shù)的情況下,風(fēng)格遷移結(jié)果也各不相同,展現(xiàn)的色彩特征、紋理特征等也存在較大差異;此外,我們還發(fā)現(xiàn)使用總變分損失可以有效減少因圖片本身小而花紋經(jīng)頻繁卷積加強后被強化的噪聲,因此有很好的降噪作用,這也正體現(xiàn)了VGG網(wǎng)絡(luò)結(jié)構(gòu)具有很好的魯棒性和普適性。
本文以TensorFlow2為深度學(xué)習(xí)框架、VGG為網(wǎng)絡(luò)模型,通過實驗分析圖像風(fēng)格遷移的有效性。VGGNet通過使用小卷積核代替大卷積核,有效地加深了網(wǎng)絡(luò)深度,并使用ReLU作為激活函數(shù),提升了復(fù)雜模式的學(xué)習(xí)能力。通過實驗對比VGG-16和VGG-19兩種網(wǎng)絡(luò)結(jié)構(gòu),找到最佳的風(fēng)格遷移效果模型為VGG-19;最后使用多張不同風(fēng)格圖片放到VGG-19模型中來驗證圖像風(fēng)格遷移效果,發(fā)現(xiàn)遷移后的圖像既保證了內(nèi)容圖像的完整性,同時具有風(fēng)格圖像的色彩、紋理等特性,符合圖像風(fēng)格遷移特點,效果較好。