論文筆記:《DeblurGAN: Blind Motion Deblurring Using Conditional Adversarial Networks》
論文來源:arXiv2017
論文作者:Orest Kupyn,Volodymyr Budzan等
下載鏈接:PDF | github
論文主要貢獻:
- 提出使用DeblurGAN對模糊圖像去模糊,網路結構基於cGAN和「content loss」。獲得了目前最佳的去模糊效果
- 將去模糊演算法運用到了目標檢測上,當待檢測圖像是模糊的的時候,先對圖像去模糊能提高目標檢測的準確率
- 提出了一個新的合成模糊圖像的方法
Introduction
最近,生成式對抗網路(GAN)在圖像超解析度重建、in-painting等問題上取得了很好的效果。GAN能夠保留圖像中豐富的細節、創造出和真實圖像十分相近的圖像。而在CVPR2017上,一篇由Isola等人提出的《Image-to-Image Translation with Conditional Adversarial Networks》的論文更是使用條件生成式對抗網路(cGAN)開啟了「image-to-image translation」任務的大門。
本文的思想主要受近期圖像超解析度重建和「image-to-image translation」的啟發,把去模糊問題當做「image-to-image translation」的一個特例。使用的網路是 image-to-image translation 論文中使用的cGAN(pix2pix)。
Proposed method:DeblurGAN的實現
給出一張模糊的圖像 ,我們希望重建出清晰的圖像 。為此,作者構建了一個生成式對抗網路,訓練了一個CNN作為生成器 和一個判別網路 。
網路結構
整體結構如下圖:
生成器CNN的結構如下圖:
網路結構類似Johnson在風格遷移任務中提出的網路。作者添加了「ResOut」,即「global skip connection」。CNN學習的是殘差,即 ,這種方式使得訓練更快、模型泛化能力更強。
判別器的網路結構與PatchGAN相同(即 image-to-image translation 論文中採用的判別網路)。
損失函數
損失函數使用的是「content loss」和「adversarial loss」之和:
在文章實驗中, 。
Adversarial loss
訓練原始的GAN(vanilla GAN)很容易遇到梯度消失、mode collapse等問題,訓練起來十分棘手。後來提出的「Wassertein GAN」(WGAN)使用「Wassertein-1」距離,使訓練不那麼困難。之後Gulrajani等提出的添加「gradient penalty」項,又進一步提高了訓練的穩定性。WGAN-GP實現了在多種GAN結構上穩定訓練,且幾乎不需要調整超參數。本文使用的就是WGAN-GP,adversarial loss的計算式為:
Content loss
內容損失,也就是評估生成的清晰圖像和ground truth之間的差距。兩個常用的選擇是L1(也稱為MAE,mean absolute error)損失,和L2(也稱為MSE)損失。最近提出了「perceptual loss」,它本質上就是一個L2 loss,但它計算的是CNN生成的feature map和ground truth的feature map之間的距離。定義如下:
其中, 表示將圖像輸入VGG19(在ImageNet上預訓練的)後在第i個max pooling層前,第j個卷積層(after activation)輸出的feature map。 表示feature map的維度。
Motion blur generation
相比其他的image-to-image translation任務,例如超解析度和風格化,去模糊問題很難獲得清晰-模糊的圖像對用於訓練。一種常見的辦法是使用高速攝像頭拍攝視頻,從視頻幀中獲得清晰圖像、合成模糊圖像(詳見我的另一篇文章:論文筆記:《Deep Multi-scale Convolutional Neural Network for Dynamic Scene Deblurring》)。另一種方法就是用清晰圖像卷積上各式各樣的「blur kernel」,獲得合成的模糊圖像。作者在現有第二種方法的基礎上進一步拓展,提出的方法能夠模擬更複雜的「blur kernel」。
首先,作者採用了Boracchi和Foi[1]提出的運動軌跡隨機生成方法(用馬爾科夫隨機過程生成);然後對軌跡進行「sub-pixel interpolation」生成blur kernel。當然,這種方法也只能在二維平面空間中生成軌跡,並不能模擬真實空間中6D相機的運動。(具體細節arXiv上ver.2還沒有提及,有待作者的更新)
Training Details
DeblurGAN的代碼在很大程度上借鑒了pix2pix的代碼,使用的框架是pyTorch。作者一共在不同數據集上訓練了三個model,分別是:
- :訓練數據是GOPRO數據集,將其中的圖像隨機裁剪成256×256的patches輸入網路訓練
- :訓練數據集是MS COCO生成的模糊圖像(根據上面提到的方法),同樣隨機裁剪成256×256的patches
- :在以上兩個數據集的混合數據集上訓練,合成圖像:GOPRO=2:1
所有模型訓練時的batch size都為1。作者在單張Titan-X GPU上訓練,每個模型需要6天的訓練時間。
實驗結果對比
GoPro數據集
上圖是DeblurGAN和Nah等人提出的 Deep Multi-scale Convolutional Neural Network for Dynamic Scene Deblurring 方法的結果對比。左側一列是輸入的模糊圖像,中間是Nah等人的結果,右側是DeblurGAN的結果。PSNR、SSIM兩項指標的評估結果可以參見下表。
Kohler標準數據集
參考文獻
[1]G. Boracchi and A. Foi. Modeling the performance of image restoration from motion blur. Image Processing, IEEE Transactions on, 21(8):3502 –3517, aug. 2012.
推薦閱讀:
TAG:生成對抗網路GAN | 計算機視覺 | 深度學習DeepLearning |