neural style論文解讀

相關的代碼都在Github上,請參見我的Github,https://github.com/lijingpeng/deep-learning-notes
敬請多多關注哈~~~

概述

在藝術領域,藝術家可以通過風格和內容的相互交融來創作不同的畫作,現階段,在深度神經網絡的幫助下,計算機可以輕易的識別畫作中的物體或者內容。但是,風格是一個比較抽樣的概念,計算機其實無法像人類那樣識別一個畫作或者藝術家的風格。這篇文章主要介紹深度神經網絡將畫作中的風格和內容本身進行分離,並將風格做遷移,應用到另一個圖片內容之中,最終達到一個風格遷移的工作。其實這很像Photoshop中的濾鏡,然而濾鏡畢竟是人爲設定好的一系列動作處理集合,只能針對特定風格的圖片,對於不同特徵的圖片,需要選擇不同的濾鏡,因此是比較機械和人工的。

卷積神經網絡在圖像識別領域應用廣泛,並且實踐證明有很好的效果。它通過一個多層的網絡結構來對圖像進行特徵表達,如果我們把輸入圖像稱之爲網絡的底層,則隨着網絡層次的加深,高層的網絡關注圖片的高級特徵,例如圖像的內容或者物體的排列,而底層的信息則重點關注圖像像素級別的特徵。爲了將圖像的風格和內容分離並進行遷移,我們需要做兩部分工作:

  • 圖像內容的重建
  • 風格的重建

同時在合成是要同時考慮內容重建造成的loss和風格重建造成的loss。

## 內容重建 內容重建和風格重建都使用了VGG網絡,VGG-16的網絡結構圖參見下圖,詳情圖來自於[這裏](https://github.com/dmlc/mxnet/blob/master/example/image-classification/symbol_vgg.py).
圖1 VGG網絡結構圖


對於內容重建來說,只使用了前5層的網絡‘conv1 1’ (a), ‘conv2 1’ (b), ‘conv3 1’ (c), ‘conv4 1’ (d) and ‘conv5 1’ (e),即圖2中的a、b、c、d、e。VGG 網絡主要用來做內容識別,在實踐中作者發現,使用前三層a、b、c已經能夠達到比較好的內容重建工作,d、e兩層保留了一些比較高層的特徵,丟失了一些細節。

圖2 VGG網絡結構圖

風格重建

與內容重建有所區別的是,作者使用各個卷基層的組合來進行重建,具體使用的網絡結構如下:
- ‘conv1_1’ (a)
- ‘conv1_1’ and ‘conv2_1’ (b)
- ‘conv1_1’, ‘conv2_1’ and ‘conv3_1’ (c)
- ‘conv1_1’, ‘conv2_1’, ‘conv3_1’ and ‘conv4_1’ (d)
- ‘conv1_1’, ‘conv2_1’, ‘conv3_1’, ‘conv4_1’
and ‘conv5_1’ (e)

這樣構建的網絡能夠識別圖像的風格信息,而忽略圖像中的內容。

## 風格與內容的權衡 這篇文章的主要發現是我們可以通過CNN將圖像的內容和風格進行分離,然後通過和其他圖像內容、風格的重組來創作風格遷移的圖像。 當然,風格和內容並不是完全可以分離開的,在圖像的分離和重建時,我們要權衡更看重內容重建還是風格的重建,如果注重風格重建,則新生成的圖像風格上會更符合我們的要求,但是內容上可能丟棄的內容比較多。同理,如果注重內容重建,則新的圖像內容上是清晰可辨識的,但是風格上可能達不到我們的要求。圖3是權衡風格和內容不同的比例得到的結果:
圖3 VGG網絡結構圖

圖3中,從第一列到第四列風格與內容的權重比例由高到低,第一列表示我們更看重風格,可以看到,我們看到的圖像基本就是藝術風格,根本分不清建築物,隨着比例由高到低,建築物逐漸變得清晰起來,第五列基本達到了我們想要的效果。

## Methods 實踐中發現,使用average pooling比max pooling效果要好一點。具體來說,對於內容重建和風格重建,分別構建Loss。對於內容重建來說,利用一張白噪音圖片去擬合原始圖像中的內容,定義Loss爲:
公式1

其中F爲白噪音圖像在L層的數據表示,P爲原始數據在L層的表示,Loss爲square loss。

對於風格重建,和Content Loss類似,不過如之前討論,最後的Loss是之前各層的Loss之和。

公式2

其中G爲白噪音圖像在L層的數據表示,A爲原始數據在L層的表示。

最後,爲了將圖像風格和內容進行遷移,我們定義最後的Loss爲Content loss 和 style loss之和,權重分別爲alpha何beta,如公式3所示:

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