風格遷移-風格損失函數(Gram矩陣)理解

吳恩達教授卷積神經網絡的課程中,有一部分是關於風格遷移的內容。組合內容圖片,風格圖片生成新的圖片

在這裏插入圖片描述

主體思路是:

  1. 隨機生成一張圖片(可以基於原內容圖片生成,從而加速訓練)
  2. 計算其與內容圖片之間的內容損失JcontentJ_{content}
  3. 計算其與風格圖片之間的風格損失JstyleJ_{style}
  4. 最小化損失函數J=αJcontent+βJstyleJ=αJ_{content}+βJ_{style}(其中α,β爲超參數)

對於內容損失函數,比較容易理解。

內容損失函數是比較容易理解的(比較生成的圖片與內容圖片在預訓練好的網絡中某一層的特徵圖的相似度

(計算兩個特徵圖的L2距離))

風格損失函數
  1. 公式

    aijk[l]Sa_{ijk}^{[l]S}是風格圖片在CNN第ll層第(i,j,k)(i,j,k)位置的輸出,其中(i,j,k)(i,j,k)對應高,寬,通道

    Gkk[l]S=i=1nH[l]j=1nW[l]aijk[l]Saijk[l]SG_{kk'}^{[l]S}=\sum_{i=1}^{n_H^{[l]}}\sum_{j=1}^{n_W^{[l]}}a_{ijk}^{[l]S}a_{ijk'}^{[l]S}

    Gkk[l]G=i=1nH[l]j=1nW[l]aijk[l]Gaijk[l]GG_{kk'}^{[l]G}=\sum_{i=1}^{n_H^{[l]}}\sum_{j=1}^{n_W^{[l]}}a_{ijk}^{[l]G}a_{ijk'}^{[l]G}

    Jstyle(S,G)=G[l]SG[l]GF2/(2nW[l]nH[l]nc[l])=kk(Gkk[l]SGkk[l]G)2/(2nW[l]nH[l]nc[l])J_{style}(S,G)=||G^{[l]S}-G^{[l]G}||_{F}^{2}/(2n_{W}^{[l]}n_{H}^{[l]}n_{c}^{[l]})=\sum_k\sum_{k'}(G_{kk'}^{[l]S}-G_{kk'}^{[l]G})^2/(2n_{W}^{[l]}n_{H}^{[l]}n_{c}^{[l]})

  2. 詳解

    在這裏插入圖片描述

    • 首先我們要知道CNN中第l層的每一個通道以及每一個通道中的值(aijk[l]a_{ijk}^{[l]})代表什麼

      在feature map中,每個數字都來自於一個特定濾波器在特定位置的卷積,因此每個數字代表一個特徵的強度(https://blog.csdn.net/wangyang20170901/article/details/79037867)

    • 對於Gkk[l]=i=1nH[l]j=1nW[l]aijk[l]aijk[l]G_{kk'}^{[l]}=\sum_{i=1}^{n_H^{[l]}}\sum_{j=1}^{n_W^{[l]}}a_{ijk}^{[l]}a_{ijk'}^{[l]},中的GG被稱爲gramgram矩陣

      GG是一個 kkk*k 大小的矩陣,k爲通道數。

      Gkk[l]=i=1nH[l]j=1nW[l]aijk[l]aijk[l]G_{kk'}^{[l]}=\sum_{i=1}^{n_H^{[l]}}\sum_{j=1}^{n_W^{[l]}}a_{ijk}^{[l]}a_{ijk'}^{[l]}

      GkkG_{kk'}則是gram矩陣中(k,k’)位置的值,由累加第k與第k‘個通道的相應位置的值的乘積得到

      gram矩陣可以看做feature之間的偏心協方差矩陣(即沒有減去均值的協方差矩陣),Gram計算的實際上是兩兩特徵之間的相關性,哪兩個特徵是同時出現的,哪兩個是此消彼長的等等,同時,Gram的對角線元素,還體現了每個特徵在圖像中出現的量(https://blog.csdn.net/wangyang20170901/article/details/79037867)

    • 當我們獲取了gram矩陣,實際上就是把握住了這幅作品,不同特徵之間的關係與聯繫,比如哪一種特徵的量比較多,哪些特徵和出現比較多的這個特徵正相關or負相關,從而得出了這個作品的風格, 而進一步通過style圖片和generate圖片的gram矩陣之間的計算出相應的風格損失函數,就可以比較出兩者在風格之間的差異。

  3. 關鍵點

    理解feature map的含義以及將feature map不同通道之間的關係轉換到風格上。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章