Neural Artistic Style

本期做一個筆者認為神奇的實現,將一張真實的照片加入名畫的風格生成一張新的照片。

論文地址:A Neural Algorithm of Artistic Style


首先介紹兩個前置知識點,VGG和遷移學習

  • VGG

VGG

結構可以看成由CNN和FC組成,CNN(本期我們只會用到這一部分)又由五個Block組成:k個CNN3X3 + MaxPool。本期使用圖中的E,VGG19。

  • 遷移學習

導入已經訓練好的模型參數來訓練我們自己的模型,Pytorch使用遷移學習非常方便。希望了解更多細節的朋友可以參考Transfer Learning tutorial。


論文淺析

論文前半部分描述了實踐和理解,確實可以做出比較理想的結果,但是筆者私以為數學支撐比較薄弱。

所以筆者直接從章節Methods開始說:

  • 首先,整個圖片融合過程有三張圖片:1、實際照片(下稱p),2、名畫(下稱s),3、融合1和2的生成照片(下稱x)。
  • 融合分兩步:1、x和p在vgg的某幾層使用Mean Squared Error來計算loss,2、x和s的矯正就有些微不同,論文中將圖片降維後使用Matrix來存放各自特徵,然後使用Mean Squared Error來計算loss。
  • 最後,上述所有loss相加後BP。

這裡需要注意一點:整個訓練流程VGG、p、s一直不變,只有x的參數在隨BP更新


代碼實現

首先提取已訓練好的vgg參數來構建我們的模型

載入VGG19並導入已訓練好的參數,行60, 65

而我們的模型構建就非常簡單了,行40~55

Style Loss

圖片的提取和保存點我查看,這裡不在詳述。

優化函數使用的LBFGS,代碼:


結果

梵高-星空

畢加索


代碼

查看github全部代碼


推薦閱讀:

1.15【OpenCV圖像處理】自定義線性濾波
[轉自github]基於深度學習的醫療影像論文匯總(Deep Learning Papers on Medical Image Analysis)
《SegNet: A Deep ConvolutionalnEncoder-Decoder Architecture for ImagenSegmentation》論文筆記
FDDB和LFW數據集淺析及刷分心得
ImageNet冠軍領隊帶你入門計算機視覺:監督學習與神經網路的簡單實現

TAG:PyTorch | 计算机视觉 | 卷积神经网络CNN |