余義斌,林治,吳承鑫
(五邑大學(xué)智能制造學(xué)部,江門529020)
傳統(tǒng)的非參數(shù)圖像風(fēng)格遷移主要是基于物理模型的繪制和紋理合成來實(shí)現(xiàn),Efros 和Hertzmann 等人[1-2]早在2001 年就提出了相關(guān)算法。但由于該方法只能提取圖像的底層特征,在處理顏色和紋理較復(fù)雜的圖像時(shí),其輸出圖像合成效果較為粗糙,難以符合實(shí)際需求。隨著深度卷積神經(jīng)網(wǎng)絡(luò)的發(fā)展,Gatys 等人[3]首先使用VGGNet[4]深度網(wǎng)絡(luò)實(shí)現(xiàn)圖像風(fēng)格遷移,他們利用VGGNet 網(wǎng)絡(luò)不同層級特性,將內(nèi)容圖像和風(fēng)格圖像的抽象特征表示進(jìn)行分離,并通過獨(dú)立處理這些高層抽象特征來有效地實(shí)現(xiàn)圖像風(fēng)格遷移,獲得了比傳統(tǒng)方法更加可觀的藝術(shù)效果。
目前,圖像風(fēng)格快速遷移實(shí)現(xiàn)的主要方法[5-9]是使用前饋神經(jīng)網(wǎng)絡(luò)訓(xùn)練{內(nèi)容圖像,目標(biāo)風(fēng)格圖像}單側(cè)數(shù)據(jù),通過對網(wǎng)絡(luò)編碼特征空間中內(nèi)容和風(fēng)格插值進(jìn)行解碼,計(jì)算不同層級所對應(yīng)的損失,實(shí)現(xiàn)風(fēng)格圖像重建。這些方法都取得了較好的效果,但是都存在這樣一個(gè)不足,就是在風(fēng)格強(qiáng)度控制參數(shù)α(0 ≤α ≤1)為零時(shí),輸出圖像風(fēng)格強(qiáng)度與輸入內(nèi)容圖像并不相同,如圖1(a),α=0 時(shí)出現(xiàn)了過擬合情況。針對這個(gè)問題,本文提出了零風(fēng)格圖像重建方法,解決了在輸出圖像風(fēng)格強(qiáng)度過擬合的情況,更加快速有效地實(shí)現(xiàn)風(fēng)格遷移。
Gatys 等人[3]在2016 年通過計(jì)算VGGNet[4]特征空間的內(nèi)容損失Lcontent和風(fēng)格損失Lstyle來重建輸出圖像,其損失函數(shù)為:
其中P 為內(nèi)容圖像,Q 為目標(biāo)風(fēng)格圖像,I 為輸出圖像,α 和β 分別為風(fēng)格損失、內(nèi)容損失的權(quán)重,α,β∈[0 ,1],且α+β=1。
通過在輸出圖像和輸入圖像之間插入前饋網(wǎng)絡(luò)[10-12],解決了Gatys 方法[3]中圖像生成速度慢的問題。不久之后,修改規(guī)范化層[5-7,9]的實(shí)現(xiàn)使得訓(xùn)練好的網(wǎng)絡(luò)嵌入多個(gè)或任意風(fēng)格圖像輸入,并生成混合風(fēng)格或中間風(fēng)格強(qiáng)度的輸出圖像。Dumoulin[5]等人在條件規(guī)范化(CIN)層中使用了多個(gè)風(fēng)格的可學(xué)習(xí)仿射參數(shù),通過更改VGG 特征空間中的二階統(tǒng)計(jì)量,有效地將輸出圖像的風(fēng)格切換為所需風(fēng)格。
此外,Huang 和Belongie[7]提出了另一種自適應(yīng)規(guī)范化層(AdaIN),他們使用VGG 功能的人為設(shè)計(jì)參數(shù)(均值和標(biāo)準(zhǔn)差)來改變特征統(tǒng)計(jì),同時(shí)還使用其AdaIN 層中的均值和標(biāo)準(zhǔn)差的線性插值來控制輸出圖像的風(fēng)格強(qiáng)度,并通過損失函數(shù)(2)式進(jìn)行圖像重建:
其中λ ∈[0 ,1],Lc 與(1)Lcontent中一致,Ls為風(fēng)格損失,與(1)中Lstyle計(jì)算有所區(qū)別。
此外,利用生成對抗網(wǎng)絡(luò)(GAN)也可以快速高效的實(shí)現(xiàn)圖像風(fēng)格遷移,常見類似方法有Pix2pix[13]、CycleGAN[14]和BicycleGAN[15]。雖然這些方法專注于輸出圖像的逼真來實(shí)現(xiàn)所生成圖像的高質(zhì)量,但是這些方法并未專注于風(fēng)格強(qiáng)度控制。
圖2 編碼器-轉(zhuǎn)換器-編碼器網(wǎng)絡(luò)結(jié)構(gòu)
本文方法將風(fēng)格遷移網(wǎng)絡(luò)的訓(xùn)練理解為控制參數(shù)α(0 ≤α ≤1)與輸出圖像風(fēng)格強(qiáng)度之間特定學(xué)習(xí)?;谠撉闆r,已有方法[1,3,4,8,9]使用單側(cè)數(shù)據(jù)對{內(nèi)容圖像,目標(biāo)風(fēng)格圖像}進(jìn)行訓(xùn)練,所得到結(jié)果如圖1(a)α=1 所對應(yīng)的完全風(fēng)格圖像。這種單側(cè)數(shù)據(jù)訓(xùn)練不能保證α <1 所對應(yīng)的風(fēng)格強(qiáng)度的實(shí)際效果。事實(shí)上,用單側(cè)數(shù)據(jù)訓(xùn)練生成的輸出圖像風(fēng)格強(qiáng)度在α=0 出現(xiàn)嚴(yán)重過擬合,與輸入內(nèi)容圖像發(fā)生偏離,如圖1(a)所示。
為了獲得圖1(b)中在α=0 所對應(yīng)的零風(fēng)格強(qiáng)度圖像重建,本文使用如圖2 所示的AdaIN 編碼器-轉(zhuǎn)換器-編碼器網(wǎng)絡(luò)結(jié)構(gòu)模型[7],并在訓(xùn)練階段的每次迭代中增加{內(nèi)容圖像,內(nèi)容圖像}數(shù)據(jù)對,同時(shí)通過增加錨定數(shù)據(jù)訓(xùn)練和利用風(fēng)格插值函數(shù),迅速穩(wěn)定地實(shí)現(xiàn)了零風(fēng)格圖像重建,并更好地進(jìn)行風(fēng)格控制。
圖3 本文方法下的CIN、AdaIN在α=1、α=0 的效果對比
在前饋神經(jīng)網(wǎng)絡(luò)[5,7]訓(xùn)練{內(nèi)容圖像,目標(biāo)風(fēng)格圖像}單側(cè)數(shù)據(jù)的條件下,如圖3 輸出圖像風(fēng)格強(qiáng)度在α=0時(shí)與輸入內(nèi)容圖像并不相同,發(fā)生偏離。單側(cè)訓(xùn)練數(shù)據(jù)對應(yīng)的損失為Lsingle。本文通過在網(wǎng)絡(luò)訓(xùn)練階段的每次迭代中增加{內(nèi)容圖像,內(nèi)容圖像}數(shù)據(jù)對,其對應(yīng)增加的非單側(cè)訓(xùn)練數(shù)據(jù)損失Lnonsingle,通過總損失函數(shù)重建圖像的式子為:
其中,Lcontent(P,I)同(1)式中一致,且Lcontent(P,I)=是在第l 層的內(nèi)容特征表示。Lstyle(Q,I)同(2)中一致:
該式中初始化的解碼器g 以將t 映射回圖像空間,生成風(fēng)格圖像T(P,Q),?i是用于計(jì)算VGG-16 網(wǎng)絡(luò)中每一層的風(fēng)格損失函數(shù),μ 和σ 分別代表均值和標(biāo)準(zhǔn)差函數(shù)。Lreconstrcuct和文獻(xiàn)[16]中一致,正則化Ltv[3]為總變差損失,用于,減小信號的總變化,使其與原始信號緊密匹配,去除不需要的細(xì)節(jié),同時(shí)保留諸如邊緣的重要細(xì)節(jié)。當(dāng)風(fēng)格強(qiáng)度為零時(shí),在零風(fēng)格圖像Iz和內(nèi)容圖像P 之間,還增加了Lreconstrcuct到總損失Ltotal中進(jìn)行內(nèi)容圖像重建。
如圖1(a)所示,已有的方法僅僅使用單側(cè){內(nèi)容圖像,目標(biāo)風(fēng)格圖像}數(shù)據(jù)對去訓(xùn)練前饋網(wǎng)絡(luò),并同時(shí)使用風(fēng)格差值法[5,7,9]實(shí)現(xiàn)圖像風(fēng)格遷移,不能確保輸出圖像的風(fēng)格強(qiáng)度與風(fēng)格控制參數(shù)的更好的控制。
針對風(fēng)格控制參數(shù)和輸出圖像樣式強(qiáng)度之間的特定學(xué)習(xí),我們需要使用附加的錨定數(shù)據(jù)進(jìn)一步訓(xùn)練,同時(shí)產(chǎn)生風(fēng)格控制參數(shù)α(0<α <1)對應(yīng)的中間值的錨定損失Lanchor。錨定損失Lanchor和(3)式中Lsingle的產(chǎn)生方式相同,其計(jì)算式如(4)。在本文中,錨定風(fēng)格損失Lastyle是輸出錨定風(fēng)格圖像Iα和目標(biāo)錨定風(fēng)格圖像Is(α)之間的風(fēng)格距離。然而,從圖像中直接計(jì)算錨定風(fēng)格損失不太可能,因?yàn)闆]有已知目標(biāo)錨定風(fēng)格圖像Is(α)。因此,為了替代Is(α),我們使用完全風(fēng)格特征函數(shù)fs(Q)和零風(fēng)格特征fs(P)[7]的線性差值作為目標(biāo)錨定風(fēng)格特征。然后,錨定風(fēng)格損失能夠用目標(biāo)錨定風(fēng)格特征與輸出錨定風(fēng)格fs(Iα)特征之間的歐氏距離來計(jì)算,如下(4)式:
在訓(xùn)練階段的每次迭代中,將期望的α 值所對應(yīng)的錨定損加到總損失等式(3)中。一旦網(wǎng)絡(luò)被訓(xùn)練為線性回歸器,那么變在網(wǎng)絡(luò)轉(zhuǎn)換器中我們可以通過使用期望的特征函數(shù)f(α)代替原有的α,輸出圖像風(fēng)格強(qiáng)度在α 的變化下實(shí)現(xiàn)更好的控制。
本文使用AdaIN[7]編碼器-轉(zhuǎn)換器-譯碼器神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)如圖2,同時(shí)使用2014 MS-COCO[17]數(shù)據(jù)集作為內(nèi)容圖像訓(xùn)練以及畫家作品數(shù)據(jù)集[18]用于目標(biāo)風(fēng)格圖像訓(xùn)練。將VGG16 網(wǎng)絡(luò)特征提取作為編碼器,其鏡像網(wǎng)絡(luò)作為譯碼器。{relu1_2,relu2_2,relu3_2,relu4_2}層的輸出張量用于風(fēng)格表征,{relu3_3}層的輸出張量用于內(nèi)容表征,使用VGG16 特征提取器作為編碼區(qū)來計(jì)算損失。將損失權(quán)重參數(shù)的值設(shè)置為ωc=1.0、ωt=10-3、ωr=102ωs,同時(shí)通過改變?chǔ)豷(ωs=50,102,103,104)的值來分析該網(wǎng)絡(luò)模型在風(fēng)格損失權(quán)重增加時(shí)如何變化。
在數(shù)據(jù)訓(xùn)練過程中,將圖像的尺寸調(diào)整為短邊256像素,裁剪成240×240 像素,用于數(shù)據(jù)增強(qiáng)。學(xué)習(xí)率為10-4(當(dāng)ωs=104時(shí),學(xué)習(xí)率為10-6),批量大小為4,周期數(shù)為4,PyTorch v0.3.1 框架為CUDA v9.0,CuDNN v7.0 和NVIDIA TITAN-X Pascal。我們使用MS-COCO test2014dataset[17]與畫家作品數(shù)據(jù)集[18]作為用于內(nèi)容圖像和目標(biāo)風(fēng)格圖像測試,并且所有測試圖像在短邊重新調(diào)整為256 像素,不會(huì)在進(jìn)入網(wǎng)絡(luò)之前進(jìn)行裁剪。
如圖3 所示,具有CIN 層或AdaIN 層的網(wǎng)絡(luò)通過使用單側(cè)數(shù)據(jù)[5,7]進(jìn)行訓(xùn)練,并使用一組目標(biāo)風(fēng)格圖像生成高質(zhì)量圖像風(fēng)格,但是在風(fēng)格參數(shù)為零時(shí)輸出圖像嚴(yán)重偏離輸入內(nèi)容圖像(α=0),出現(xiàn)輸出圖像風(fēng)格強(qiáng)度過擬合。相比之下,本文方法解決了該問題,同時(shí)保持了輸出相同質(zhì)量的完全風(fēng)格圖像(α=1)。
為了體現(xiàn)本文方法的優(yōu)越性,我們訓(xùn)練了幾個(gè)具有大量風(fēng)格圖像和不同重量的風(fēng)格損失的網(wǎng)絡(luò)。我們用50 對{模糊內(nèi)容圖像,模糊目標(biāo)風(fēng)格圖像}的測試風(fēng)格遷移,并測量了內(nèi)容損失Lcontent,風(fēng)格損失Lstyle和非單側(cè)數(shù)據(jù)學(xué)習(xí)損失Lnstyle的平均值。當(dāng)α=1(完全風(fēng)格遷移)時(shí),本文的非單側(cè)數(shù)據(jù)學(xué)習(xí)實(shí)現(xiàn)了比原始AdaIN(圖4(a)中的藍(lán)線)更小的平均內(nèi)容損失,同時(shí)保持了原始AdaIN 的幾乎相同的平均風(fēng)格損失和單側(cè)數(shù)據(jù)學(xué)習(xí)下風(fēng)格損失(圖4 中的藍(lán)線(b),(c))。這說明本文實(shí)現(xiàn)的完全風(fēng)格化圖像(圖5(b)的奇數(shù)行)在內(nèi)容損失上比前一種方法(圖5(a)的奇數(shù)行)少,但是卻有相同的風(fēng)格質(zhì)量。當(dāng)α=0(零風(fēng)格強(qiáng)度遷移)時(shí),我們的非單側(cè)數(shù)據(jù)學(xué)習(xí)實(shí)現(xiàn)了比原始AdaIN(圖4(a),(c)中的紅線)小得多的平均內(nèi)容損失,保持較高的平均風(fēng)格損失(圖4(b)中的紅線)。這說明本文中的的零風(fēng)格強(qiáng)度圖像(甚至圖5(b)的行)重建幾乎與原始內(nèi)容圖像一致,而前一種方法的那些(甚至圖5(a)的行)重建圖片完全不同于原始內(nèi)容圖片。
隨著風(fēng)格損失權(quán)重ωs=的增加,內(nèi)容損失在α=1、α=0 以及非單側(cè)數(shù)據(jù)學(xué)習(xí)在α=0 也都隨之增減,如圖4(a)和(c)所示。然而,與AdaIN 相比,本文方法的增量要小得多。這顯示本文方法對輸入圖像的內(nèi)容和風(fēng)格不是很敏感,實(shí)現(xiàn)了更加穩(wěn)定的風(fēng)格化性能。圖5也驗(yàn)證了這種風(fēng)格化的穩(wěn)定性,并顯示了完全風(fēng)格和零風(fēng)格圖像的可比質(zhì)量,同時(shí)具有大范圍的風(fēng)格變化。
圖4 50 對測試數(shù)據(jù)下的平均內(nèi)容、平均風(fēng)格、非單側(cè)數(shù)據(jù)訓(xùn)練下的平均風(fēng)格損失隨ωs 變化曲線
圖5 本文方法與AdaIN實(shí)效果對比
本文研究了基于前饋神經(jīng)網(wǎng)絡(luò)單側(cè)數(shù)據(jù)訓(xùn)練引起的風(fēng)格插值問題,提出了零風(fēng)格圖像重建方法。零風(fēng)格圖像重建是通過在訓(xùn)練階段的每次迭代中增加{內(nèi)容圖像,內(nèi)容圖像}數(shù)據(jù)對,并在前饋網(wǎng)絡(luò)特征空間中計(jì)算所對應(yīng)的非單側(cè)數(shù)據(jù)特征損失來完成。此外,通過分析中間風(fēng)格附加的錨數(shù)據(jù),并在網(wǎng)絡(luò)中對錨數(shù)據(jù)進(jìn)一步訓(xùn)練,同時(shí)使用風(fēng)格差值方法并改進(jìn)差值函數(shù),實(shí)現(xiàn)了風(fēng)格控制參數(shù)與輸出圖像風(fēng)格強(qiáng)度之間的有效控制。從實(shí)驗(yàn)結(jié)果可以看出,零風(fēng)格圖像重建解決了在圖像風(fēng)格在遷移中過擬合問題,并且在遷移過程中沒有附加復(fù)雜度,其風(fēng)格遷移效果更加穩(wěn)定和迅速。