一.引言
最近遇到一些人想做音訊的合成,我回答他或許可以從圖像風格轉換中找到些靈感,我才突然想起我對於這部分的認知只止於知道他能做什麼及結果大概如何,對於內部訓練邏輯及結構並沒有認真的去了解,現在剛好趁此機會好好的學習一下。
二.圖像風格說明
對於圖像風格轉換,可以往前推至 Gatys et al. 2015 的 A Neural Algorithm of Artistic Style 這篇論文,當中提出了使用 VGG16/19 作為特徵擷取層,最終達成了單次單張圖像的風格轉換。
首先,我們來說明一下為什麼能做到風格轉換,在這篇論文中,將風格轉換問題視為一個對圖同時進行<內容>及<風格>的優化,希望一張圖在特徵擷取後的特徵,與分別對內容圖及風格圖進行相同的特徵擷取後的結果進行相關性計算,若兩者都收斂,及代表該圖同時保有內容圖的風格圖的內容。
這是一個有趣的方向,因為與目前通常的使用來說,優化的通常是模型本身,而這邊採取的是優化圖像,模型是不用進行參數更新的,接下來會簡單介紹整體訓練流程 :
三.實際演練
首先先定義出內容圖像及風格圖像,這邊就用我的拉拉肥及五條來試試
在訓練時,會持續使用這兩張圖像計算 Content Loss 及 Style Loss ,以下為簡易流程圖。
至於最重要的 Loss 方面,Content Loss 採用 MSE 進行兩張圖內容上的相似度判斷,而 Style Loss 方面,因為需要凸顯出風格,所以是採用 Gram 矩陣的方式,所謂的Gram 矩陣是將特徵向量與自己的轉置相乘,最終獲取的矩陣可以理解成不同特徵的相關響應,且忽略它們在圖像中的具體位置,這樣的方式能好好的抓住風格的本質──紋理與視覺模式的總體分布。
以下為實際的結果,實際實驗時可以嘗試調整優化器,原論文中的LBFGS雖然收斂很快,但有機率梯度爆炸,若調整成 Adam 雖然收斂變慢,但可以穩定的的收斂,若想看到逐漸變化的過程,使用 Adam 會是一個好辦法。
四.結語
本次實驗的風格轉換確實是個有趣的方式及方向,但缺點也很明顯,因為訓練的是圖像本身,意味著生成一張圖像都得重新經過訓練,沒有記憶功能,且結果稍不可控,但這方法也奠基的一個風格轉換的基礎,我接下來會逐步介紹接下來的變體。
另外本次實作程式碼也同步更新於Github