天天看點

圖像風格遷移算法學習總結一、簡要說明二、具體實施步驟2.2基本思路2.3核心思路        2.4基本問題處理三、代碼的簡要描述四、成果展示

目錄

一、簡要說明

二、具體實施步驟

2.1綜述

2.2基本思路

2.3核心思路        

2.4基本問題處理

三、代碼的簡要描述

四、成果展示

一、簡要說明

本次學習的圖像風格遷移算法是基于一個2015年由Gatys等人發表的文章A Neural Algorithm of Artistic Style_的一個代碼複現

寫這篇文章主要是做一下學習記錄。

二、具體實施步驟

2.1綜述

輸入一張随機噪聲構成的底圖,通過計算Style Loss和Content Loss,疊代更新target,風格上與Style圖像類似,内容上與原照片相似。正常的訓練過程是通過loss反向傳播更新網絡參數,論文中則是用一個已經訓練好的VGG16作為backbone,鎖住參數,更新輸入的底圖。類比畫家作畫的話,随機噪聲就是畫家的畫紙,網絡提取更新的内容特征相當于畫家打的線稿,風格特征則是畫家寫真的風景對象(晴天,雨天,雪天等等各種風格)。

具體說,論文用 Gram 矩陣來對圖像中的風格進行模組化和提取,再利用慢速圖像重建方法,讓重建後的圖像以梯度下降的方式更新像素值,使其 Gram 矩陣接近風格圖的 Gram 矩陣(即風格相似),然後,用VGG網絡提取的高層feature map來表征圖像的内容資訊,通過使 VGG 網絡對底圖的提取的高層feature map接近目标圖高層的feature map來達到内容相似,實際應用時候經常再加個總變分 TV 項來對結果進行平滑,最終重建出來的結果圖就既擁有風格圖的風格,又有内容圖的内容。

Gram矩陣是論文的核心思想,是一種基于統計分布的參數化紋理模組化方法,使用Gram矩陣可以很好的提取圖像風格。

在進行圖像内容特征提取的過程中,這裡使用VGG網絡高層特征表達目标圖像的内容特征。得益于對神經網絡黑盒特性的不斷研究,學者們發現,神經網絡的中間層提取到的圖像特征是不一樣的,越靠近輸入層的中間層提取到的特殊是淺層特征(即,點,線,色塊等低級特征);越靠近輸出層的中間層提取到的特征是進階特征(例如,邊,角,輪廓等)。是以,圖像的内容資訊可以使用神經網絡提取到的進階特征來表達(實際上,Gram矩陣是對神經網絡提取的淺層特征做變換得到的,用來表示風格)。

2.2基本思路

其實代碼的核心思想并不複雜,就是利用CNN提取内容圖檔的内容和風格圖檔的風格,然後輸入一張新的圖像。對輸入的圖像提取出内容和風格與CNN提取的内容和風格進行Loss計算,Loss的度量可以使用MSE,然後逐漸對Loss進行優化,使Loss值達到最理想,将被優化的參數進行輸出,這樣輸出的圖檔就達到了風格遷移的目的。

2.3核心思路        

       1、使用現成的識别網絡,提取圖像不同層級的特征。

        (該項目使用的現成的識别網絡是VGG19模型。)

        2、低層次響應描述圖像的風格,高層次響應描述圖像的内容。

        3、使用梯度下降方法,可以調整輸入響應,在特定層次獲得特定的響應。

        4、多次疊代之後,輸入響應即為特定風格和内容的圖像。

2.4基本問題處理

             1、内容損失(conten loss):對輸入的content圖像與生成的target目标圖像進行歐式距離計算任取一張圖像

圖像風格遷移算法學習總結一、簡要說明二、具體實施步驟2.2基本思路2.3核心思路        2.4基本問題處理三、代碼的簡要描述四、成果展示

,将其輸入到分類網絡中,其中第L卷積層的響應記為

圖像風格遷移算法學習總結一、簡要說明二、具體實施步驟2.2基本思路2.3核心思路        2.4基本問題處理三、代碼的簡要描述四、成果展示

