用于動態場景去模糊的深度多尺度卷積神經網絡
摘要
針對一般動態場景的非均勻盲去模糊是一個具有挑戰性的計算機視覺問題,因為模糊不僅來源于多個物體運動,還來源于相機抖動和場景深度變化。為了去除這些復雜的運動模糊,傳統的基于能量優化的方法依賴于簡單的假設,例如模糊核是部分均勻或局部線性的。此外,最近的基于機器學習的方法也依賴于在這些假設下生成的合成模糊數據集。這使得傳統的去模糊方法在模糊核難以近似或參數化的情況下(例如物體運動邊界)無法有效去除模糊。在這項工作中,我們提出了一種多尺度卷積神經網絡,以端到端的方式恢復由各種原因引起的模糊圖像。同時,我們提出了模仿傳統由粗到精方法的多尺度損失函數。此外,我們提出了一個新的大規模數據集,該數據集提供了由高速相機拍攝獲得的真實模糊圖像及其對應的清晰地面實況圖像對。通過使用在該數據集上訓練的模型,我們通過實證證明,我們的方法在動態場景去模糊方面不僅在質量上,而且在數量上都達到了最先進的性能。
1. 引言
運動模糊是拍照時最常見的一種偽影類型。相機抖動和快速物體運動會降低圖像質量,產生不期望的模糊圖像。此外,深度變化、運動邊界處的遮擋等各種原因使得模糊更加復雜。單幅圖像去模糊問題是在給定一幅模糊圖像的情況下估計未知的清晰圖像。早期的研究集中于去除由簡單的平移或旋轉相機運動引起的模糊。最近的工作嘗試處理動態環境中由深度變化、相機抖動和物體運動引起的一般非均勻模糊。這些方法大多基于以下模糊模型 [28, 10, 13, 11]。
B=KS+n, \mathbf{B} = \mathbf{KS} + \mathbf{n}, B=KS+n,
其中 B\mathbf{B}B、S\mathbf{S}S 和 n\mathbf{n}n 分別是向量化的模糊圖像、潛在清晰圖像和噪聲。K\mathbf{K}K 是一個大型稀疏矩陣,其每一行包含一個作用于 S\mathbf{S}S 以生成模糊像素的局部模糊核。在實踐中,模糊核是未知的。因此,盲去模糊方法試圖同時估計潛在清晰圖像 S\mathbf{S}S 和模糊核 K\mathbf{K}K。
為每個像素尋找模糊核是一個嚴重不適定問題。因此,一些方法嘗試基于對模糊來源的簡單假設對模糊模型進行參數化。在 [28, 10] 中,他們假設模糊僅由 3D 相機運動引起。然而,在動態場景中,由于存在多個運動物體以及相機運動,核估計更具挑戰性。因此,Kim 等人 [14] 提出了一種動態場景去模糊方法,聯合分割和去模糊非均勻模糊圖像,允許在分割區域內估計復雜(非線性)的核。此外,Kim 和 Lee [15] 將模糊核近似為局部線性,并提出了一種聯合估計潛在圖像和局部線性運動的方法。然而,這些模糊核近似仍然不準確,特別是在運動突變和遮擋的情況下。值得注意的是,這種錯誤的核估計會直接影響潛在圖像的質量,導致不期望的振鈴偽影。
最近,卷積神經網絡 (CNNs) 已被應用于包括去模糊問題在內的眾多計算機視覺問題中,并顯示出有希望的結果 [29, 25, 26, 1]。由于沒有可用于監督學習的真實模糊圖像和地面實況清晰圖像對,它們通常使用通過卷積合成模糊核生成的模糊圖像。在 [29, 25, 1] 中,使用具有均勻模糊核的合成模糊圖像進行訓練。而在 [26] 中,訓練分類 CNN 來估計局部線性模糊核。因此,基于 CNN 的模型仍然只適用于某些特定類型的模糊,對于更常見的空間變化模糊存在限制。
因此,所有現有方法在能夠推廣并實際使用之前仍存在許多問題。這主要是由于使用了簡單且不真實的模糊核模型。因此,為了解決這些問題,在這項工作中,我們提出了一種新穎的端到端深度學習方法用于動態場景去模糊。
首先,我們提出了一種多尺度 CNN,它直接恢復潛在圖像,而不假設任何受限的模糊核模型。特別是,多尺度架構被設計用來模仿傳統的由粗到精優化方法。與其他方法不同,我們的方法不估計顯式的模糊核。因此,我們的方法避免了由核估計誤差引起的偽影。其次,我們使用適合由粗到精架構的多尺度損失來訓練所提出的模型,這極大地提高了收斂性。此外,我們通過采用對抗損失 [9] 進一步改善了結果。第三,我們提出了一個新的包含地面實況清晰圖像的真實模糊圖像數據集。為了獲得用于訓練的無核模型數據集,我們采用了 [17] 中介紹的數據集采集方法。由于模糊過程可以通過快門時間內清晰圖像的積分來建模 [17, 21, 16],我們使用高速相機捕捉動態場景的一系列清晰幀,并通過考慮伽馬校正將它們平均以生成模糊圖像。
通過在所提出的數據集上進行訓練并添加適當的增強,我們的模型可以隱式地處理一般的局部模糊核。由于損失項優化結果使其接近地面實況,它甚至能恢復模糊核極其復雜的被遮擋區域,如圖 1 所示。我們使用數百萬對圖像塊訓練了我們的模型,并在動態場景去模糊方面取得了顯著改進。大量的實驗結果表明,所提出方法的性能在定性和定量評估上都遠遠優于最先進的動態場景去模糊方法。
相關工作
有幾種方法采用 CNN 進行去模糊 [29, 26, 25, 1]。Xu 等人 [29] 提出了一種圖像反卷積 CNN,用于在非盲設置下去模糊圖像。他們基于可分離核特性構建了一個網絡,即(逆)模糊核可以分解為少量重要濾波器。此外,他們通過將去噪網絡 [7] 模塊連接到他們提出的網絡末端,以融合該模塊來減少噪聲和顏色飽和度等視覺偽影。另一方面,Schuler 等人 [25] 提出了一種基于 CNN 的盲去模糊方法。他們提出的網絡模仿了傳統的基于優化的去模糊方法,并以由粗到精的方式迭代特征提取、核估計和潛在圖像估計步驟。為了獲得用于網絡訓練的清晰和模糊圖像對,他們使用高斯過程生成均勻模糊核,并將它們卷積到從 ImageNet 數據集 [3] 收集的清晰圖像上,合成了大量模糊圖像。然而,他們報告稱由于其次優架構,對于大模糊存在性能限制。
與 Couzinie-Devy 等人 [2] 的工作類似,Sun 等人 [26] 提出了一種序列去模糊方法。首先,他們使用 73 個候選模糊核生成模糊和清晰圖像塊對。接下來,他們訓練分類 CNN 來測量局部圖像塊特定模糊核的可能性。然后,通過優化一個由 CNN 似然和平滑先驗組成的能量模型,獲得平滑變化的模糊核。最終的潛在圖像估計使用傳統的優化方法 [30] 執行。
圖 1: (a) 輸入模糊圖像。(b) Sun 等人 [26] 的結果。? 我們的去模糊結果。我們的結果顯示出清晰且無偽影的物體邊界。
請注意,所有這些方法都需要一個精確的核估計步驟來恢復潛在清晰圖像。相比之下,我們提出的模型被訓練為直接生成潛在圖像,而無需估計模糊核。
在其他計算機視覺任務中,多種形式的由粗到精架構或多尺度架構已被應用 [8, 6, 4, 23, 5]。然而,并非所有多尺度 CNN 都被設計為能產生最優結果,類似于 [25]。在深度估計、光流估計等任務中,網絡通常產生分辨率小于輸入圖像分辨率的輸出 [8, 6, 5]。這些方法即使使用多尺度架構,也難以處理長距離依賴性。
因此,我們構建了一個多尺度架構,既能保留細粒度的細節信息,也能保留來自更粗尺度的長距離依賴性。此外,我們通過使用多尺度損失訓練網絡,確保中間層網絡以顯式方式幫助最終階段。
動態場景去模糊的無核學習
傳統上,在估計潛在圖像之前找到模糊核是至關重要的。基于 CNN 的方法也不例外 [25, 26]。然而,估計核涉及幾個問題。首先,假設簡單的核卷積無法建模幾個具有挑戰性的情況,如遮擋區域或深度變化。其次,除非模糊模型經過精心設計,否則核估計過程微妙且對噪聲和飽和度敏感。此外,錯誤估計的核會導致潛在圖像中出現偽影。第三,在動態場景中為每個像素尋找空間變化的核需要大量的內存和計算。
因此,我們在模糊數據集生成和潛在圖像估計中都采用無核方法。在模糊圖像生成中,我們遵循近似相機成像過程的思路,而不是假設特定的運動或尋找或設計復雜的模糊核。我們捕捉連續的清晰幀并進行積分來模擬模糊過程。詳細過程在第 2 節描述。請注意,我們的數據集僅由模糊和清晰圖像對組成,局部核信息隱式嵌入其中。在圖 2 中,我們將我們的無核模糊圖像與使用均勻模糊核合成的傳統圖像進行了比較。值得注意的是,我們的方法生成的模糊圖像展示了由運動的人和靜態背景引起的真實且空間變化的模糊,而傳統方法合成的模糊圖像則沒有。對于潛在圖像估計,我們不假設模糊來源,僅在我們的模糊和清晰圖像對上訓練模型。因此,我們提出的方法在去模糊中不會受到與核相關問題的困擾。
2 模糊數據集
我們沒有選擇對清晰圖像進行卷積的核進行建模,而是選擇記錄隨時間積分以生成模糊圖像的清晰信息。當相機傳感器在曝光期間接收光線時,每一時刻的清晰圖像刺激會被累積,生成模糊圖像 [13]。然后,積分信號通過非線性 CRF(相機響應函數)轉換為像素值。因此,該過程可以通過累積來自高速視頻幀的信號來近似。
模糊累積過程可以建模如下:
B=g(1T∫t=0TS(t)dt)?g(1M∑i=0M?1S[i]),(2)B=g\left(\frac{1}{T}\int_{t=0}^{T}S(t)dt\right)\simeq g\left(\frac{1}{M}\sum_{i =0}^{M-1}S[i]\right),(2)B=g(T1?∫t=0T?S(t)dt)?g(M1?i=0∑M?1?S[i]),(2)
其中 TTT 和 S(t)S(t)S(t) 分別表示曝光時間和時刻 ttt 清晰圖像的傳感器信號。類似地,MMM 和 S[i]S[i]S[i] 分別表示曝光時間內采樣的幀數和第 iii 幀清晰幀信號。ggg 是將清晰潛在信號 S(t)S(t)S(t) 映射到觀測圖像 S^(t)\hat{S}(t)S^(t) 的 CRF,即 S^(t)=g(S(t))\hat{S}(t)=g(S(t))S^(t)=g(S(t)),或 S^[i]=g(S[i])\hat{S}[i]=g(S[i])S^[i]=g(S[i])。在實踐中,我們只有觀測到的視頻幀,而原始信號和 CRF 是未知的。
已知當涉及非線性 CRF 時,非均勻去模糊會變得非常困難,必須考慮非線性性。然而,目前,沒有可用的 CRF 估計技術適用于具有空間變化模糊的圖像 [27]。當未給出地面實況 CRF 時,一個常見的實用方法是使用 γ=2.2\gamma=2.2γ=2.2 的伽馬曲線近似 CRF,如下所示,因為它被認為是已知 CRF 的近似平均值 [27]。
g(x)=x1/γ,(3)g(x)=x^{1/\gamma},(3)g(x)=x1/γ,(3)
因此,通過校正伽馬函數,我們從觀測圖像 S^[i]\hat{S}[i]S^[i] 獲得潛在幀信號 S[i]=g?1(S^[i])S[i] = g^{-1}(\hat{S}[i])S[i]=g?1(S^[i]),然后使用公式 (2) 合成相應的模糊圖像 BBB。
我們使用 GOPRO4 Hero Black 相機生成我們的數據集。我們用 GOPRO 相機拍攝 240 fps 的視頻,然后平均不同數量(7 - 13)的連續潛在幀以產生不同強度的模糊。例如,平均 15 幀模擬了以 1/16 快門速度拍攝的照片,而相應的清晰圖像快門速度為 1/240。值得注意的是,每個模糊圖像對應的清晰潛在圖像被定義為用于生成模糊圖像的清晰幀序列中的中間幀。最終,我們的數據集由 3214 對分辨率為 1280x720 的模糊和清晰圖像組成。所提出的 GOPRO 數據集可在我們的網站https://github.com/SeungjunNah/DeepDeblur_release上公開獲取。
3 提出的方法
在我們的模型中,更精細尺度的圖像去模糊得到了更粗尺度特征的輔助。為了在保留精細尺度信息的同時利用粗粒度和中粒度信息,我們網絡的輸入和輸出采用高斯金字塔的形式。請注意,大多數其他由粗到精網絡以單幅圖像作為輸入和輸出。
模型架構
除了多尺度架構,我們還采用了稍加修改的殘差網絡結構 [12] 作為我們模型的構建塊。與普通 CNN 相比,使用殘差網絡結構可以實現更深的架構。此外,由于模糊和清晰圖像對在數值上相似,讓參數僅學習差異是高效的。我們發現移除原始殘差構建塊中快捷連接(shortcut connection)之后的整流線性單元(ReLU)可以提高訓練時的收斂速度。我們將修改后的構建塊稱為 ResBlock。原始的和我們修改后的構建塊在圖 3 中進行了比較。
通過堆疊足夠多的帶有 ResBlocks 的卷積層,每個尺度的感受野被擴大。細節將在以下段落中描述。為了一致性,我們按分辨率遞減的順序定義尺度級別(即級別 111 為最精細尺度)。除非另有說明,我們總共使用 K=3K=3K=3 個尺度。在訓練時,我們將輸入和輸出高斯金字塔圖像塊的分辨率設置為 {256×256,128×128,64×64}\{256\times 256,128\times 128,64\times 64\}{256×256,128×128,64×64}。連續尺度之間的比例是 0.50.50.5。對于所有卷積層,我們將濾波器大小設置為 5×55\times 55×5。由于我們的模型是全卷積的,在測試時,圖像塊大小可以根據 GPU 內存允許而變化。整體架構如圖 4 所示。
圖 2: (a) 地面實況清晰圖像。(b) 通過卷積均勻模糊核生成的模糊圖像。? 通過平均清晰幀生成的模糊圖像。在這種情況下,模糊主要由人物運動引起,背景保持原樣。模糊核是非均勻的、形狀復雜的。然而,當通過卷積均勻核合成模糊圖像時,背景也會變得模糊,就好像模糊是由相機抖動引起的一樣。為了對動態場景模糊進行建模,需要我們的無核方法。
圖 3: (a) 原始殘差網絡構建塊。(b) 我們網絡的修改構建塊。我們沒有使用批量歸一化層,因為我們用大小為 2 的小批量訓練模型,這比通常的批量歸一化所需批量小。我們憑經驗發現,在塊輸出之前移除整流線性單元在性能方面是有益的。
最粗尺度網絡
網絡的最前端是最粗尺度網絡。第一層卷積層將 1/4 分辨率、64×6464\times 6464×64 大小的圖像轉換為 64 個特征圖。然后,堆疊 19 個 ResBlocks,后面是最后一層卷積層,該層將特征圖轉換為輸入維度。每個卷積層通過零填充保持分辨率。總共有 40 層卷積層。每個尺度級別的卷積層數量被確定,以使整個模型總共有 120 層卷積層。因此,最粗尺度網絡的感受野足夠大以覆蓋整個圖像塊。在該階段結束時,生成最粗尺度的潛在清晰圖像。此外,來自最粗尺度輸出的信息被傳遞到下一個更精細尺度的網絡階段。為了將最粗尺度的輸出轉換為適應下一個更精細尺度的輸入大小,輸出圖像塊通過一個反卷積 [22] 層(其他多尺度方法使用重塑 [8] 或上采樣 [4, 6, 23])。由于清晰和模糊圖像塊共享低頻信息,通過反卷積學習合適的特征有助于消除冗余。在我們的實驗中,使用反卷積比上采樣表現出更好的性能。然后,反卷積特征與更精細尺度的模糊圖像塊連接起來作為輸入。
更精細尺度網絡
更精細尺度的網絡基本上具有與最粗尺度網絡相同的結構。但是,第一層卷積層不僅接收其自身的模糊輸入圖像,還接收來自前一階段的清晰特征,以連接的形式輸入。每個卷積濾波器大小為 5×55\times 55×5,特征圖數量與最粗尺度相同。除了最后一個最精細尺度外,在進入下一階段之前都有一個反卷積層。在最精細尺度上,恢復原始分辨率的清晰圖像。
訓練
我們的模型在所提出的 GOPRO 數據集上進行訓練。在 3214 對圖像中,2103 對用于訓練,其余用于測試。為了防止網絡過擬合,采用了多種數據增強技術。在幾何變換方面,圖像塊被隨機水平翻轉、垂直翻轉以及旋轉 90 度。在顏色方面,RGB 通道被隨機排列。考慮到圖像退化,HSV 顏色空間中的飽和度乘以 [0.5, 1.5] 范圍內的隨機數。此外,向模糊圖像添加高斯隨機噪聲。為了使我們的網絡對不同強度的噪聲具有魯棒性,噪聲的標準差也從高斯分布 N(0,(2/255)2)N(0,(2/255)^{2})N(0,(2/255)2) 中隨機采樣。然后,將超出 [0, 1] 范圍的值進行裁剪(clip)。最后,減去 0.5 以使輸入和輸出值范圍以零為中心,范圍變為 [-0.5, 0.5]。
圖 4: 多尺度網絡架構。BkB_{k}Bk?、LkL_{k}Lk?、SkS_{k}Sk? 分別表示模糊圖像、潛在圖像和地面實況清晰圖像。下標 kkk 表示高斯金字塔中的第 kkk 級尺度,其下采樣到 1/2k1/2^{k}1/2k 比例。我們的模型以模糊圖像金字塔作為輸入,輸出估計的潛在圖像金字塔。每個中間尺度的輸出都被訓練為清晰的。在測試時,選擇原始尺度的圖像作為最終結果。
在優化網絡參數時,我們結合兩種損失來訓練模型:多尺度內容損失和對抗損失。
多尺度內容損失
基本上,由粗到精方法期望每個中間輸出都成為相應尺度的清晰圖像。因此,我們訓練網絡,使中間輸出形成清晰圖像的高斯金字塔。均方誤差(MSE)準則應用于金字塔的每一層。因此,損失函數定義如下:
Lcont=12K∑k=1K1ckwkhk∥Lk?Sk∥2,(4)\mathcal{L}_{cont}=\frac{1}{2K}\sum_{k=1}^{K}\frac{1}{c_{k}w_{k}h_{k}}\|L_{k}-S_{ k}\|^{2},(4)Lcont?=2K1?k=1∑K?ck?wk?hk?1?∥Lk??Sk?∥2,(4)
其中 Lk,SkL_{k},S_{k}Lk?,Sk? 分別表示尺度級別 kkk 的模型輸出和地面實況圖像。每個尺度的損失通過通道數 ckc_{k}ck?、寬度 wkw_{k}wk? 和高度 hkh_{k}hk?(即元素總數)進行歸一化。
對抗損失
最近,對抗網絡被報道能夠生成清晰逼真的圖像 [9, 4, 24]。遵循 [24] 中介紹的架構,我們構建了如表 1 所示的判別器。判別器以最精細尺度的輸出或地面實況清晰圖像作為輸入,并分類它是去模糊后的圖像還是清晰圖像。
對抗損失定義如下:
Ladv=ES~psharp(S)[log?D(S)]+EB~pbinary(B)[log?(1?D(G(B)))],(5)\begin{split}\mathcal{L}_{adv}&=\underset{S\sim p _{sharp}(S)}{\mathbb{E}}[\log D(S)]+\\ &\underset{B\sim p_{binary}(B)}{\mathbb{E}}[\log(1-D(G(B)))], \end{split}(5)Ladv??=S~psharp?(S)E?[logD(S)]+B~pbinary?(B)E?[log(1?D(G(B)))],?(5)
其中 GGG 和 DDD 分別表示生成器(即圖 4 中的我們的多尺度去模糊網絡)和判別器(分類器)。在訓練時,GGG 試圖最小化對抗損失,而 DDD 試圖最大化它。
最后,通過結合多尺度內容損失和對抗損失,生成器網絡和判別器網絡被聯合訓練。因此,我們的最終損失項是:
Ltotal=Lcont+λ×Ladv,(6)\mathcal{L}_{total}=\mathcal{L}_{cont}+\lambda\times\mathcal{L}_{adv},(6)Ltotal?=Lcont?+λ×Ladv?,(6)
其中權重常數 λ=1×10?4\lambda=1\times 10^{-4}λ=1×10?4。
我們使用 ADAM [18] 優化器進行訓練,小批量大小為 2。學習率從 5×10?55\times 10^{-5}5×10?5 開始自適應調整。在 3×1053\times 10^{5}3×105 次迭代后,學習率降低到先前學習率的 1/10。整個訓練需要 9×1059\times 10^{5}9×105 次迭代才能收斂。
4 實驗結果
我們使用 torch7 庫實現了我們的模型。所有后續實驗均在配備 i7-6700K CPU 和 NVIDIA GTX Titan X (Maxwell) GPU 的臺式機上進行。
GOPRO 數據集
我們在提出的 GOPRO 數據集上評估模型的性能。我們的測試數據集包含 1111 對圖像,約占總數據集的 1/31/31/3。我們在定性和定量兩方面將結果與最先進的方法 [15, 26] 進行比較。我們的結果在圖像質量方面顯示出顯著改進。一些去模糊結果如圖 5 所示。我們從 Sun 等人 [26] 的結果中注意到,在模糊呈非線性形狀或位于運動邊界的區域,去模糊并不成功。Kim 和 Lee [15] 的結果在未找到強邊緣的情況下也失敗了。相比之下,我們的結果避免了那些與核估計相關的問題。表 2 顯示了競爭方法以及我們不同尺度級別 kkk 的模型在測試數據上的 PSNR、SSIM 定量評估結果。同時比較了運行時間。我們觀察到,在 PSNR 和 SSIM 方面,K=2K=2K=2 的系統產生最佳結果,而 K=3K=3K=3 的系統速度最快。
K?hler 數據集
K?hler 數據集 [19] 包含 4 幅清晰圖像,每幅圖像對應 12 幅不同模糊程度的圖像。這些模糊是通過回放記錄的 6D 相機運動產生的,假設線性 CRF。我們報告了在此數據集上的定量結果,見表 3。我們的模型通過在公式 (2) 中將 ggg 設置為恒等函數進行訓練。我們注意到,K=2K=2K=2 的系統在 PSNR 方面產生最佳結果,而 K=3K=3K=3 的系統展現出最佳的 MSSIM 結果。
表 1: 判別器的模型參數。每個卷積層后接 LeakyReLU 激活層。
圖 5. GOPRO 數據集上的測試結果。從上到下:模糊圖像,Sun 等人 [26] 的結果,Kim 和 Lee [15] 的結果,以及我們提出的方法的結果。
3889
Lai 等人的數據集
Lai 等人 [20] 通過卷積非均勻模糊核并施加幾種常見退化來生成合成數據集。他們也記錄了 6D 相機軌跡來生成模糊核。然而,他們的模糊圖像和清晰圖像與我們的數據集在對齊方式上不同,這使得簡單的圖像質量度量(如 PSNR 和 SSIM)與感知質量的相關性降低。因此,我們在圖 6 中展示定性比較。顯然,我們的結果避免了振鈴偽影,同時保留了波浪漣漪等細節。
5 結論
在本文中,我們提出了一種用于估計清晰圖像的盲去模糊神經網絡。與以往研究不同,我們的模型避免了與核估計相關的問題。所提出的模型遵循由粗到精的方法,并在多尺度空間中進行訓練。我們還構建了一個真實的地面實況模糊數據集,實現了高效的監督學習和嚴格的評估。實驗結果表明,我們的方法在定性和定量上都優于最先進的方法,同時速度快得多。
表 3: K?hler 數據集上的定量比較。該數據集有其自己的評估代碼,因此我們報告多尺度 SSIM (MSSIM) 而不是 SSIM。
圖 6: 在數據集 [20] 上的去模糊結果。頂行顯示 Sun 等人 [26] 的結果,底行顯示我們的結果。
表 2: GOPRO 數據集上的定量去模糊性能比較。KKK 表示尺度級別。