AdaIN-論文閱讀(Arbitrary Style Transfer in Real-time with Adaptive Instance Normalization)


Abstract

  慣例先說了一下原來的兩種方法的優缺點

  第一種

  Gatys et al. recently introduced a neural algorithm that renders a content image in the style of another image, achieving so-called style transfer 

  Gatys等人最近帶來了一種神經網絡的算法,這個算法可以可以使一張圖片用另一張圖片的風格表達出來,即樣式轉換

  優缺點:風格多樣化程度自由,但訓練過程比較漫長,原文里說:their frame-work requires a slow iterative optimization process

  第二種

  由於第一種的方法太慢了,提出了第二種前饋神經網絡的的快速逼近方法(Fast approximations with feed-forward neural networks)用來加速風格轉換的速度

  優缺點:訓練速度確實快了,但樣式轉換比較單一

  接着引出自己的方法In this paper, we present a simple yet effective approach that for the first time enables arbitrary style transfer in real-time

  在這篇文章中,我們提出了一種簡單但是有效的方用來首次實現任意樣式的實時風格轉換

  方法的核心是加入了一個adaptive instance normalization (AdaIN) layer,

  這個層做的事情就是利用待轉換風格圖片的特征的均值和方差,用來改變原來圖片的均值和方差

  打個比方有x,y兩張圖片,想把y上的風格轉移到x上去,首先吧x,y的encode后的特征提取出來求均值和方差,x做歸一化,再用y的均值方差進行分布調整

  然后就是我們的方法實在是太好了,又快又靈活,作者還用了fastest來修飾,可以說非常自信了

