【畫風遷移】 Fast Neural Style

上週寫了深度學習與藝術——畫風遷移 Neural Style的文章,這周就來聊一聊Fast Neural Style,從名字可以看出,Fast Neural Style的最大的特色就是快,也就是說如果再優化網絡配置ok的話完全可以達到落地應用的地步了。

0 回顧Neural Style

在聊Fast Neural Style之前,我們先來回顧一下Neural Style,其實用Gatys的一張圖就可以解釋Neural Style在做什麼(如下圖)。Neural Style是Gatys提出的不同於傳統風格遷移的一種新方式,它利用卷積神經網絡可以完成不同圖像之間的風格遷移,使人們產生一種視覺上的“錯覺”。

1 Fast Neural Style

Fast Neural Style論文:Perceptual Losses for Real-Time Style Transfer and Super-Resolution
論文鏈接:https://arxiv.org/abs/1603.08155

1.1 Fast Neural Style的兩個任務

Fast Neural Style主要是有兩個任務:風格遷移任務和單張圖像的超分辨率任務。 風格遷移任務同Neural Style相同,將圖像A的風格前已在圖像B的內容上,生成具有圖像A風格且與圖像B內容相同的圖像C;單張超分辨率任務指的是從輸入的低分辨率圖像生成一張高分辨率的圖像。Fast Neural Style的體系含有兩部分,分別是圖像遷移網絡(image transformation network , fWf_W損失網絡(a loss network , ϕ\phi ,如下圖所示;

1.2 Image Transform Net

基本的結構是用了五個殘差模塊;沒有池化層,用的是卷積步長>1和卷積步長<1的卷積來進行下采樣和上採樣;激活函數用的書Relu激活函數;卷積核的大小是9x9和3x3;
【不同的任務輸入圖像輸出圖像的尺寸是不同的】
對於風格遷移任務:input——256x256x3;output——256x256x3;
對於超分辨率任務:input——(288/f)x(288/f)x3;output——288x288x3;
【Downsampling下采樣和Upsampleing上採樣】
對於風格遷移任務,網絡先使用的是步長爲2的卷積殘差塊去下采樣,再使用2層卷積層使用步長爲0.5的上採樣。雖然輸入和輸出具有相同的大小,但先下采樣後再上採樣對網絡仍有益處:一是可以減少計算量,二是可以有益於可接受的感受野。

1.3 Loss Network

在我們要了解loss network之間,我們先來看一下損失函數(要保證損失函數可微可導可回傳)。其實我們可以這樣理解損失函數:之所以有損失函數,是因爲我們生成的和真實存在的或者是ground truth之間存在着差異,我們要找到一種數學上的方式來描述這種差異,並且可以在迭代和優化中不斷縮小這種差異,所以損失函數在一個網絡中是十分重要的。網絡用兩個感知損失函數定義了不同圖像之間的高水平感知和語義差距;並且用了在ImageNet數據集上預訓練的VGG16的網絡。
【特徵重構損失函數】Feature Reconstructions Loss
特徵重構的意義不在於逐個像素點的match,而是想要得到特徵的相似,也就是說我們要在Feature Map上有一種關係,假設我們在j層上的輸出Feature Map的大小是:CjHjWjC_j * H_j *W_j,那麼,我們用歐氏距離來衡量這種特徵相似性,如下式:
lfeatϕ,j(y^,y)=1CjHjWjϕj(y^)ϕj(y)22(2)l^{\phi , j}_{feat}(\hat{y},y) = \frac{1}{C_jH_jW_j} || \phi_j(\hat{y})-\phi_j({y}) ||_2^2 \tag2
(個人理解) 在特徵圖上的相似性可以看做找到了像素相似性和語義相關性的平衡,是我們訓練的模型不會看起來非常像(像素值非常接近),不會看起來一點兒也不像(基本特徵都沒有學習到)。
【風格重構損失函數】Style Reconstruction Loss
我們希望訓練的模型除了關注特徵上的相似性以外,還要關注顏色、紋理、普通模式等等風格上的相似性,所以提出了Style Reconstruction Loss(Gatys)。我們在j層上的Feature map用Gram矩陣來描述這種差距,如下式(3);那麼我們就可以得到所有層的風格重構損失了,如下式(4);
Gjϕ(x)c,c=1CjHjWjh=1Hjw=1Wjϕj(x)h,w,cϕj(x)h,w,c(3)G_j^{\phi}(x)_{c,c'} = \frac{1}{C_jH_jW_j} \sum_{h=1}^{H_j} \sum_{w=1}^{W_j} \phi_j(x)_{h,w,c} \phi_j(x)_{h,w,c'} \tag3

lstyleϕ,j(y^,y)=Gjϕ(y^)Gjϕ(y)22(4)l^{\phi,j}_{style}(\hat{y},y) = ||G_j^{\phi}(\hat{y})-G_j^{\phi}({y})||^2_2 \tag4

1.4 Simple Loss Functions

除了定義了感知函數,我們還定義了兩個簡單的只取決於低層次像素信息的損失函數,分別是像素損失(Pixel Loss) 和 全變正則化(Total Variation Regularization,lTV(y^)l_{TV} ( \hat{y} ))。

2 實驗 Experiments

如上所知,Fast Neural Style主要是有兩個任務:風格遷移任務和單張圖像的超分辨率任務,我們來看一下都進行了些什麼樣的實驗。

2.1 風格遷移任務 Style Transform

我們要得到一張具有A圖像內容(下稱圖像ycy_c)具有B圖像風格(下稱圖像ysy_s)的圖像C(也就是我們的生成目標y^\hat{y}),這就要求我們的圖像C有了兩個目標targets——ycy_cysy_s;基於兩個目標要求我們的損失函數要在特徵重構lfeatl_{feat}和風格重構lstylel_{style}上都要有所涉及,作者還巧妙的加了一個正則項lTVl_{TV},如下式:
y^=argminy  λclfeatϕ,j(y,yc)+λslstyleϕ,J(y,ys)+λTVlTV(y)(5) \hat{y}= \mathop {\arg\min}_{y} \ \ \lambda_cl_{feat}^{\phi,j}(y,y_c)+\lambda_sl_{style}^{\phi,J}(y,y_s)+\lambda_{TV}l_{TV}(y) \tag5

其中,λc\lambda_c,λs\lambda_sλTV\lambda_{TV}是超參數。具體訓練細節參見論文。在結果(下圖)中我們可以看到,訓練過的風格遷移網絡有一種對於圖像語義內容的意識。比如說圖中背景部分比較雜亂沒有辦法辨認出來而前景物體效果較好——作者也因此做了及時:作者認爲預訓練的VGGNet-16網絡對於人類或者動物具有選擇性的特徵。


在速度方面Fast Neural Style也有一定的優勢,處理512x512的圖像可以達到20FPS,這也是圖像風格遷移有機會應用到實際應用和視頻中。

2.2 單張圖像的高分辨率任務 Single-Image Super-Resolution

在單張圖像的高分辨率中,我們的任務就是從一張輸入的低分辨率的圖像生成一張高分辨率的圖像。這並不是有統一解的問題,因爲使用的生成方法不同,生成的高分辨率的圖像是不同的。


我們只關注與x4倍和x8倍的分辨率問題,因爲更大的分辨率要有更多的語義推理。爲了克服低分辨率轉高分辨率的問題,我們不再使用逐像素的損失,而使用特徵重構損失lfeatl_{feat}。用於評價超分辨率問題的傳統評估度量是——PSNR和SSIM,雖然我們的網絡並不旨在這兩個評估度量都取得優異效果,但這也從側面反映了我們訓練像素損失和重構損失的可靠性。
在超分辨率的任務裏,我們用了SRCNN的三層卷積層網絡,用於在ILSVRC 2013檢測數據集的33×33塊上最小化每個像素的損失。SRCNN沒有訓練×8倍的超分辨率,所以我們只能在×4倍上對其進行評估。和其他方法相比,我們訓練的特徵重構模型在重構尖銳的邊緣和具體的細節表現了良好的性能,雖然有可能會在PSNR和SSIM上有一定的影響。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章