圖像風格遷移1 A Neural Algorithm of Artistic Style

論文地址
https://arxiv.org/pdf/1508.06576v2.pdf

所謂圖像風格遷移,是指利用算法學習著名畫作的風格,然後再把這種風格應用到另外一張圖片上的技術。著名的國像處理應用Prisma是利用風格遷移技術,將普通用戶的照片自動變換爲具有藝術家的風格的圖片。

先回憶一下圖像識別模型VGGNet。
事實上,可以這樣理解VGGNet的結構:前面的卷積層是從圖像中提取“特徵”,而後面的全連接層把圖片的“特徵”轉換爲類別概率。其中,VGGNet中的淺層(如conv1_1,conv1_2),提取的特徵往往是比較簡單的(如檢測點、線、亮度),VGGNet中的深層(如conv5_1、conv5_2),提取的特徵往往是比較複雜(如有無人臉或某種特定物體)

在這裏插入圖片描述
具體來說,風格遷移使用卷積層的中間特徵還原出對應這種特徵的原始圖像。如圖7-2a所示,先選取衣服原始圖像,經過VGGNet計算後得到各種卷積層特徵。接下來,根據這些卷積層的特徵,還原出對應這種特徵的原始圖像。圖像b、c 、d 、e 、f 分別爲使用卷積層conv1_2、conv2_2 、conv3 _2 、conv4_2 、conv5_2 的還原圖像。可以發現:淺層的還原效果往往比較好,卷積特徵基本保留了所高原始圖像中形狀、位置、顏色、紋理等信息; 深層對應的還原圖像丟失了部分顏色和紋理信息,但大體保留原始圖像中物體的形狀和位置。
在這裏插入圖片描述
個人理解:
1.準備好一個訓練好的VGGnet,去掉全連接層,此時網絡淺層可以提取紋理特徵,網絡深層提取內容特徵。
2.準備三張大小一樣的圖片a(原圖) b(風格圖) c(白噪聲圖)
3.分別計算三張圖片通過VGGnet後的特徵 稱爲 Fa Fb Fc
4.取網絡淺層特徵,計算Mse(Fb -FC),稱爲風格損失,取深層特徵,計算Mse(Fc-Fa),稱爲內容損失
5.總的損失 = 風格損失 + 內容損失
6.反向傳播,更新c(白噪聲圖),保存VGGnet參數不變,整個過程只有c(白噪聲圖)在不斷更新
7.根據新的c重新計算損失,再次更新c

作者的目的是想把藝術大師的名畫的畫風遷移到普通的圖片上,使機器也可以畫名畫。這就涉及到兩方面的圖片——畫風圖片(一般是名畫)、內容圖片(我們想畫的內容)

具體實現的方式用框圖表示出來是這樣的

在這裏插入圖片描述
實際操作是通過不帶全連接層的vgg網絡分別抽取內容圖、畫風圖以及生成圖(就是最後你畫的“名畫”)的特徵圖,然後分別用內容特徵和生成特徵圖計算內容損失,用畫風圖和生成圖計算風格損失,將兩個損失合起來,作爲總體損失,用總體損失來計算生成圖的梯度然後更新生成圖。生成圖最初初始化爲白噪聲圖。vgg用imagenet預訓練模型。
在這裏插入圖片描述
作者的意圖是想通過CNN分別抽取內容圖的特徵圖、名畫的特徵圖。然後用內容特徵圖做出目標內容;用畫風特徵圖做出目標畫風。根據生成圖的內容與目標內容的差異來“畫”(優化)內容;用生成圖與目標畫風的差異來“畫”(優化)風格。(下面這句爲個人理解)這樣一來,上面框圖中最上面的網絡和最下面的網絡實際只跑一次,但中間網絡要跑N次,但這N次跑前向和後向,後向不會優化網絡參數,只會優化生成圖。

特徵圖可以選擇vgg 5個卷積模塊中任何一個模塊的仁義卷積層的輸出,實際畫風提取了多個卷積層的輸出。內容直接用特徵圖表示;畫風采用每個特徵圖自己與自己的格拉姆矩陣表示,通常將多個卷積層提取的多個特徵圖作格拉姆矩陣後疊加。

格拉姆矩陣是計算相關關係的,個人以爲計算特徵圖自己的格拉姆矩陣是提取像素與像素之間的關聯,以這種關聯性來表示風格。

論文中實際方法是這樣的:

2. 實際操練

實際操作過程中,可以分成以下幾步
1.圖像預處理(內容圖、畫風圖)、生成圖佔位符定義
2. 預訓練模型加載
3. 三張圖跑網絡
4. 內容損失計算
5. 格拉姆矩陣計算
6. 風格損失計算
7. 損失和梯度彙總
8. 設置迭代計算圖
9. 選擇生成圖優化方法
10.開始迭代

3.損失函數

  • 利用內容損失還原圖像內容
  • 利用風格損失還原圖像風格

以上是原始的圖像風格遷移的基本原理。事實上,原始圖像遷移的速度非常慢,在CPU上生成一張圖片需要數十分鐘甚至幾個小時,即使在GPU上也需要數分鐘才能生成一張較大的圖片,這大大限制了這項技術的使用場景。速度慢的原因在於,

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