1. Introduction

  還是在說前面abstract里的兩種方法,只是比上面更清楚一點

  第一種

  從先前Gatys他們做的工作中可以發現神經網絡不僅可以提取圖片的內容信息,還可以提取樣式信息,這也為保存內容的前提下改換樣式提供了可能性

  然后欲抑先揚:Gatys做的好啊,非常靈活,但是速度太慢了

  第二種

  因為前面速度比較慢,所以有些人嘗試加速神經網絡的訓練速度,比如在24,31,51三篇里就提出了加速的方法,通過只執行一次的前項傳播就可以實現樣式的轉換

  但是問題就是只能局限於一個樣式或者一組樣式

 

  好!重點來了 作者開始引出自己的方法,說自己解決了這種兩難的困境(flexibility-speed dilemma

  作者說自己受到52,11兩篇論文的啟發,這兩篇論文中的IN(instance normalization)的方法

 ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

大概說一下IN的方法:

IN也是提取出圖片的特征均值和方差標准化公式為

 

 

x為輸入的樣本,減均值除標准差做標准化,然后通過gamma和beta來再調整x的分布,其中gamma和beta是需要訓練的參數,叫仿射參數

 ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

  ok接着往下

  作者結合了基於Gatys他們的框架所擁有的靈活性和上面所說的一次前項傳播的速度

  作者解釋了一下為什么為什么IN能用

  IN performs style normalization by normalizing feature statistics, which have been found to carry the style information of an image 

   因為feature statistics(后面翻譯成特征統計量叭,也就是通道的均值和方差,畢竟筆者四級還沒過找不到好翻譯了)包含圖片的樣式信息,而IN是通過標准化特征統計量來使得樣式標准化,

   接着基於上面的這些討論,作者提出了AdaIN這個方法,輸入內容和樣式,然后用內容的均值和方差去匹配樣式的均值和方差

  通過這個操作可以得到匹配后的編碼,再把這個編碼丟回訓練好的decoder里生成圖片

  最后又說了一下這個方法比16里的快了三個數量級,並且非常靈活 (不忘初心了屬於是)

2. Related Work

  這段說了兩個東西,sytle transferDeep generative image modeling已經做了哪些東西

  style transfer

  更加詳細的介紹了原來的樣式轉換是怎么做到的,早期的一些方法無法捕獲 semantic structures(個人理解是指圖片除了色彩外的信息),例如采用linear filter responses and non-parametric sampling

  在這之后Gatys引入的神經網絡的概念到樣式轉換中,效果非常好,接着這幾年又有一些改進:

  Li和Wand等人在30里提出:在深層特征空間中引入一種基於馬爾可夫隨機場(MRF)的框架來增強局部模式

  Gatys在16中也提出了一些可以控制色彩保留,空間位置和樣式轉移規模的方法

 

  以上方法效果不錯但是就是時間太慢了,所以不實用

  接着有人提出用前饋神經網絡去代替這個優化進程,加快了速度,但是不能適應訓練期間未觀察到的任意風格

  Deep generative image modeling

  這里說了一下目前生成圖片的各種技術,variational auto-encoders,auto-regressive models,GAN,其中GAN是效果最好的,所以有了各種變種GAN(畢竟我也是看了nvidia的sytleGAN才來補課AdaIN的)

 

3. Background

  3.1. Batch Normalization

    這段介紹了批標准化,其實批標准化我在前面的博客里寫過,作用就是如果用sigmoid這樣的激活函數,且樣本點在沒有盡量分布在0軸左右的話,就會導致整個訓練過程非常緩慢,樣本點越遠離0軸,越緩慢,BN的操作使得每一層的輸出都盡量較為分散的落在數軸0的兩端,盡量使得數據處於梯度的敏感區域,加速梯度下降的過程,圖如下

 

 

   如果默認圖像的格式為N*C*H*W(pytorch默認格式就是:批次大小*通道數(RGB)*高*寬),BN公式如下

 

 

 

   解釋一下每個參數

  gammabeta:仿射參數,從輸入的圖片中訓練獲得(就是用這兩個值調整標准化后的X)

  mu(x):均值

  sigma(x):標准差

  BN在訓練的時候使用minibatch中數據,而在測試的時候使用總體的數據,這就導致在訓練和測試的時候因為BN里取值不同,會導致有差異出現,所以后來提出了一種批重標准化,在訓練的過程中逐漸加入全部的數據來解決這個問題

  3.2. Instance Normalization

    在卷積網絡中,每次卷積后都會加一個BN層,但是在52中發現,如果吧BN換成IN(instance normalization)效果就會好很多,作者也說明了IN在他們的實驗中確實效果不錯

   接着是IN的公式

 

   其中gamma,beta和上面的BN是一樣的,但是在計算mu(x)sigma(x)時和BN不同

 

   csdn里有一篇文章對這幾種標准化畫了直觀的圖有助於理解

 

 

 

   和BN層不一樣,IN層即使是在測試時,也是使用minibatch的取值進行測試

  3.3. Conditional Instance Normalization

    Dumoulin在11里提出了修改gammabeta而不是mu(x)sigma(x)的方案(煉丹我瘋狂的煉丹),在訓練過程中,從一組固定的樣式中隨機選擇樣式圖像及其索引s,s∈{1,2, ..., S}用來改變仿系數,

 

  將內容圖片輸入到網絡里,網絡里有CIN層,利用選出來的樣式得到gammabeta兩個參數控制CIN層

  在這個網絡中,使用相同的conv層參數,不同的仿射參數,可以獲得完全不同的樣式的圖像

   Dumoulin等人的方法遷移有限種的風格,想遷移新的的風格則需要訓練新的模型。

4. Interpreting Instance Normalization

  這里就開始更加詳細的介紹為什么IN及其變種的操作在樣式轉移上能用,Ulyanov認為是因為IN對內容圖像的對比對不變性(IN to its invariance to the contrast of the content image),但是,由於IN是在操作圖片的feature space,所以應該比直接對像素里的對比度標准化有更加深遠的影響,而且只需要改變仿射參數就可以使得完全改變輸出圖片的樣式。

  作者接着說了以前是怎么來得到並操作樣式特征的

  在16中Gatys用二階統計量作為優化的手段

  在33中Li發現其他的一些數據例如通道的均值和方差也對樣式轉換有影響

  於是作者認為,IN通過標准化特征的統計量(例如均值和方差),來實現標准化樣式。並且作者還相信除了DNN的結構,利用GAN中的Generator的特征統計量也可以控制圖像生成

  接着開始試驗,他們跑了改善紋理的網絡代碼,增加了BN或者IN層,效果如下

   

 

   作者這里做了三次試驗

·  第一次是發現BN的效果確實不如IN

  第二次是為了去證明Ulyanov在52里的猜想,利用了已經對比度標准化后的圖跑,結果發現IN和BN依舊有效,證明在52中的猜想並不完全正確,且BN的損失收斂還是不如IN

  第三次試驗是用已經樣式標准化后的圖片來做,這次IN帶來的改變更小,小到可以用樣式規范化並不是完美的來解釋(The remaining gap can be explained by the fact that the style normalization with [24] is not perfect.

  最后總結說在未處理(只樣式標准化)的圖像上使用IN和在已經處理過的圖像上使用BN的收斂速度差不多快,以此證明IN確實是可以做到樣式規范化

  這段我沒太讀懂,希望以后能有更好的理解:接着說了一下BN這個操作,BN是標准化了一批樣本的特征量信息,使得這批樣本以某一個樣式作為中心,但是畢竟每個樣本的樣式可能不同,這樣標准化下去的樣本和在中心的那個樣本進行同樣的樣式轉換時,會導致效果不好。雖然卷積層會盡量找補一些這種操作下產生的差異,但是還是比較困難的。回到IN,IN可以專注於處理樣式特征,而其他網絡可以專注與處理圖片的內容特征,同時舍棄樣式特征。同理CIN通過操作仿射參數來使得標准化后的特征統計量來改變成需要的特征,從而達成樣式轉換的目的。

 5. Adaptive Instance Normalization

  重點來了,作者在這部分提出了一個一個問題

  If IN normalizes the input to a single style specified by the affine parameters, is it possible to adapt it to arbitrarily given styles by using adaptive affine transformations?

  如果IN可以通過仿射參數來進行輸入的標准化,那是否可以通過使用自適應的仿射參數來達到自適應任何一個給定的樣式?

  於是他們根據這個關於IN的討論進行延展,提出了AdaIN

  AdaIN是輸入一個內容圖片x,和一個風格圖y,然后用x的通道的均值和方差去匹配y的均值和方差。和前面的BN,IN,CIN不同,這次的AdaIN里的仿射參數是不需要進行訓練的,他會根據樣式的輸入自動設定仿射參數

   從直覺上看來,單獨考慮一個特征的通道,這個通道檢查樣式的brushstrokes特征。擁有這個stroke的樣式圖片將會對這種特征探測產生一個高平均激活度響應?(這句話不太讀懂)

  通過AdaIN生成的輸出圖片對於上述的特征將會有相同的高平均激活度(響應?),同時保留內容圖片的空間結構。

  通過decoder,可以將brushstrokes特征解碼成一張圖片。作者認為這種特征通道的方差可以更精細的encoder樣式信息,也最終會影響到AdaIN的輸出和最后的結果輸出。

  總的來說,AdaIN在特征空間中通過轉換特征統計量(通道的均值和方差)來執行轉換樣式

  接着繼續說了一下自己和6的樣式交換層(style swap layer)做的工作相同,但是AdaIN比他更快,且內存消耗更少,和IN相同,AdaIN基本不增加計算成本。

 

 

6. Experimental Setup

 

   上圖展示了作者他們自己寫出的樣式轉換算法,使用固定下來的VGG-19的網絡的前面幾層去encoder內容和樣式圖片,接着使用AdaIN層在特征空間中進行樣式轉換。再利用decoder將AdaIN輸出解碼回圖像。這里設計了兩個loss,都是利用decoder輸出出來的圖片再用一個encoder編碼回去

  第一個Lc計算和AdaIN輸出的loss,這一步用來訓練decoder是否正確解碼了AdaIN的輸出

  第二個Ls計算了原始圖片的編碼loss,這一步用來訓練encoder是否可以正確編碼信息

6.1 Architecture

  作者的樣式轉換網絡T輸入兩張圖片,一張內容圖片c,一張樣式圖片s,最后輸出一張圖片,這張輸出的圖片具有c的內容和s樣式。在網絡中還加入了一個簡單的encoder-decoder結構,其中encoder是利用了預訓練的VGG19的網絡固定前幾層得到的。將內容圖片和樣式圖片輸入到網絡里后,encoder會將這兩個圖片在特征空間進行編碼,再將這兩個特征進行結合,輸入到AdaIN層中,這層會將內容特征的均值、方差以及樣式特征的均值、方差進行對齊,產生如下的目標映射:

     t=AdaIN(f(c), f(s))

  再將一個隨機初始化的decoder g(generator)進行訓練,這個g的作用就是為了將他特征編碼再轉換回圖片

 T(c, s) =g(t)

  decoder盡可能的鏡像encoder,通過nearest的插值方式做池化層上采樣,減少棋盤效應

  ----------------------------------------------------------------------------------------------------------------------------------------------------------------

  說一下棋盤效應,因為卷積核無法整除步長,就會導致在重復上采樣繪圖的部分不均勻

 

  ----------------------------------------------------------------------------------------------------------------------------------------------------------------

 

   在f和g中使用反射填充(torch.nn.ReflectionPad2d)來避免邊界偽影

  作者接着討論了他認為另外一個重要的問題,就是該不該在decoder里添加標准化比如是BN還是IN,或者不添加

  接着引用了4里說的IN normalizes each sample to a single style while BN normalizes a batch of samples to be centered around a single style.

  但是我們希望decoder可以生成各種圖像,所以作者在decoder的選擇是都不加,在7.1節會證明這個觀點

6.2. Training

  作者使用MS-COCO數據集做內容圖片,風格圖片是來自

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM