圖像風格化演算法綜述三部曲之 (二) (Neural Style Transfer: A Review)
這篇博文可以看做是我之前放在arXiv上的一篇綜述文章Neural Style Transfer: A Review(v4最新版更新於2018年4月26日)的中文精簡版,對應的項目主頁在這裡Neural-Style-Transfer-Papers,有興趣的同學建議去看英文的完整版。
前言
在上一篇文章中,主要和大家討論圖像風格化遷移的簡介、前傳和起源,目的是想讓大家對風格化這個領域有一個初步的認識。其中起源這一部分比較重要,這裡首先做一個簡單回顧以及補充。
圖像風格化遷移源於兩個其他領域:(1) 紋理建模(Visual Texture Modelling);(2) 圖像重建。
其中紋理建模(Visual Texture Modelling)又分為兩類:
(a) 基於統計分布的參數化紋理建模方法(Parametric Texture Modelling with Summary Statistics)
(b) 基於MRF的非參數化紋理建模方法(Non-parametric Texture Modelling with MRFs)
紋理建模解決了如何對風格特徵進行提取的問題。
而圖像重建解決的則是如何將給定的特徵表達重建還原為一張圖像。上篇文章中沒有提到的一點是圖像重建演算法其實也可以分為兩類:
(a) 基於在線圖像優化的慢速圖像重建方法(Slow Image Reconstruction based on Online Image Optimisation)
(b) 基於離線模型優化的快速圖像重建方法(Fast Image Reconstruction based on Offline Model Optimisation)
由名字也可以看出這種分類方式的主要依據是圖像重建的速度。第一類圖像重建的方法 (a) 是在圖像像素空間做梯度下降來最小化目標函數。這一類演算法的過程可以理解為:由隨機雜訊作為起始圖,然後不斷迭代改變圖片的所有像素值來尋找一個目標結果圖 ,這個目標結果圖的特徵表達和我們作為重建目標的目標特徵表達 相似,即像素迭代的目標為 。由於每個重建結果都需要在像素空間進行迭代優化很多次,這種方式是很耗時的(幾百乘幾百的圖需要幾分鐘),尤其是當需要的重建結果是高清圖的時候,佔用的計算資源以及需要的時間開銷很大。為了加速這一過程,一個直接的想法是我們能不能設計一個前向網路,用數據驅動的方式,餵給它很多訓練數據去提前訓練它,訓練的目標就是給定一個特徵表達作為輸入,這個訓練好的網路只需要一次前向就能輸出一張重建結果圖像。bingo,這種方式最終被一些德國研究者在一篇CVPR論文中證明了其有效性,即第二類方法 (b) 。後續這些德國研究者又融入了生成對抗網路(Generative Adversarial Network)的思想,進一步提升了效果,這個工作發表在了一篇NIPS上。
下面用這張圖總結一下圖像風格化演算法的起源和基石,這篇博文的剩下部分全是建立在這些內容之上的:
ok,下面開始這篇博文的重頭戲——圖像風格化遷移(Neural Style Transfer)的發展(章節序號緊接「圖像風格化演算法綜述三部曲之(一)」)。
4. 發展
前面提到,圖像風格化遷移演算法=圖像重建演算法+紋理建模演算法,而圖像重建和紋理建模又各自可以分為兩類方法。於是乎,我們可以很自然地想到,如果將兩類圖像重建演算法和兩類紋理建模方法進行排列組合,不就可以得到一系列的圖像風格化遷移演算法嘛?事實上,粗略來講,在圖像風格化這一領域大家也確實都是這麼做的。下面我先給出一個現有圖像風格化遷移的分類方法,大家可以和前面的圖1放在一塊看,圖像風格化遷移這一領域的研究脈絡和套路即可瞭然於胸。
下面咱們一起對每一類圖像風格化演算法做具體介紹和優缺點分析。為了討論方便,涉及具體演算法時直接採用上面這張圖中的引用序號進行表示。
一、基於在線圖像優化的慢速圖像風格化遷移演算法
(Slow Neural Method Based On Online Image Optimisation)
1.1. 基於統計分布的參數化慢速風格化遷移演算法
(Parametric Slow Neural Method with Summary Statistics)
通過名字就可以看出,這一類風格化演算法是由基於在線圖像優化的慢速圖像重建方法和基 於統計分布的參數化紋理建模方法結合而來。其中,圖像風格化遷移這一領域的祖師爺Gatys的開山大作[4]就是屬於這一類方法的。在此之前,祖師爺自己先發了一篇NIPS提出了一個新的基於CNN的紋理建模方法[27] [Texture Synthesis Using Convolutional Neural Networks]。[27]的核心思想是在圖像經過預訓練的VGG網路時的特徵表達(feature map)上計算Gram矩陣,利用得到的Gram矩陣來表示一種紋理。Gram矩陣的計算方式是先將預訓練VGG某一層的特徵表達 由 reshape 成 ,然後用reshape後的特徵表達和其轉置矩陣相乘 ,最後得到的Gram矩陣維度為 。祖師爺發現這個Gram矩陣可以很好地表示大多數紋理。結合咱們在上一篇博文討論的內容,這個Gram矩陣的紋理表示方法其實是利用了二階統計量來對紋理進行建模。祖師爺之後用Gram矩陣來對圖像中的風格進行建模和提取,再利用慢速圖像重建方法,讓重建後的圖像以梯度下降的方式更新像素值,使其Gram矩陣接近風格圖的Gram矩陣(即風格相似),然後其VGG網路的高層特徵表達接近內容圖的特徵表達(即內容相似),實際應用時候經常再加個總變分TV項來對結果進行平滑,最終重建出來的結果圖就既擁有風格圖的風格,又有內容圖的內容啦 [Image Style Transfer Using Convolutional Neural Networks] ~
除了Gram矩陣外,還有一些其他方式對風格進行建模。[37]里 @Naiyan Wang 老師在IJCAI2017的文章中從Domain Adaption的角度對風格化遷移進行解釋和分析,並提出了一些其他的用於風格建模的方法 [Demystifying Neural Style Transfer]。這裡簡單解釋一下,Domain Adaption指的是當訓練數據和測試數據屬於不同的域時,我們通過某種手段利用源域有標籤的訓練數據訓練得到的模型,去預測無標籤的測試數據所在的目標域中的數據。Domain Adaption其中一個套路就是以最小化統計分布差異度量MMD的方式,讓目標域中的數據和源域中的數據建立起一種映射轉換關係。 @Naiyan Wang 老師通過公式推導發現,最小化重建結果圖和風格圖的Gram統計量差異其實等價於最小化兩個域統計分布之間的基於二階核函數的MMD。換言之,風格遷移的過程其實可以看做是讓目標風格化結果圖的特徵表達二階統計分布去儘可能地逼近風格圖的特徵表達二階統計分布。由此可以很自然地想到,既然是衡量統計分布差異,除了有二階核函數的MMD外,其他的MMD核函數例如一階線性核函數、高階核函數、高斯核函數,也可能達到和Gram統計量類似的效果。實驗證明也確實如此。這些計算風格特徵的方式其實都是在特徵表達(feature map)的所有channel上進行計算的,除了這些貢獻外, @Naiyan Wang 老師還提出了一個新的用channel-wise的BN統計量去對風格進行建模的方法,即利用VGG某些層的特徵表達 的每一個channel的均值和方差(channel-wise)來表示風格。 ( 表示VGG中第 層的feature map的第 個channel),並取得了很好的效果,後續有很多研究者follow了這種風格建模的方式。
看到這裡大家可以發現一點的是,以往風格化演算法在提取特徵的時候都是在高層次的CNN特徵空間(feature space)中完成的,雖然這樣做的效果在感知效果上(perceptually)優於利用傳統的在像素空間(pixel space)計算的特徵,但由於特徵空間是對圖像的一種抽象表達,會不可避免丟失一些低層次的如邊緣等的圖形信息這會導致風格化結果圖中有一些不是很漂亮的變形等。 @李韶華 老師為解決這一問題,在ACM MM2017的一篇文章中[40][Laplacian-Steered Neural Style Transfer],提出在風格化遷移的過程中同時考慮像素空間和特徵空間。具體做法為在像素空間中將內容圖的拉普拉斯運算元的濾波結果和風格化重建結果圖的濾波結果之間的差異作為一個新的loss,加到祖師爺Gatys提出的損失函數上面。這樣的話就彌補了抽象特徵空間丟失低層次圖像信息的缺點。
1.2. 基於MRF的非參數化慢速風格化遷移演算法
(Non-parametric Slow Neural Method with MRFs)
另外一類慢速風格化演算法就是利用基於MRF的非參數化紋理建模方法對風格信息進行建模了。代表性工作由浙大出身、德國美茵茨大學Postdoc Chuan Li學長完成並發表於CVPR2016 [41] [Combining Markov Random Fields and Convolutional Neural Networks for Image Synthesis]。其核心思想是提出了一個取代Gram損失的新的MRF損失。思路與傳統的MRF非參數化紋理建模方法相似,即先將風格圖和重建風格化結果圖分成若干patch,然後對於每個重建結果圖中的patch,去尋找並逼近與其最接近的風格patch。與傳統MRF建模方法不同之處在於以上操作是在CNN特徵空間中完成的。另外還需要加一個祖師爺Gatys提出的內容損失來保證不丟失內容圖中的高層語義信息。這種基於patch的風格建模方法相比較以往基於統計分布的方法的一個明顯優勢在於,當風格圖不是一幅藝術畫作,而是和內容圖內容相近的一張攝影照片(Photorealistic Style),這種基於patch匹配(patch matching)的方式可以很好地保留圖像中的局部結構等信息。
二、基於離線模型優化的快速圖像風格化遷移演算法
(Fast Neural Method Based On Offline Model Optimisation)
ok,咱們前面介紹的都是用慢速圖像重建方法對風格化結果進行重建的,所以速度肯定是比較慢的,而且很吃資源,在工業界落地的成本肯定是很高的。所以另外一個大的圖像風格化遷移演算法分支——快速圖像風格化遷移演算法主要解決速度問題,核心思想就是利用基於離線模型優化的快速圖像重建方法對風格化結果進行重建,基預先訓練前向網路來解決計算量大、速度慢的問題。根據一個訓練好的前向網路能夠學習到多少個風格作為分類依據,我們將快速圖像風格化遷移演算法分為單模型單風格 (PSPM)、單模型多風格 (MSPM) 和 單模型任意風格 (ASPM) 的快速風格化遷移演算法。下面先放一張不同快速風格化方法的對比圖:
2.1. 單模型單風格的快速風格化遷移演算法
(Per-Style-Per-Model Fast Neural Method)
單模型單風格的快速風格化遷移演算法是最早的一類快速風格化演算法。主要想法是針對每一個風格圖,我們去訓練一個特定(style specific)的前向模型,這樣當測試的時候,我們只需要向前向模型扔進去一張內容圖,就可以前向出一個風格化結果了。如此這般,工業化落地就非常方便了,直接將模型打包,做成一個API,用戶上傳數據後直接把數據扔進去返回結果就好了(模型大小也不大,在淘寶AI Team的 @黃真川 哥指導下對模型進行優化並打包,最終用的時候一個tf模型才0.99MB)。
這一類演算法(簡稱PSPM)其實可以再分成兩類(1)一類是基於統計分布的參數化快速風格化PSPM演算法以及(2)基於MRF的非參數化PSPM演算法:
(1)這一小類演算法代表性工作主要有兩個,一個由斯坦福的Justin Johnson提出(CS231n的大神lecture)[42] [Perceptual Losses for Real-Time Style Transfer and Super-Resolution],另一個由俄羅斯成立不久的Skolkovo科技研究所的Ulyanov提出(Deep Image Prior的作者,關於Deep Image Prior和風格化遷移演算法之間的關係可以參考我這個回答 Yongcheng Jing:如何評價Deep Image Prior這篇文章?)[43] [Texture Networks: Feed-forward Synthesis of Textures and Stylized Images]。這兩個工作的思想相同,都是用一個前向網路求學一個風格。訓練數據可以用COCO的8萬張圖,損失函數和祖師爺Gatys的慢速風格化演算法相同,用Gram統計量來進行風格建模。不同之處在於兩個工作的具體網路框架設計不同,一個基於當時最新的殘差網路設計的,一個是設計了多尺度的網路(我實驗發現基於殘差網路的設計能更好地最小化風格化損失函數,感興趣的同學可以去看我arXiv上Review的實驗部分)。Ulyanov後來又在CVPR2017上對其之前的工作做了改進,他們發現Instance Normalization 比 Batch Normalization 能夠更快、更好地使模型達到收斂(其實就是把batch normalization的batch size設成1),但其實Instance Normalization的idea最早是由 @Naiyan Wang老師在[1603.04779] Revisiting Batch Normalization For Practical Domain Adaptation中提出的 ,即文章中的Adaptive Batch Normalization (AdaBN)。
(2)第二小類基於MRF的快速PSPM風格化演算法也是由Chuan Li 學長提出的[47] [Precomputed Real-Time Texture Synthesis with Markovian Generative Adversarial Networks],他們將自己之前提出的基於patch的慢速風格化演算法進行了加速。同樣是訓練一個前向網路,Chuan Li 學長進一步利用GAN中的判別網路的想法來取代他們慢速風格化演算法中的patch匹配(patch matching)過程。這一工作的最終效果雖然不是特別理想(由我個人的審美來看),但這篇文章的理論價值很大,其想法在另一篇具有開創意義的文章,清華出身、BAIR PhD的大牛 朱俊彥 的Image-to-Image Translation with Conditional Adversarial Networks中被進一步延伸和發展。
2.2. 單模型多風格的快速風格化遷移演算法
(Multiple-Style-Per-Model Fast Neural Method)
樓上的單模型單風格的快速風格化遷移演算法對於每一個風格都要訓練一個模型,這個就很不便利了,而且如果在工業落地的時候,有幾百個風格的話還好說,要是有上萬、百萬的風格的話,所有模型佔用的巨大空間開銷就肯定會被產品經理拎出來說了。於是乎,學術圈的很多研究者開始研究咋利用一個模型去學習很多個風格,即單模型多風格的快速風格化遷移演算法(下面簡稱MSPM)。
大家可以設身處地想一下這個問題,要是需要咱們自己去解決這個問題,可以怎麼去想。首先把多個風格整合到一個模型中,理論上是合理的。比如咱們就說中國山水畫,有很多著名山水畫作品,但不同山水畫雖然風格不盡相同,但是還是有很多相似的地方的(相似特徵),所以對每一幅山水畫訓練得到的網路之間理論上是有共享的部分的。於是乎在這種情況下,對每個風格都學習一個網路本來就是一件很冗餘、浪費資源的事情。沿著這個思路想,我們能不能發掘出不同風格網路之間共享的部分,然後對於新的風格只去改變其有差別的部分,共享的部分保持不變呢?bingo,這個就是Google Brain的眾大佬們研究出來的一個MSPM演算法的基本思路[48] [A Learned Representation for Artistic Style]。他們發現在訓練好的一個風格化網路基礎上,只通過在Instance Norlization層上做一個仿射變換(他們起了個名字叫 Conditional Instance Normalization,簡稱CIN),就可以得到一個具有完全不同風格的結果。這下好了,我們只需要把CIN層中仿射變換的很少的參數與每一個風格進行綁定,每個新風格只需要去訓練這些參數,其餘部分保持不變就ok了~ 最後實驗效果顯著。但說實話這個有點類似科學發現的意味,CIN層work的理由現在也沒有嚴格的推導證明。一個大概的解釋是CIN能夠進行一種style normalization,能夠將圖像中的風格直接normalize成另外一種風格。
另一個由 @微軟亞洲研究院 與中科大的聯合培養博士生 @陳冬冬 哥提出的MSPM演算法[49] [StyleBank: An Explicit Representation for Neural Image Style Transfer] 與Google Brain這篇思路有異曲同工之妙,核心思想為把風格化網路中間的幾層單獨拎出來(文章中起了個名字叫StyleBank層),與每個風格進行綁定,對於每個新風格只去訓練中間那幾層,其餘部分保持不變。這裡也有一篇 @微軟亞洲研究院 的介紹文章:AI 創造藝術風格化:從圖片到視頻。 其中特別感謝 @陳冬冬 哥幫我forwarding演算法結果 :)
ok,上面倆工作的共同點都是把網路的一部分拿出來與每個風格進行綁定,從而實現MSPM,雖然隨著風格的增加,模型大小不會大很多,但總歸還是會跟著變大。所以呢,另外有一些研究者想,咱能不能試試完全用一個網路,看它能不能學到多個風格。這時候需要考慮的問題是既然只用一個網路,那就需要給網路一個信號,我們需要風格化成哪一個風格。這一思路最早由Amazon AI的 @張航 哥在2017年3月提出[51] [Multi-style Generative Network for Real-time Transfer]。 @張航 哥演算法的核心思想是把通過VGG網路提取到的風格特徵與風格化網路中的多個尺度的中間層的feature map通過提出的Inspiration Layer結合在一起,相當於將風格特徵作為信號輸入到網路中來決定要風格化成哪一個風格。最終演算法的效果非常顯著,由我自己實驗結果來看[51]是質量上最接近PSPM演算法結果的MSPM方法。在 @張航 哥的博文里有對這個方法更詳細的介紹:多風格生成網路——實時風格轉換 在此非常感謝 @張航 哥在訓練模型上給予我的幫助 :)
另外除了把風格特徵作為信號外,另一個選擇是把圖像像素作為信號輸入進去風格化網路。這一想法的可行性在浙大李一君學長的工作[50]中得到了證明 [Diversified Texture Synthesis With Feed-Forward Networks]。李一君學長首先將每一張風格圖與一個隨機產生的雜訊圖進行綁定,然後將雜訊圖與風格化網路中間層的feature map進行concat,作為網路進行風格選擇的信號。
2.3. 單模型任意風格的快速風格化遷移演算法
(Arbitrary-Style-Per-Model Fast Neural Method)
有了上面的介紹,現在咱們已經能夠做到用一個網路遷移多個風格了,雖然模型大小的問題一定程度上解決了,不過對於新的一組風格,我們仍然有額外訓練時間的開銷。於是有學者開始想,我們能不能搞一個模型出來,做到Zero-shot Fast Style Transfer,即來一個新風格不需要訓練,我們就可以很快速地把風格化結果輸出來?(這裡我們稱之為單模型任意風格,簡稱ASPM)
最早的ASPM演算法由多倫多大學的Tian Qi Chen(不是UW的明星博士生陳天奇)提出的[52] [Fast Patch-based Style Transfer of Arbitrary Style]。這個演算法是基於patch的,可以歸到基於MRF的非參數化ASPM演算法。基本思想是在CNN特徵空間中,找到與內容patch匹配的風格patch後,進行內容patch與風格patch的交換(Style Swap),之後用快速圖像重建演算法的思想對交換得到的feature map進行快速重建。但由於style swap需要一定的時間開銷,[52]沒有達到實時。
第一篇能達到實時的ASPM演算法由康奈爾的大牛 @Xun Huang 提出[46] [Arbitrary Style Transfer in Real-time with Adaptive Instance Normalization]。[46]中的工作主要受到MSPM的CIN層啟發,提出一個Adaptive Instance Normalization(AdaIN)。AdaIN的輸入是通過VGG提取的風格和內容特徵,用數據驅動的方式,通過在大規模風格和內容圖上進行訓練,讓AdaIN能夠直接將圖像中的內容normalise成不同的風格。這一工作錄用為ICCV2017的Oral。在此非常感謝 @Xun Huang 哥在實驗過程中給予的幫助
另外一個數據驅動的ASPM方法由CIN的提出者——Google Brain提出[53] [Exploring the Structure of a Real-time, Arbitrary Neural Artistic Stylization Network]。[53]可以看做是[48]的一個follow-up的工作,既然通過改變CIN層中仿射變換的參數,就可以得到不同的style,換言之,只要任意給一個風格,我們只需要知道他的CIN層中的仿射變換的參數就可以了。沿著這個思路,Google Brain的研究者設計和訓練了一個style prediction network去專門預測每個style的仿射變換的參數,style prediction network需要大規模style和content圖來進行訓練。這個方法的缺點也很明顯,數據驅動的方式不可避免地導致風格化效果與訓練數據集中style的種類和數量非常相關。
由以上數據驅動ASPM演算法的局限性,李一君學長進一步思考能不能用一種不需要學習訓練的方式(style learning-free),而是單純使用一系列特徵變換來進行ASPM風格遷移 [54] [Universal Style Transfer via Feature Transforms]。李一君學長發現在VGG提取的特徵上用ZCA whitening transform能夠把一張圖片的風格信息抹去,而保留原有高級語義信息,之後應用coloring transform將風格圖的顏色進行遷移,即可重建出效果不錯的風格化結果。這一工作發表於NIPS2017上,也是很少見的一篇NIPS上發表的application類的文章,足見學術界對Neural Style Transfer的關注。
由以上討論,大家可以發現,其實在圖像風格化遷移這一領域的很多代表性工作中都有著中國研究者的身影。這些工作經過進一步地傳承與發展,最終形成了這一全新的領域。前一陣子看到 @周博磊 老師的談華人學者leadership問題的文章時正好在準備這篇Review,當時很有感觸,在此貼上 @周博磊 老師的文章鏈接與大家共勉: 從CVPR『18談談華人研究者的Leadership。
下期預告:以上介紹的都是一般意義上的圖像風格化遷移演算法,目前學術界和工業界還出現了很多基於圖像風格化演算法衍生出的新的有意思的應用。下篇文章——三部曲之(三)將用一系列有意思的展示圖來介紹這些有趣的擴展應用。
如果我在那篇Review中遺漏了你的文章,歡迎給我發郵件(ycjing@zju.edu.cn),我會儘快加到裡面去,謝謝!:)
作者:Yongcheng Jing
Fortunately advised by Prof. Mingli Song and Prof. Yizhou Yu.
推薦閱讀:
※CS231n 2017 Lecture 1: Course Introduction 隨堂筆記
※刷新三數據集紀錄的跨鏡追蹤(行人再識別-ReID)技術介紹
※基於深度學習的計算機視覺應用之目標檢測
※Rocket Training: 一種提升輕量網路性能的訓練方法
TAG:深度學習DeepLearning | 計算機視覺 | 圖像處理 |