就是輸入兩張影象,一張是內容影象c,一張是風格影象s,我們希望生成一張新的影象g,使得新影象g同時具備c的內容和s的風格。如下圖,生成的影象內容還是建築和河流,但是畫風變成了梵谷的油畫。
生成的影象g既要和c的內容相近,又要和s的風格相近,因此代價函式由兩部分組成,即內容代價函式和風格代價函式,分別表徵內容相近程度和風格相近程度,即
\[j=\alpha j_c(c, g) + \beta j_s(s, g)
\]\(\alpha\)和\(\beta\)是兩個超引數,表示兩個代價函式的比重。實際上乙個超引數就足夠了,可以把其中乙個固定,調節另乙個即可。
內容代價函式是生成影象和內容影象特徵圖的差值,定義如下:
\[j_=\frac\sigma_^\sigma_^\sigma_^(fc_-fg_)^2
\]公式中,l
表示第l層卷積層,h, w, c
分別表示該卷積層特徵圖的高、寬、通道數。
風格代價函式也是通過特徵圖得到的,但是它計算不是特徵圖的直接差值,而是gram matrix的差值。對於乙個卷積層,gram matrix \(gm\)的定義如下:
\[gm_^=\sigma_^f_f_
\]\(gm_^\)表示第l層特徵圖的第i個通道和第j個通道之間的相關性。由於不同通道代表的是不同的文理或者顏色,因此不同通道之間的相關性矩陣,即gram matrix可以用來表示影象的風格。兩張影象的gram matrix之差,即表示二者的風格之差。因此,風格代價函式的定義如下:
\[j_=\frac(gm_s^l-gm_g^l)^2
\]公式中,n, m
表示gram matrix的尺寸,實際上n, m等於該層特徵圖的數量。
gatys第一次通過神經網路的方法實現了風格轉移,並且給出了風格的數學定義(即如上所述)。他的方法是先隨機生成一張雜訊,然後通過不斷訓練來調整雜訊上的畫素值,得到最後的生成影象g。訓練過程中,固定神經網路的權值不變(採用預訓練模型),通過梯度下降法來更新雜訊影象的畫素值。由於這種方法每次都需要對雜訊影象進行訓練,計算量大,因此速度很慢,不能做到實時。
這項工作由dmitry ulyanov和justin johnson分別獨立完成,整個網路架構和gan有頗多相似之處,如下圖。
該架構由兩個網路構成,前面為風格轉移網路,用於將輸入影象生成為固定風格的影象,後面為損失網路,用於評估生成影象的損失函式值。損失函式的定義任然是內容損失函式和風格損失函式的加權求和。不同於gatys的方法,該架構輸入的是內容影象,由風格轉移網路直接輸出生成影象,從而不用每次都做反向傳播,只需要做一次feedforward就行了,因此速度很快,可以做到實時。在用於生成某種風格的影象之前,需要先進行訓練。訓練時,損失網路保持固定,只訓練風格轉移網路。
在提出了新的架構之後,dmitry ulyanov任然對結果不滿意,於是找到了乙個簡單有效的改進方法。在風格轉移網路中有bn(batch normalization)層,它的作用是用來對batch內的影象的特徵圖做特徵歸一化的。要做歸一化,就要計算batch內特徵圖的平均值和方差,計算公式如下:
\[\mu_c=\frac\sigma_^h\sigma_^w\sigma_^tx_
\]\[\sigma_c^2=\frac\sigma_^h\sigma_^w\sigma_^t(x_-\mu_c)^2
\]c
表示第c個通道,t
表示batch裡的第t個樣本。其實計算的就是這個batch裡所有特徵圖在通道c的平均值和方差。其值是常數,而不是矩陣。之後bn層對每個特徵圖做乙個scale+shift的操作:
\[z_c=\gamma\frac+\beta
\]縮放和平移因子\(gamma\)和\(beta\)通過訓練獲得。以上是bn的處理過程,instance normalization唯一不同的地方是平均值和方差的計算,公式如下:
\[\mu_=\frac\sigma_^h\sigma_^wx_
\]\[\sigma_^2=\frac\sigma_^h\sigma_^w(x_-\mu_)^2
\]可以看到,上面的平均值和方差都是針對單個特徵圖的,而不是整個batch內所有的特徵圖。也就是說,我在對a做風格轉移時,我只考慮a本身的特徵,避免受到batch內其他影象特徵的影響。
對於該方法為什麼有效,解釋如下:風格轉移的過程,就是要把風格影象的對比度轉移到內容影象上,因此需要先去除內容影象本身的對比度。歸一化操作其實就是在去除這種對比度,scale+shift則是將風格影象的對比度附加給內容影象。但是如果採用bn的操作,計算出來的平均值和方差是整個batch內所有影象的均值和方差,而對於單張影象而言,其本身的均值和方差才是最能反映它的對比度的,因此bn會導致對比度去除得不徹底。因此instance normalization更加有效。
\[z=\gamma\frac+\beta
\]作者認為,不同風格之間的差異不在於卷積層上,而在於歸一化過程的scale和shift上,也就是\(\gamma\)和\(\beta\)這兩個引數上。因此,不同風格可以共享同樣的卷積層引數,只需要在\(\gamma\)和\(\beta\)上擴充套件乙個維度,讓\(\gamma_n\)和\(\beta_n\)對應第n(\(n\in[0, n]\))中風格即可,即:
\[z_n=\gamma_n\frac+\beta_n
\]最後的效果還是不錯的:
神經網路 卷積神經網路
這篇卷積神經網路是前面介紹的多層神經網路的進一步深入,它將深度學習的思想引入到了神經網路當中,通過卷積運算來由淺入深的提取影象的不同層次的特徵,而利用神經網路的訓練過程讓整個網路自動調節卷積核的引數,從而無監督的產生了最適合的分類特徵。這個概括可能有點抽象,我盡量在下面描述細緻一些,但如果要更深入了...
神經網路 卷積神經網路
1.卷積神經網路概覽 來自吳恩達課上一張,通過對應位置相乘求和,我們從左邊矩陣得到了右邊矩陣,邊緣是白色寬條,當畫素大一些時候,邊緣就會變細。觀察卷積核,左邊一列權重高,右邊一列權重低。輸入,左邊的部分明亮,右邊的部分灰暗。這個學到的邊緣是權重大的寬條 都是30 表示是由亮向暗過渡,下面這個圖左邊暗...
Gram 矩陣與神經網路風格遷移
協方差矩陣 gram矩陣和協方差矩陣 gram矩陣意義 計算例項 gram矩陣是計算每個通道i的feature map與每個通道j的feature map的內積。gram matrix的每個值可以說是代表i通道的feature map與j通道的feature map的互相關程度 神經網路風格遷移中的...