1. 程式人生 > >Perceptual Losses for Real-Time Style Transfer and Super-Resolution----論文筆記

Perceptual Losses for Real-Time Style Transfer and Super-Resolution----論文筆記

本文是參考文獻[1]的筆記。該論文是Li Fei-Fei名下的論文。

引入

最近新出的影象風格轉換演算法,雖然效果好,但對於每一張要生成的圖片,都需要初始化,然後保持CNN的引數不變,反向傳播更新影象,得到最後的結果。效能問題堪憂。

但是影象風格轉換演算法的成功,在生成影象領域,產生了一個非常重要的idea,那就是可以將卷積神經網路提取出的feature,作為目標函式的一部分,通過比較待生成的圖片經過CNN的feature值與目標圖片經過CNN的feature值,使得待生成的圖片與目標圖片在語義上更加相似(相對於Pixel級別的損失函式)。

影象風格轉換演算法將圖片生成以生成的方式進行處理,如風格轉換,是從一張噪音圖(相當於白板)中得到一張結果圖,具有圖片A的內容和圖片B的風格。而Perceptual Losses則是將生成問題看做是變換問題。即生成影象是從內容圖中變化得到。

影象風格轉換是針對待生成的影象進行求導,CNN的反向傳播由於引數眾多,是非常慢的,同樣利用卷積神經網路的feature產生的loss,訓練了一個神經網路,將內容圖片輸入進去,可以直接輸出轉換風格後的影象。而將低解析度的影象輸入進去,可以得到高解析度的影象。因為只進行一次網路的前向計算,速度非常快,可以達到實時的效果。

架構

下面這個網路圖是論文的精華所在。圖中將網路分為Transform網路和Loss網路兩種,在使用中,Transform網路用來對影象進行轉換,它的引數是變化的,而Loss網路,則保持引數不變,Transform的結果圖,風格圖和內容圖都通過Loss Net得到每一層的feature啟用值,並以之進行Loss計算。

在風格轉換上,輸入x=yc是內容圖片。而在圖片高清化上,x是低解析度圖片,內容圖片是高解析度圖片,風格圖片未曾使用。

網路細節

網路細節的設計大體遵循DCGAN中的設計思路:

  • 不使用pooling層,而是使用strided和fractionally strided卷積來做downsampling和upsampling,
  • 使用了五個residual blocks
  • 除了輸出層之外的所有的非residual blocks後面都跟著spatial batch normalization和ReLU的非線性啟用函式。
  • 輸出層使用一個scaled tanh來保證輸出值在[0, 255]內。
  • 第一個和最後一個卷積層使用9×9的核,其他卷積層使用3×3的核。

確切的網路引數值請參考文獻2。

輸入輸出

  • 對於風格轉換來說,輸入和輸出的大小都是256×256×3。
  • 對於圖片清晰化來說,輸出是288×288×3,而輸入是288/f×288/f×3,f是壓縮比,因為Transform Net是全卷積的,所以可以支援任意的尺寸。

Downsampling and Upsampling

  • 對於圖片清晰化來說,當upsampling factor是f的時候,使用後面接著log2f個stride為1/2卷積層的residual blocks.
    • fractionally-strided卷積允許網路自己學習一個upsampling函數出來。
  • 對於風格轉換來說,使用2個stride=2的卷積層來做downsample,每個卷積層後面跟著若干個residual blocks。然後跟著兩個stride=1/2的卷積層來做upsample。雖然輸入和輸出相同,但是這樣有兩個優點: 
    • 提高效能,減少了引數
    • 大視野,風格轉換會導致物體變形,因而,結果影象中的每個畫素對應著的初始影象中的視野越大越好。

Residual Connections

殘差連線可以幫助網路學習到identify function,而生成模型也要求結果影象和生成影象共享某些結構,因而,殘差連線對生成模型正好對應得上。

損失函式

影象風格轉換演算法類似,論文定義了兩種損失函式。其中,損失網路都使用在ImageNet上訓練好的VGG net,使用φ來表示損失網路。

Feature Reconstruction Loss

  • j表示網路的第j層。
  • CjHjWj表示第j層的feature_map的size

使用不同層的重建效果如下:

Style Reconstruction Loss

對於風格重建的損失函式,首先要先計算Gram矩陣,

產生的feature_map的大小為CjHjWj,可以看成是Cj個特徵,這些特徵兩兩之間的內積的計算方式如上。

兩張圖片,在loss網路的每一層都求出Gram矩陣,然後對應層之間計算歐式距離,最後將不同層的歐氏距離相加,得到最後的風格損失。

不同層的風格重建效果如下: 

Simple Loss Function

  • Pixel Loss,畫素級的歐氏距離。
  • Total Variation Regularization,是之前feature inversion和super resolution工作中使用的損失,具體還需參考論文的參考論文[6,20,48,49]

Loss對比

在影象風格轉換任務上,針對不同解析度的影象,Loss值在Perceptual Loss(ours)和影象風格轉換([10])以及內容圖片上的。

可以看到,使用Perceptual Loss相當於原始演算法迭代50到100次。

而就時間來看:

可以提升幾百倍,在GPU上0.0015s可以達到相當的效果,在CPU上更具實用性。

效果圖

風格轉換



雖然風格轉換是在256的圖片上訓練的,但也可以應用到其他size上,比如512的

圖片超清

4倍清晰度提升:


8倍清晰度提升:

總結

貢獻當然就是影象風格轉換的實用化:

  • 速度三個量級的提升。
  • fully convolutional network可以應用於各種各樣的尺寸。

參考文獻

  1. Perceptual Losses for Real-Time Style Transfer and Super-Resolution.
  2. Perceptual Losses for Real-Time Style Transfer and Super-Resolution: Supplementary Material