,尺寸為HL*WL*NL。對于目标target圖像

圖像風格遷移算法學習總結一、簡要說明二、具體實施步驟2.2基本思路2.3核心思路        2.4基本問題處理三、代碼的簡要描述四、成果展示

,同樣送入該網絡,可以得到該層的響應

圖像風格遷移算法學習總結一、簡要說明二、具體實施步驟2.2基本思路2.3核心思路        2.4基本問題處理三、代碼的簡要描述四、成果展示

,若希望

圖像風格遷移算法學習總結一、簡要說明二、具體實施步驟2.2基本思路2.3核心思路        2.4基本問題處理三、代碼的簡要描述四、成果展示

圖像風格遷移算法學習總結一、簡要說明二、具體實施步驟2.2基本思路2.3核心思路        2.4基本問題處理三、代碼的簡要描述四、成果展示

内容相似,我們則需要最小化如下的二範數誤差:

                                ​​​​​​​        ​​​​​​​        ​​​​​​​        

圖像風格遷移算法學習總結一、簡要說明二、具體實施步驟2.2基本思路2.3核心思路        2.4基本問題處理三、代碼的簡要描述四、成果展示

          這一誤差可以對本層響應的每一進制素求導:

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        

圖像風格遷移算法學習總結一、簡要說明二、具體實施步驟2.2基本思路2.3核心思路        2.4基本問題處理三、代碼的簡要描述四、成果展示

           其中h=1,2……H,w=1,2……W,k=1,2,3……N

           進一步,利用鍊式法則,可以求得誤差對輸入圖像的每一進制素的導數

圖像風格遷移算法學習總結一、簡要說明二、具體實施步驟2.2基本思路2.3核心思路        2.4基本問題處理三、代碼的簡要描述四、成果展示

。這一步就是神經網絡經典的back-propagation方法。利用

圖像風格遷移算法學習總結一、簡要說明二、具體實施步驟2.2基本思路2.3核心思路        2.4基本問題處理三、代碼的簡要描述四、成果展示

來更新

圖像風格遷移算法學習總結一、簡要說明二、具體實施步驟2.2基本思路2.3核心思路        2.4基本問題處理三、代碼的簡要描述四、成果展示

,可以獲得一個新的輸入圖像,其在第L層的響應

圖像風格遷移算法學習總結一、簡要說明二、具體實施步驟2.2基本思路2.3核心思路        2.4基本問題處理三、代碼的簡要描述四、成果展示

更接近目标圖像的響應

圖像風格遷移算法學習總結一、簡要說明二、具體實施步驟2.2基本思路2.3核心思路        2.4基本問題處理三、代碼的簡要描述四、成果展示

。也就是說,可以目标target圖像的内容更加接近。

                2、風格損失(style loss)使用Gram矩陣代表圖像的風格

                        引入一個

圖像風格遷移算法學習總結一、簡要說明二、具體實施步驟2.2基本思路2.3核心思路        2.4基本問題處理三、代碼的簡要描述四、成果展示

的特征矩陣

圖像風格遷移算法學習總結一、簡要說明二、具體實施步驟2.2基本思路2.3核心思路        2.4基本問題處理三、代碼的簡要描述四、成果展示

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        

圖像風格遷移算法學習總結一、簡要說明二、具體實施步驟2.2基本思路2.3核心思路        2.4基本問題處理三、代碼的簡要描述四、成果展示

                                                        i=1,2……N,j=1,2,3……N

圖像風格遷移算法學習總結一、簡要說明二、具體實施步驟2.2基本思路2.3核心思路        2.4基本問題處理三、代碼的簡要描述四、成果展示

由第L 層的響應計算而來,但是消除了響應的位置資訊,可以看做對于風格的描述。ij位置的元素描述第i通道響應和第j通道響應的相關性。對于目标圖像相應層的風格

