深度學習之風格遷移
最近一年,各種P圖應用出現了眾多新的玩法,其中很重要的一種就是風格遷移(Style Transfer),例如可以將下面左圖轉換為後面兩幅風格不同的圖片
其背後的原理是什麼呢?
這是一種基於卷積神經網路(CNN)的遷移學習方法:
輸入為一張原始圖片(例如用戶的一張照片),以及一張想要模仿其風格的圖片(例如梵高的《星空》,或者蒙克的《吶喊》等)。
目標是生成這樣一張圖片:內容上與用戶照片相近,而風格上與藝術畫作相近。
問題是,如何保留照片的內容,又如何衡量風格是否相近呢?
這與卷積神經網路的特點有關。CNN中,靠近輸入的網路層,學到的是一些紋理、邊緣方面的特徵,越到後面,學到的越接近於內容,到了最後一層,基本就剩下照片的類別了,如貓、狗等。因此,可以使用後面某一層的輸出作為照片內容的衡量,而使用前面的層作為風格的衡量。
此外,對風格的衡量比較具有主觀性,有不同的衡量方法來保留不同的風格,通常的做法就是從每一層中抽取一定的信息,作為風格的代表。
快速遷移演算法
簡單的風格遷移,可以使用類似於Deep Dream的方法,將CNN凍結,將圖片作為待學習的參數,使用梯度下降進行學習。只不過,這裡的目標不再是最大化某個神經元的激活,而是最小化與用戶照片內容的距離,同時最小化與藝術繪畫風格之間的距離。
然而這種方法是比較緩慢的,這是因為它把生成圖片的過程當做一個「訓練」的過程。每生成一張圖片,都相當於要訓練一次模型,這中間可能會迭代幾百幾千次。
可以通過下面所示的流程圖來加速遷移過程
左半部分是一個殘差網路,用來將輸入圖片
x
映射為一張新的圖片y,此網路是需要進行訓練的。
右半部分是一個誤差網路,此網路是在ImageNet數據集上預先訓練好的,此處展示的是VGG-16網路。此處將三張圖片(殘差網路的輸出圖片、藝術繪畫圖片、用戶照片)依次輸入進去,然後:
如藍色線和黑色線所示,計算內容相似度
如紅色線和黑色線所示,計算風格相似度
然後將兩個相似度相加,得到最終的目標函數。接下來就可以反向傳播回y,進一步的傳播回左半部分,最終更新輸入圖片
x
,完成一輪迭代。
這樣,一旦左半部分的殘差網路訓練完畢,實際使用的時候就不再需要迭代了,只需要將圖片
x
輸入網路,取得輸出的圖片y即可。
下面是一些實際遷移的圖片
原始圖片
遷移了《吶喊》的風格
遷移了《星空》的風格


TAG:人工智慧技術 |