1. 程式人生 > >【論文閱讀】Arbitrary Style Transfer in Real-time with Adaptive Instance Normalization

【論文閱讀】Arbitrary Style Transfer in Real-time with Adaptive Instance Normalization

簡述

看這篇論文,並實現一下這個。(如果有能力實現的話)

實時任意風格轉換(用自適應Instance Normalization)

instanceNorm = batchsize=1 的 batchNorm 1

Abstract

Gatys et al. 最近介紹了一種神經網路演算法,以另外一個圖片的樣式來呈現一個內容圖片,實現了一個被稱之為風格遷移的東西。然而,他們的框架需要慢慢的迭代優化過程,這限制了它的實際應用。(你敢信?我試了下這個框架,跑了一晚上才跑完1/20(雖然我是用cpu,但我的cpu也有16個核啊…))用了前向傳播神經網路的方法被提出來了,去加速神經風格轉換。但不幸的是,這樣的速度提升是有代價的:這樣的網路往往都被繫結在一個固定的風格當中,不能應用在任意一個新的風格上。在這篇論文當中,我們提出一個簡單,但是有效的方法使得,第一個能夠實時地進行任意風格轉換。在我們方法的核心,是一個新奇的自適應例項正則化層(AdaIN),來使得內容特徵的均值和方差與風格特徵的均值和方差對齊。(看到這,我其實完全不知道這個論文在寫什麼了…但是有點不明覺厲的感覺…

)我們的方法的速度跟最快的方法可以媲美,但是卻對資料集沒有限制。此外,我們的方法允許靈活的使用者進行一些操控,比如,內容和風格權衡,風格插值,色彩和空間的控制,所有的這一切,都是用一個前向傳播的神經網路實現。

在這裡插入圖片描述

Introduction

Gatys et al.的基礎工作表示,深度神經網路不僅可以編碼內容資訊,也可以編碼一張圖片的風格資訊。此外,圖片的風格和內容居然是可以分隔的,這使得可能去改變一張圖片的風格同時還保留它的內容。這個風格轉換的方法足夠靈活去將內容和任意一張圖片的風格組合在一起。然而,它依賴於一個非常緩慢的過程優化過程。

在提高速度上已經有了非常有意義的貢獻了,嘗試去訓練一個前向傳播的神經網路,結果表現出風格上的相近。關於絕大多數前向傳播網路來說,一個最大的限制,就是每個網路被單個的風格給限制住了。這有了一些演算法來解決了這個問題,但是他們任然被一些有限的風格給限制住了,又或者速度比單個風格的要慢很多。

在這個工作當中,我們解決了這個神經網路的風格轉換上的這個基本的靈活度和速度的兩難的問題。我們的方法可以實時地轉換任意的新風格,同時保證了優化框架的靈活性和速度上接近最快的前饋神經網路。我們的方法是被IN(Instance normalization)層給啟發的,這個在風格轉換上有很令人驚訝的效果。為了解釋這個instance normalization的成功,我們提出了一個新的
展示(instance normalization通過正則化圖片特徵統計)。被這個效果給刺激到了,我們做了點改進提出了自適應的instance normalization(AdaIN).給了一個內容的輸入和一個效果的輸入,AdaIN簡單地調整內容圖片的均值和方差,去匹配風格圖片。通過實驗,我們發現AdaIN有效地通過調整特徵統計量,來保證內容和風格。一個解碼的神經網路,是學會去生成一個最後的風格話的圖片,通過倒置這個AdaIN的輸出到原來的圖片空間。我們的方法接近快三個量級,而且還沒有犧牲靈活性(可以使用任意的風格)。此外,我們的方法提供了豐富的使用者控制,還不用修改訓練的過程。

在這裡插入圖片描述

在這裡插入圖片描述

【PS】:看完這個,我只能說這個論文我只能說這個也太強了吧…怪不得發到了cvpr

Backgroud

和往常一樣,這裡我也不會看related worked.主要是我現在水平不夠,看也看不太懂。在這個領域我也只看過這個風格轉換的第一個論文的一個簡單的解析。

Batch Normalization

