用卷積神經網路來合成大師般的作品 - Style Transfer

用卷積神經網路來合成大師般的作品 - Style Transfer

神經網路(Neural Network)不光可以做到識別物體,語言翻譯以及遊戲AI,還能用來合成一些非常有趣好看的圖片。完整的Jupyter Notebook。

合成的方法來自這篇CVPR論文。通過將一張是內容圖片(content image)和另一張是藝術畫風(style image)合併起來,可以把一張平淡無奇的照片變得充滿藝術氣息起來。

cs231n A3 Q5就要求學生完成這種轉化。作業使用了SqueezeNet,fast.ai Lesson 8則用了一種VGG16的模型。自己練習,我也使用了fast.ai的average pooling VGG16。一來改起來很方便,二來自己比較熟悉。和原來VGG16模型的區別只是把max pooling變成了average pooling。模型代碼移步github。

論文的核心是兩個損失函數:內容損失(Content Loss)和風格損失(Style Loss)。通過優化這兩個損失函數的和就可以獲得一張擁有獨特藝術風格圖片了。

具體做法如下:

  1. 選定一層卷積層的輸出作為內容圖片的輸出和合成圖片的輸出,它們的差(粗略的說法)作為Content Loss。
  2. 選定幾層卷積層的輸出作為風格圖片的輸出和合成圖片的輸出,它們的差(不嚴格的說)作為Style Loss。
  3. (可選)圖片像素點之間的差值作為Total Variation Loss。這個是可以省略的,Jeremy Howard並沒有加入這個損失
  4. 通過對輸入,也就是合成圖片,關於Content Loss + Sytle Loss的優化。經過幾次迭代就能獲取一張很贊的圖片了。

秀一下通過這個模型轉化出來帶有梵高氣息的日落。(這裡一次迭代就略有相似了)

參考文獻:

  1. Image Style Transfer Using Convolutional Neural Networks" (Gatys et al., CVPR 2015)
  2. 8—Artistic Style
  3. cs231n A3 Q4

推薦閱讀:

TAG:深度學習DeepLearning | 圖像處理 |