【論文總結】深度網絡算法用於風格轉化

神經網絡算法用於風格轉化

原文:A Neural Algorithm of Artistic Style

深度神經網絡是一個處理圖片的強大算法,他可以將圖片中的各種特徵提取出來,淺層的網絡層用於提取圖片中的各個簡單的特徵,比如橫線,曲線等等,網絡深層提取圖片中更高級的特徵,如曲線,圓,各種複雜形狀。基於網絡的這種特徵,我們可以提取一些風格圖片(style image)的紋理特徵,將這些紋理特徵融合到我們的內容圖片(content image)中。

卷積神經網絡
如圖中所示,圖片在每一層網絡在分別重構風格圖片和內容圖片,內容圖片重構時的影響在低層的網絡中有更好的表達(比如低層的圖片a,b,c),網絡越深就會經歷更多降採樣,如maxpooling,導致圖片的像素降低如圖片d e ,而風格圖片的重構時都會在不同網絡層中,表現出不同程度的風格特徵(紋理特徵),在實際應用中,會取不同網絡層的重構結合在一起,用來代表圖片的風格,比如可能會取conv1_1,那邊表現出來的就是a圖片中的形式,同理:
conv1_1 conv2_1 對應b圖片
conv1_1 conv2_1 conv3_1 對應c圖片,
conv1_1 conv2_1 conv3_1 conv4_1 對應d圖片,
conv1_1 conv2_1 conv3_1 conv4_1 conv5_1 對應e圖片
可以看出重構的風格圖片在更深層的網絡上,表現出更爲複雜的紋理特徵和顏色特徵,這都是因爲卷積網絡隨着網絡深度的增加,獲得的特徵、卷積的感受野和紋理的複雜都在增加。


在合成圖片時,就可以用合成的圖片來吻合上面獲得的風格圖片,進行我們熟悉的反向傳播來迭代圖片,讓合成的圖片更吻合風格圖片的內容。圖片風格是多維度的,包含了網絡結構中不同網絡層的特徵重構。
當然,可以選取不同層的特徵來合成圖片,以獲得不同的視覺體驗:在選取低層網絡來構成風格時,合同圖片表現出比較局部的特徵(圖片更像是一塊塊,一點點,一條條線組成的,),而選取高層網絡時,合成圖片會更加平滑,連續,如下圖所示。
不同層的風格圖片
該算法在數學表達層面上,把內容誤差和風格誤差區分開來,形成兩個獨立的不同的表達式。由上圖也可以看出,風格圖片和內容圖片不是能夠完美的融合,他們之間都會有一定的權重比例,可以從圖片矩陣的列看出,內容圖片的權重增加時,合成圖片中內容圖片的成分會增加。
在算法層面,我們會計算同一層網絡上,不同kernel提取的特徵之間的相關性來表示風格圖片的紋理結構,這也就是圖片的風格。


算法實現

算法的實現是基於經典卷積網絡VGG-Network,包含16個卷積層和5個池化層,這裏不需要任何全連接層(我們只需要提取圖片的特徵,而不需要通過全連接層來做分類或者識別,而且原文作者發現,在圖像合成時,使用average pooling layer會讓梯度更好的傳播,而且會得到更好的圖片,所以建議使用average pooling layer)。
對一個卷積網絡,第l 層有Nl 個filter,這個Nl 個卷積核的大小爲Ml ,這裏的Ml 的大小爲該filter輸出的長*寬,所以該l 層的輸出可以表示爲一個矩陣FlRNlMl ,我們用Fijl 表示第i 個filter的j 位置上的輸出(這裏filter的輸出可以理解成已經把二維的filter輸出扁平化爲一行向量,矩陣Fl 可以看做是該l 層所有filter輸出的集合,一行代表一個filter的輸出,大小等於長*寬),內容圖片p 和合成圖片xl 上的輸出分別爲Pl ,Fl 他們之間的內容誤差可以表示爲

(3)Lcontent(p,x,l)=12i,j(FijlPijl)2

該誤差函數關於合成圖像輸出的導數爲
(4)LcontentFijl={(FlPl)ij    if   Fijl>00     if     Fijl<0

從第一張圖中可以看到,這裏l 的取值不一樣,會導致我們得到的Pl 也不一樣,在反向傳播過後生成的圖像Fl 也會不一樣。
對於風格誤差,會用到Gram Matrix,這個矩陣可以表示不同kernel之間的特徵向量映射(vectorised feature map)的相關性,GlRNlNl ,其中Nll 層上filter的數量,那麼Gram Matrix中的位置i,j 上的元素定義爲:
(5)Gijl=kFiklFjkl

其中Fikl,Fjkl 表示l 層上第i 個filter,和第j 個filter輸出圖像對應位置k 上的元素,對應位置上的元素相乘之後求和得到Gram Matrix對應位置上的值。
那麼風格圖像a 和合成圖像x 對應在l 層上的風格表示爲AlGl ,那麼l 層上的Style Loss爲:
(6)El=14Nl2Ml2i,j(GijlAijl)2

即兩個圖像在l 層上的Gram Matrix矩陣相減後的平方和,再乘上相關係數。
那麼總的style loss就是:
(7)Lstyle(a,x)=l=0LwlEl

其中wl 是不同網絡層上的權重。
Style Loss El 關於生成圖像在l層上的激活的導數爲:
(8)ElFijl={1Nl2Ml2((Fl)T(GlAl))ji    if   Fijl>00     if     Fijl<0

低層網絡的導數,用反向傳播能很容易的求解。上文第一張圖中,就用風格表達式重構了幾種風格。
最終,我們需要優化的loss函數就是Content Loss 和 Style Loss的總和。
(9)Ltotal(p,a,x)=αLcontent(p,x)+βLstyle(a,x)

其中p 表示內容圖片,a 表示風格圖片,x 表示合成圖片。αβ 分別表示了content loss和style loss的權重,他們的比值映像合成圖像的視覺體驗(可以參考上文第二圖)。有了目標函數,就用反向傳播算法,將目標函數一步步優化,使得合成的圖片達到想要的視覺效果。

總結

這篇論文闡述了一種圖片的合成算法,將一張內容圖片(content image)和風格圖片(style image)合成我們想要的圖片,算法從內容圖片中提取內容,利用了content loss(在某一個相同網絡層上輸出的內容圖片和合成圖片作差),而從風格圖片中提取風格則利用GramMatrix,它是一個表示相關性的矩陣,通過同一層上不同filter之間的相關性來表示相應的風格,而且一般情況下需要用多個網絡層輸出GramMatrix,使得風格更加飽滿,GramMatrix組成style loss。 最後我們的目標函數是content loss + style loss,當然這兩項都有相應的權重以調整合成圖像的視覺效果。利用優化算法,將目標函數減小,得到最終的合成圖像。

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