本文轉載自量子位(ID:QbitAI),編譯:安妮,極客公園已獲轉載授權,轉載請聯繫出處
十圖九糊。
置身異國街道,感受著陌生環境裡熙熙攘攘的街道,你掏出手機想留住這一刻。
好嘞,一、二、三,咔嚓。
由於行人和車輛都在運動,再加上你的手稍微抖了一抖,照片中的景象是這樣的——
這樣的——
和 這樣的——
這是什麼 AV 畫質啊!
拍照時手抖,或者畫面中的物體運動都會讓畫面模糊,女友辛辛苦苦擺好的各種 Pose 也將淹沒在各種模糊的線條中,是時候要有一種新的算法解救水深火熱中的你了。
近日,烏克蘭天主教大學、布拉格捷克理工大學和解決方案提供商 Eleks 聯手公布了一篇論文,文章標題為《DeblurGAN: Blind Motion Deblurring Using Conditional Adversarial Networks》。
這篇文章中,研究人員提出一種基於條件對抗式生成網絡和內容損失(content loss)的端對端學習法 DeblurGAN,去除圖像上因為物體運動而產生的模糊。
效果嘛,可以說好到讓你不太相信自己的眼睛。
比如我們剛剛在異國街頭拍糊了的那張,處理後變成了這樣——
爐火純青。
還不來學習一下去糊大法的手藝?
回歸我們的終極議題:在沒有提供任何關於核(kernel)或相機的運動信息的情況下,怎樣去除單張照片中的運動模糊 (Motion Blur) 呢?
這不禁讓人聯想起生成對抗網絡(GAN),因為它能夠保存高紋理細節,創建的圖案又接近真實圖像,所以是圖像超解析度和圖像修復中的主力軍。
能否將這種方法應用到消除運動模糊的工藝中呢?
可以。模糊處理可以看作是圖像轉化中的一個特例,研究人員提出基於條件生成式對抗網絡和多元內容損失的 DeblurGAN 法。
這是種什麼方法?我們繼續往下看。
因為目標是把模糊圖像 IB在沒有提供模糊核的情況下恢復成清晰圖像 IS,因此,我們需要訓練一個 CNN GθG作為生成器。每張 IB都對應著一張估計出的清晰圖像 IS。此外,在訓練階段,我們將引入 critic 函數 DθD,以對抗的方式訓練兩個網絡。
DeblurGAN 生成網絡架構
從上圖的架構中可以看出,DeblurGAN 包含兩個 1/2 間隔的卷積單元、9 個剩餘 residual 單元和兩個反卷積單元。每個 ResBlock 由一個卷積層、實例歸一化層和 ReLU 激活組成。
去除運動模糊的整個流程,如下圖所示:
想去糊,先得知道怎樣將清晰圖像轉換成運動模糊圖像,這個準備階段也學問多多。
與超解析度和黑白照片上色等流行的圖像到圖像(image-to-image)的轉換問題相比,用於訓練算法的清晰和模糊的圖像對(image pairs)難以獲取,一種典型的獲取方法是用高幀頻相機捕捉視頻中清晰的幀模擬模糊圖像。
用這種方法創建真實圖片的模糊圖像,會將圖像空間(image space)局限在拍攝的視頻中出現的場景,並將數據集變得更複雜。
根據前人的實驗,研究人員提出的方法更真實地模擬了複雜的模糊核(blur kernel)。這種方法遵循了 Boracchi 和 Foi 2012 年在論文 Modeling the performance of image restoration from motion blur 中所描述的隨機軌跡生成的概念,對軌跡矢量應用亞像素插值法生成核。每個軌跡矢量都是一個複雜矢量,對應著一個連續域中的二維隨機運動物體的離散位置。
生成的相機運動軌跡和模糊內核以及相應的模糊圖像示例
軌跡生成由馬爾可夫過程完成、由算法總結。根據前一個點速度和位置、高斯攝動方程和脈衝攝動,隨機生成下一個點的位置。
基本思路和運動模糊生成後,可以開始著手訓練模型了。
研究人員用 PyTorch 中實現了自己的所有模型,整個訓練過程是在一個 Titan-X GPU 上執行三種不同的數據集。
第一個模型 DeblurGANWILD是在隨機裁剪的 256x256 像素的 GoPro 數據集上訓練的;第二個模型 DeblurGANSynth在用上文所介紹方法模糊過的 MS COCO 數據集上訓練;此外,還有一個特殊的模型 DeblurGANComb,所用的訓練集中有 2/3 是合成圖像,1/3 是高幀率相機拍攝的圖像。
由於它們均為全卷積模型,又是在圖像 patch 上訓練的,因此可以應用在任意大小的圖像中。
為了進行優化,研究人員在 DθD上執行了 5 次梯度下降,在 GθG上執行了 1 次。最初生成器和判別器設置的學習速率為 10-4,經過 150 次迭代後,在接下來的有一輪 150 次迭代中將這個比率線性衰減。
6 天后,研究人員訓練出一個 DeblurGAN 網絡,最激動人心的部分終於來了。
GoPro 數據集包含了 2103 對從不同的場景拍攝的 720p 的模糊-清晰的圖像對。研究人員將模型的結果與標準指標的模型狀態進行比較,並在單個 GPU 上顯示每個算法的運行時間,結果如下:
GoPro 數據集測試圖像的平均峰值信噪比和結構相似度
測試結果表明,DeblurGAN 在定性和定量兩方面都表現出優異的結果。它可以處理由相機抖動和物體運動引起的模糊,不會受到通常的核評估方法的影響,同時參數僅為 Multi-scale CNN 的六分之一,大大加快了推理速度。
不信?那來看看 GoPro 數據集測試的去模糊圖像——
GoPro 測試數據集的評估結果/從左到右:模糊圖像、Nah 算法處理結果和我們算法的處理結果
Kohler 數據集由 4 張圖像組成,每張用 12 個不同的核模糊圖像。這是一個標準的基準數據集,用於評價去模糊算法。數據集通過記錄和分析真實的相機運動產生,並在機器人載體上回放,這樣在 6D 相機運動軌跡上會留下一系列清晰的圖像。
在 Kohler 基準數據集上進行的平均峰值信噪比和結構相似度測度結果
這項研究中還有一個小彩蛋。
研究人員探索了動態模糊對目標檢測的影響,基於在預訓練的 YOLO 網絡上目標檢測的結果,提出一種評估質量的去模糊算法的新方式。
通過用高幀率攝像機模擬相機抖動,研究人員構建了一個清晰-模糊的街景數據集。之後,對 240fps(每秒顯示幀數-幀率)相機拍攝的 5 到 25 幀進行隨機抽樣,並計算中間幀的模糊版作為這些幀的平均值。
總體來說,數據集包括 410 對模糊-清晰圖像,這些圖像是從不同街道和停車場拍攝的,包含不同數量和類型的汽車。
在模糊化前後的目標檢測
在 recall 和 F1 socre 上,DeblurGAN 的表現遠遠超過了競爭對手。
你也想告別 AV 畫質?
別著急,論文地址在這:
https://arxiv.org/abs/1711.07064
相關代碼(PyTorch):
https://github.com/KupynOrest/DeblurGAN