Neural Artistic Style
本期做一個筆者認為神奇的實現,將一張真實的照片加入名畫的風格生成一張新的照片。
論文地址:A Neural Algorithm of Artistic Style
首先介紹兩個前置知識點,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冠軍領隊帶你入門計算機視覺:監督學習與神經網路的簡單實現