神經網絡算法用於風格轉化
深度神經網絡是一個處理圖片的強大算法,他可以將圖片中的各種特徵提取出來,淺層的網絡層用於提取圖片中的各個簡單的特徵,比如橫線,曲線等等,網絡深層提取圖片中更高級的特徵,如曲線,圓,各種複雜形狀。基於網絡的這種特徵,我們可以提取一些風格圖片(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)。
對一個卷積網絡,第 層有 個filter,這個 個卷積核的大小爲 ,這裏的 的大小爲該filter輸出的長*寬,所以該 層的輸出可以表示爲一個矩陣 ,我們用 表示第 個filter的 位置上的輸出(這裏filter的輸出可以理解成已經把二維的filter輸出扁平化爲一行向量,矩陣 可以看做是該 層所有filter輸出的集合,一行代表一個filter的輸出,大小等於長*寬),內容圖片 和合成圖片 在 上的輸出分別爲 , 他們之間的內容誤差可以表示爲
該誤差函數關於合成圖像輸出的導數爲
從第一張圖中可以看到,這裏 的取值不一樣,會導致我們得到的 也不一樣,在反向傳播過後生成的圖像 也會不一樣。
對於風格誤差,會用到Gram Matrix,這個矩陣可以表示不同kernel之間的特徵向量映射(vectorised feature map)的相關性, ,其中 是 層上filter的數量,那麼Gram Matrix中的位置 上的元素定義爲:
其中 表示 層上第 個filter,和第 個filter輸出圖像對應位置 上的元素,對應位置上的元素相乘之後求和得到Gram Matrix對應位置上的值。
那麼風格圖像 和合成圖像 對應在 層上的風格表示爲 和 ,那麼 層上的Style Loss爲:
即兩個圖像在 層上的Gram Matrix矩陣相減後的平方和,再乘上相關係數。
那麼總的style loss就是:
其中 是不同網絡層上的權重。
Style Loss 關於生成圖像在l層上的激活的導數爲:
低層網絡的導數,用反向傳播能很容易的求解。上文第一張圖中,就用風格表達式重構了幾種風格。
最終,我們需要優化的loss函數就是Content Loss 和 Style Loss的總和。
其中 表示內容圖片, 表示風格圖片, 表示合成圖片。 和 分別表示了content loss和style loss的權重,他們的比值映像合成圖像的視覺體驗(可以參考上文第二圖)。有了目標函數,就用反向傳播算法,將目標函數一步步優化,使得合成的圖片達到想要的視覺效果。
總結
這篇論文闡述了一種圖片的合成算法,將一張內容圖片(content image)和風格圖片(style image)合成我們想要的圖片,算法從內容圖片中提取內容,利用了content loss(在某一個相同網絡層上輸出的內容圖片和合成圖片作差),而從風格圖片中提取風格則利用GramMatrix,它是一個表示相關性的矩陣,通過同一層上不同filter之間的相關性來表示相應的風格,而且一般情況下需要用多個網絡層輸出GramMatrix,使得風格更加飽滿,GramMatrix組成style loss。 最後我們的目標函數是content loss + style loss,當然這兩項都有相應的權重以調整合成圖像的視覺效果。利用優化算法,將目標函數減小,得到最終的合成圖像。