風格遷移網絡

生成網絡與損失網絡

快速風格遷移的網絡結構包含兩個部分。一個是生成網絡(Transformation Network),一個是損失網絡(Loss Network)。生成網絡是將輸入圖像進行風格遷移後輸出,損失網絡用以計算生成圖像的內容損失和風格損失。

對於生成網絡,本質上是一個卷積神經網絡,但不採用池化層,取而代之的是用步幅卷積或微步幅卷積做網絡內的上採樣或下采樣。神經網絡有五個殘差塊組成,除了最末的輸出層以外,所有的非殘差卷積層都跟着一個空間性的Instance NormalizationRELU的非線性層(Instance Normalization正則化是用來防止過擬合,RELU防止梯度消失)。最末層使用一個縮放的Tanh來確保輸出圖像的像素在[0,255]之間。除了第一層和最後一層採用9x9的卷積核(kernel),其他所有卷積層都用3x3的卷積核。

損失網絡φ定義內容損失(content loss)和一個風格損失(style loss),分別衡量內容和風格上的差距。對於每一張輸入的圖片x我們有一個內容目標yc一個風格目標ys,對於風格轉換,內容目標yc是輸入圖像x,輸出圖像y,應該把風格ys結合到內容x=yc上。系統爲每一個目標風格訓練一個網絡,爲確保所用到的損失函數能更好的衡量圖片感知及語義上的差距,需要使用一個預先訓練好用於圖像分類的CNN,這個CNN已經學會感知和語義信息編碼,這正是圖像風格轉換系統的損失函數中需要做的。所以使用了一個預訓練好用於圖像分類的網絡φ,來定義系統的損失函數。之後使用同樣是深度卷積網絡的損失函數來訓練我們的深度卷積轉換網絡。損失網絡雖然也是卷積神經網絡(CNN),但是參數不做更新,只用來做內容損失和風格損失的計算,訓練更新的是前面的生成網絡的權值參數。所以從整個網絡結構上來看輸入圖像通過生成網絡得到轉換的圖像,然後計算對應的損失,整個網絡通過最小化內容和風格損失不斷地更新前面的生成網絡權值。

在求損失的過程,從預訓練好的損失網絡中提取高級特徵,使用感知損失函數代替逐像素損失函數。在訓練的過程中,感知損失函數比逐像素損失函數更適合用來衡量圖像之間的相似程度。

(1)內容損失

內容的損失計算用VGG計算得到的高級特徵來表示,因爲VGG模型本來是用於圖像分類的,所以一個訓練好的VGG模型可以有效的提取圖像的高級特徵(內容)。計算的公式如下:

                                           

如果較低的層的特徵損失最小,往往能夠生成在視覺上和y不太能區分的圖像。用一個特徵損失來訓練我們的圖像轉換網絡能讓輸出非常接近目標圖像y,但也並不是讓它們完全的匹配。

(2)風格損失

內容損失懲罰了輸出的圖像(當它偏離了目標y時),所以同樣的,我們也希望對輸出的圖像去懲罰風格上的偏離:顏色,紋理,共同的模式等方面。爲了達成這樣的效果,一些研究者定義出了Gram矩陣。在卷積神經網絡中,每個特徵圖的大小一般是 MxNxC這種大小,MxN表示的是一個矩陣的大小,C表示厚度,通俗說就是有CMxN 這樣的矩陣疊在一起。

首先Gram矩陣的大小是由特徵圖的厚度決定的,等於CxC。首先把特徵圖中第i層和第j層取出來,得到了兩個MxN的矩陣,然後將這兩個矩陣對應元素相乘然後求和得到Gram(i,j)。這樣 Gram 中每個元素都可以表示兩層特徵圖的一種組合,就可以定義爲它的風格。然後風格的差異就是兩幅圖的 Gram 矩陣的差異,與內容的差異的計算方法一樣,通過這兩個矩陣的差就可以量化風格的差異。

訓練階段:選定一張風格圖片。訓練過程中,將數據集中的圖片輸入網絡,生成網絡生成結果圖片y,損失網絡提取圖像的特徵圖,將生成圖片y分別與目標風格圖片ys和目標輸入圖片(內容圖片)yc做損失計算,根據損失值來調整生成網絡的權值,通過最小化損失值來達到目標效果。

執行階段:給定一張圖片,將其輸入已經訓練好的生成網絡,輸出這張圖片風格轉換後的結果。

2.2 實現效果

我廈的頌恩樓,結合各種風格,效果如下:

其他建築與風格結合效果如下所示:

圖2-1 單風格遷移網絡

上面的效果發現,原圖的顏色被風格圖改變,我們可以嘗試不改變原來圖像的顏色,只遷移風格圖的紋理,得到效果如下所示:

圖2-2 遷移紋理不遷移顏色

通過python的flask,製作出GUI界面如下:

通過控件來改變各種風格的結合,以及每個風格的比例:

圖2-4 多風格遷移界面設計(左邊風格選擇,右邊爲輸出)

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