Ioffe和Szegedy初始的工作,介紹了一個batch normalization層,通過正則化特徵統計量,可以明顯地使得前網路的訓練的過程變得簡單了。
BN一開始是被設計是為了給訓練判別式網路進行提速的。但是發現在影象生成的模型上也挺有效的。 給一個輸入 x R N C H W x\in R^{N*C*H*W} ,(這個表達在pytorch上很常見(後來發現這個是用torch實現的,算是同源吧(torch用的是lua))),BN 正則了這個均值和標準差給每一個單獨的特徵通道。

B N ( x ) = γ ( x μ ( x ) σ ( x ) ) + β BN(x) = \gamma (\frac{x-\mu(x)}{\sigma(x)}) + \beta

其中那兩個額外的引數就是放射引數(可以理解為線性對映),這兩個引數是從資料中學習到的。

注意,這裡是關於通道C進行遍歷的

在這裡插入圖片描述

所以其實還是非常好理解的。

Instance Normalization

和BN的區別就是不是在BATCH的,也就是說這裡不使用這個N個維度的資料,而是把N和C一起考慮。很明顯這樣會增加更多的變數,也就考慮的更細緻了。

就是說在計算在均值和方差的時候多考慮下N這個變數
所以,計算出來的均值和方差是有N*C個

Conditional Instance Normalization

這個就是在IN的基礎上,加了一個狀態的說法。然後構造出在不同的狀態下的instance normalization

Adaptive Instance Normalization

如果說IN,就是把輸入正則化到一個風格(用仿射的引數來區分),這有可能去應用到任意給的一個風格上麼?這裡,我們提出一個在IN上的改進(Adaptive Instance Normalization)

AdaIN 收到內容的輸入和風格的輸入,分別標記為x和y。
不像BN,IN和CIN,AdaIN沒有可以學習的仿射引數。而是,這裡適應性計算這個對映引數。

然後,我們這裡只是簡單的使用標準值來作為scale引數,然後均值作為偏置引數。(看到這簡直忍不住叫好!太秀了吧!)

在這裡插入圖片描述

在這裡插入圖片描述

Experimental Setup

論文中說把程式碼放到了github上了。但是是用torch寫的,所以語言是lua,真的沒學過這個哇…看不太懂…

whatever,還是先看文章吧,如果能把實驗部分看懂了,估計也是可以實現的吧??

Architecture

我們的風格轉換網路T獲取一個內容圖片 c c ,並且任意的一張風格圖片s作為輸入,並且合成一張圖片(內容圖的內容,並且也有風格圖的風格的)。我們採用一個簡單的encode-decode,編碼器 f f 是被放在了先訓練好的VGG-19的前幾層(在relu4_1之前的). 在編碼器之後,內容圖和風格圖都被放在了特徵空間中。我們同時培養特徵對映到AdaIN層,標定內容特徵的均值和方差到對應的風格特徵上,產生目標圖片 t t

t = A d a I N ( f ( c ) , f ( s ) ) t = AdaIN(f(c), f(s))

一個隨機的初始化的解碼器g被訓練去對映t到圖片空間。
生成有了風格的圖片T(c,s)

T ( c , s ) = g ( t ) T(c, s) = g(t)

Training

(關鍵過程):

  • 使用adam optimizer
  • a batch size of 8 content-style image pairs.
  • 先resize每個圖片的最小的維度到512,在保留圖片的比例的情況下,隨機裁剪到256*256
  • 使用VGG-19去計算損失函式去訓練decoder
    • L = L c + λ L s L=L_c+\lambda L_s 分別對應內容上的損失和在風格上的損失。才加一個風格的損失權重。
    • 內容上的損失使用的是 Euclidean distance(歐氏距離),用AdaIN來生成t作為內容的目標。
    • 風格上,這裡就不使用Gram矩陣,而是使用AdaIN的均值和方差這些統計量了。
    • 風格上使用了VGG,然後relu1 1, relu2 1, relu3 1, relu4 1用這些層。這些層的結果的損失和作為風格上的損失,而不是算Gram矩陣。

  1. 1 ↩︎