一.引言
在第一篇我講到一開始的圖像風格轉換,每產生一張圖片都得重新訓練,這對於使用上難免綁手綁腳,所以理所當然的下一步就是要解決這個問題,看看能不能只要訓練一次,就可以重複使用。
二.方法說明
在原來的方法中,之所以需要每次都要重複訓練的主要原因就是因為將優化對象從模型本身轉換成輸入圖像,這樣一來模型的功用只有特徵擷取功能,對圖像的優化變成一個一次性計算,於是調整方法便是回歸初衷,來訓練一個模型負責圖像的風格轉換不就能解決了嗎?
在 Johnson et al. 2016 的 Perceptual Losses for Real-Time Style Transfer and Super-Resolution 中便使用了這樣的架構,其搭建了一個<圖-圖>的網路來生成轉換風格的圖像,後續使用VGG對其進行評估,一樣使用Content Loss及Style Loss去優化整個網路,這樣一來便可以使用一整個資料集的圖像去訓練一個風格。
Loss方面,除了Content Loss、Style Loss 外,還新增了一個 Total Variation Loss,這個 Loss 主要計算圖像像素在x/y方向梯度的和,可以用來優化圖像的平滑度,減少噪聲的發生。
三.實際演練
首先可以先去COCO下載一些圖下來(這次實驗載了2014 Train images [83K/13GB]),載完後因為使用 torchvision.datasets.ImageFolder 來載入資料集,所以需要再新建一層資料夾包住所有訓練圖,而後續迭代時拿到的 label 就無視就好,主要網路部分,為下採樣+多層殘差層+上採樣的簡易架構,VGG一樣使用VGG16,實驗程式碼位於我的Github,這次使用以下風格 :
四.結語
這次擴展的前一章的程式,額外新建了一個網路來轉換圖像,使用這種方式,可以將風格學習成可重用的網路,但也意味著一個風格就得占用一整個網路的權重,也是挺浪費的,可以嘗試降低網路參數,如減少層數或降低濾波器數量,或是讓我們朝著下一步──將不同風格融入同一個網路內前進,接下來下一篇便會介紹該如何做到一個網路同時學習不同風格。