圖像風格遷移算法學習總結一、簡要說明二、具體實施步驟2.2基本思路2.3核心思路        2.4基本問題處理三、代碼的簡要描述四、成果展示

,最小化如下誤差可以使

圖像風格遷移算法學習總結一、簡要說明二、具體實施步驟2.2基本思路2.3核心思路        2.4基本問題處理三、代碼的簡要描述四、成果展示

圖像風格遷移算法學習總結一、簡要說明二、具體實施步驟2.2基本思路2.3核心思路        2.4基本問題處理三、代碼的簡要描述四、成果展示

的風格近似:

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        

圖像風格遷移算法學習總結一、簡要說明二、具體實施步驟2.2基本思路2.3核心思路        2.4基本問題處理三、代碼的簡要描述四、成果展示

可以求得誤差對本層響應的導數:

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        

圖像風格遷移算法學習總結一、簡要說明二、具體實施步驟2.2基本思路2.3核心思路        2.4基本問題處理三、代碼的簡要描述四、成果展示

同樣可以通過back-propagation求得

圖像風格遷移算法學習總結一、簡要說明二、具體實施步驟2.2基本思路2.3核心思路        2.4基本問題處理三、代碼的簡要描述四、成果展示

 ,進而更新

圖像風格遷移算法學習總結一、簡要說明二、具體實施步驟2.2基本思路2.3核心思路        2.4基本問題處理三、代碼的簡要描述四、成果展示

使其風格接近

圖像風格遷移算法學習總結一、簡要說明二、具體實施步驟2.2基本思路2.3核心思路        2.4基本問題處理三、代碼的簡要描述四、成果展示

                3、總損失:将style loss 與content loss 進行相加。

                4、圖像中的資訊:

                使用分類網絡中卷積層的響應來表達圖像的風格和内容

                5、為什麼Gram矩陣能夠定義圖像的風格?

                因為CNN卷積過後提取了圖像的特征圖,每個數字就是原圖像的特性大小,而Gram矩陣是矩陣的内積運算,運算過後特征圖中越大的數字會變得更大,這就相當于對圖像的特性進行了縮放,使得特征突出了,也就相當于提取到了圖檔的風格。

三、代碼的簡要描述

  1. 擷取VGG19模型中的features部分        
  2. 當機所有VGG參數
  3. 判斷是否有GPU,如果有GPU則使用GPU來處理代碼,否則使用CPU來執行
  4. 導入content圖檔和style風格圖檔,并且要求圖檔的參數為400*400像素(圖檔過大會影響效率,是以要處理一下)
  5. 加載content圖像和style風格圖像
  6. 在形成目标圖像之前,隻擷取一次内容和樣式特征
  7. 計算樣式表示的每一層的gram矩陣
  8. 設定疊代參數
  9. 在VGG的基礎上疊代建構我們自己的CNN網絡

疊代内容:

   1、擷取目标圖像target的特征

    2、計算内容損失(content圖像與target圖像的距離)

    3、初始化風格損失(style圖像與target圖像之間的距離)

    4、疊代計算風格損失

    5、計算總的損失

    6、更新target圖像

    7、儲存中間圖像并列印損失

(其中還需編寫函數方法實作計算Gram矩陣、擷取圖像特征features、tensor格式到圖像的轉換)

四、成果展示

圖像風格遷移算法學習總結一、簡要說明二、具體實施步驟2.2基本思路2.3核心思路        2.4基本問題處理三、代碼的簡要描述四、成果展示
圖像風格遷移算法學習總結一、簡要說明二、具體實施步驟2.2基本思路2.3核心思路        2.4基本問題處理三、代碼的簡要描述四、成果展示
圖像風格遷移算法學習總結一、簡要說明二、具體實施步驟2.2基本思路2.3核心思路        2.4基本問題處理三、代碼的簡要描述四、成果展示
圖像風格遷移算法學習總結一、簡要說明二、具體實施步驟2.2基本思路2.3核心思路        2.4基本問題處理三、代碼的簡要描述四、成果展示

繼續閱讀