(ESRGAN)加強型超分辨率生成對抗網絡-解讀與實現

咱們知道GAN 在圖像修復時更容易獲得符合視覺上效果更好的圖像,今天要介紹的這篇文章——ESRGAN: Enhanced Super-Resolution Generative Adversarial Networks,它 發表於 ECCV 2018 的 Workshops,做者在 SRGAN 的基礎上進行了改進,包括改進網絡的結構、判決器的判決形式,以及更換了一個用於計算感知域損失的預訓練網絡。json

超分辨率生成對抗網絡(SRGAN)是一項開創性的工做,可以在單一圖像超分辨率中生成逼真的紋理。這項工做發表於 CVPR 2017。網絡

可是,放大後的細節一般伴隨着使人不快的僞影。爲了更進一步地提高視覺質量,做者仔細研究了 SRGAN 的三個關鍵部分:1)網絡結構;2)對抗性損失;3)感知域損失。並對每一項進行改進,獲得 ESRGAN。框架

具體而言,文章提出了一種 Residual-in-Residual Dense Block (RRDB) 的網絡單元,在這個單元中,去掉了 BN(Batch Norm)層。此外,做者借鑑了 Relativistic GAN 的想法,讓判別器預測圖像的真實性而不是圖像「是不是 fake 圖像」。函數

最後,文章對感知域損失進行改進,使用激活前的特徵,這樣能夠爲亮度一致性和紋理恢復提供更強的監督。在這些改進的幫助下,ESRGAN 獲得了更好的視覺質量以及更逼真和天然的紋理。性能

改進後的效果圖(4 倍放大):測試

在紋理和細節上,ESRGAN都優於SRGAN優化

SRGAN的思考與貢獻spa

現有的超分辨率網絡在不一樣的網絡結構設計以及訓練策略下,超分辨的效果獲得了很大的提高,特別是 PSNR 指標。可是,基於 PSNR 指標的模型會傾向於生成過分平滑的結果,這些結果缺乏必要的高頻信息。PSNR 指標與人類觀察者的主觀評價從根本上就不統一。.net

一些基於感知域信息驅動的方法已經提出來用於提高超分辨率結果的視覺質量。例如,感知域的損失函數提出來用於在特徵空間(instead of 像素空間)中優化超分辨率模型;生成對抗網絡經過鼓勵網絡生成一些更接近於天然圖像的方法來提高超分辨率的質量;語義圖像先驗信息用於進一步改善恢復的紋理細節。debug

經過結合上面的方法,SRGAN 模型極大地提高了超分辨率結果的視覺質量。可是 SRGAN 模型獲得的圖像和 GT 圖像仍有很大的差距。

ESRGAN的改進

文章對這三點作出改進:

1. 網絡的基本單元從基本的殘差單元變爲 Residual-in-Residual Dense Block (RRDB);

2. GAN 網絡改進爲 Relativistic average GAN (RaGAN);

3. 改進感知域損失函數,使用激活前的 VGG 特徵,這個改進會提供更尖銳的邊緣和更符合視覺的結果。

 

網絡結構及思想

生成器部分

首先,做者參考 SRResNet 結構做爲總體的網絡結構,SRResNet 的基本結構以下:

爲了提高 SRGAN 重構的圖像質量,做者主要對生成器 G 作出以下改變:

1. 去掉全部的 BN 層;

2. 把原始的 block 變爲 Residual-in-Residual Dense Block (RRDB),這個 block 結合了多層的殘差網絡和密集鏈接。

以下圖所示:

思想

BN 層的影響:對於不一樣的基於 PSNR 的任務(包括超分辨率和去模糊)來講,去掉 BN 層已經被證實會提升表現和減少計算複雜度。

BN 層在訓練時,使用一個 batch 的數據的均值和方差對該 batch 特徵進行歸一化,在測試時,使用在整個測試集上的數據預測的均值和方差。當訓練集和測試集的統計量有很大不一樣的時候,BN 層就會傾向於生成很差的僞影,而且限制模型的泛化能力。

做者發現,BN 層在網絡比較深,並且在 GAN 框架下進行訓練的時候,更會產生僞影。這些僞影偶爾出如今迭代和不一樣的設置中,違反了對訓練穩定性能的需求。因此爲了穩定的訓練和一致的性能,做者去掉了 BN 層。此外,去掉 BN 層也能提升模型的泛化能力,減小計算複雜度和內存佔用。

 技巧

除了上述的改進,做者也使用了一些技巧來訓練深層網絡:

1. 對殘差信息進行 scaling,即將殘差信息乘以一個 0 到 1 之間的數,用於防止不穩定;

2. 更小的初始化,做者發現當初始化參數的方差變小時,殘差結構更容易進行訓練。

判別器部分

除了改進生成器,做者也基於 Relativistic GAN 改進了判別器。判別器 D 使用的網絡是 VGG 網絡,SRGAN 中的判別器 D 用於估計輸入到判別器中的圖像是真實且天然圖像的機率,而 Relativistic 判別器則嘗試估計真實圖像相對來講比 fake 圖像更逼真的機率。

Experiments篇

 

若是想用tensorboard,只需將train_ESRGAN.json文件中name裏的debug拿掉便可:

 

另外,因爲我使用的tensorboard版本比較新,須要將train.py中的49行的SummaryWriter的參數名稱有log_dir改成logdir,由於新版的源碼裏這一塊更新過:

 

 

PS: Windows上的實現推薦閱讀文章vs2017 ESRGAN(Enhanced SRGAN)的PyTorch實現

相關文章
相關標籤/搜索