魏海云,鄭茜穎,俞金玲
(福州大學物理與信息工程學院,福州 350108)
使用相機或手機拍攝照片時,由于技術限制,得到的不會是單一時間的即時圖像,表現出來的應該是一段時間內的場景,所以在相機曝光的這段時間里,如果該場景中的人或物體產生了移動或者相機發(fā)生了抖動或者景深產生了變化等,都會導致之前采集到的像素點發(fā)生變化,也就是說在得到的圖片中,任何沿著相機相對方向運動的物體將會看起來模糊或被晃動,這就是運動模糊,也稱為動態(tài)模糊。這種情況在生活中經常會碰到,例如跟拍奔跑中的運動員、在高速運行的動車上拍攝窗外景物等都很可能獲得運動模糊的圖像,因此,模糊圖像的復原被廣泛用于生產生活、工業(yè)制造、天文觀測、醫(yī)學影像等領域,對運動模糊圖像復原的研究具有重要價值。
模糊圖像復原根據模糊核是否已知分為盲去模糊和非盲去模糊。非盲去模糊的早期復原方法[1-8]通過應用各種約束條件,引入圖像先驗知識來表征圖像模糊,但是實際中非均勻運動模糊情況大都是無法預估的,因此這些方法在實際應用中的效果并不好。
由于深度學習能夠提取圖像特征,被廣泛應用到計算機視覺領域,并取得很好的結果。Sun 等[9]利用卷積神經網絡(Convolutional Neural Network,CNN)估計模糊核;Schuler等[10]以由粗到細的方式堆疊多個CNN 以模擬迭代優(yōu)化來預測頻域中的反卷積核。這類方法雖然在實驗中得到恢復的清晰圖像,但是因為簡化了實際情況中復雜的模糊情況,且沒有真實的模糊-清晰圖像對用于監(jiān)督學習,因此實際應用效果并不好。通常使用自定義的、由清晰圖像卷積模糊核而生成的圖像來進行訓練,導致得到的模型僅能處理空間均勻或幾種特定類型的模糊,限制了模型處理真實模糊圖像的能力。
Nah 等[11]提出一種多尺度卷積網絡方法用于動態(tài)場景去模糊;Kupyn 等[12]使用基于生成對抗網 絡(Generative Adversarial Network,GAN)和內容損失的方法復原運動模糊圖像,可以有效去除單幅圖像運動模糊。除此之外,很多改進的網絡[13-16]不需要估計模糊核,采用端到端的結構,直接得到清晰圖像,從而簡化了模糊復原任務的工作。雖然這些方法都能在一定程度上對非均勻運動模糊圖像進行復原,但是這些方法的網絡結構比較復雜、參數量多,因此計算量較大、網絡訓練耗時長,且實際情況下的復原圖像在細節(jié)方面并不理想。
為了解決這些問題,本文提出一種基于殘差注意力模塊[17]和卷積門控循環(huán)模塊(Convolution Gated Recurrent Unit,ConvGRU)的多尺度網絡模糊圖像復原算法。本文主要工作如下:
1)使用融合了注意力機制的殘差塊作為基本單元,編碼端使用引入了注意力機制的殘差塊,放大了卷積神經網絡結構的優(yōu)點,提高了網絡收斂速度,產生了很大的感受野。
2)在編碼解碼中間加入ConvGRU 模塊,通過對編碼部分提取的特征圖進行處理,獲取圖像空間信息,把有用的隱藏歷史信息給提取出來,從而利用圖像空間的連續(xù)性來進行模糊圖像復原。
3)感知損失[18]和L2 范數損失組成的混合損失函數訓練的網絡讓輸出更接近真實結果,可以進一步提升網絡性能。
本文采用的是由粗到細多尺度網絡來對非均勻運動模糊圖像進行復原,網絡一共包括3 個尺度,除了輸入圖片的尺寸大小不同外,每個尺度的網絡結構都一樣,如圖1 所示,在每一個尺度上都使用了相同的非對稱編解碼網絡,從第一級輸入開始,編碼端有4 個卷積模塊,每個模塊中包含了3 個步長為2、卷積核為5 的卷積層。解碼端將得到的輸出再進行上采樣作為下一級網絡的輸入。因為多尺度網絡結構大,會增加訓練難度,使用跨尺度共享權重來減少參數量,且在編碼端輸出也增加了空間金字塔池化層(Spatial Pyramid Pooling layer,SPP)[19],使得網絡的訓練速度大幅提高。
圖1 非對稱編解碼網絡Fig.1 Asymmetric encoder-decoder network
常規(guī)的編解碼網絡包括編碼部分和解碼部分,網絡基本都是對稱式結構,編碼部分的主要任務是通過下采樣從模糊圖像中提取主要特征,解碼部分再通過上采樣得到輸出的結果。
為了使提取的特征更加精確,本文采用不完全對稱的多尺度編解碼網絡。在編碼部分使用引入了注意力機制的殘差塊(Residual Attention Block,RAB)[20],如圖2 所示,在RAB模塊中包含了通道注意力和空間注意力模塊,這兩個模塊的排列有級聯或者并行兩種方式,因為已經有實驗測試表明級聯排列的網絡訓練得到的結果會更好,且通道注意力模塊在前的結果會略優(yōu)。對于RAB 模塊,給定F作為輸入的特征圖,就可以依次計算得到一維通道注意力圖MC和二維空間注意力圖MS,計算過程如下所示:
圖2 殘差注意力模塊Fig.2 Residual attention block
其中:?表示矩陣中對應的元素相乘,F″表示最終精細的輸出特征圖。除了引入注意力機制來增強對輸入圖像特征的提取之外,本文對殘差模塊也進行了修剪和優(yōu)化,去除了歸一化層和最后一層激活層,這樣可以讓網絡在訓練過程中提高收斂速度。為了優(yōu)化特征提取,增加感受野,在編碼端特征提取后還增加了SPP 層,這樣不僅能提高任務精度,還可以加快網絡收斂。
圖像在空間上具有連續(xù)性,即使是已經發(fā)生變形的模糊圖像,其每個點的像素分布與周圍像素點之間也是有著連續(xù)性的關系,因此可以通過獲取圖像空間信息來對模糊圖像進行恢復。門控循環(huán)單元(Gated Recurrent Unit,GRU)是對循環(huán)神經網絡(Rerrent Neural Network,RNN)的改進,解決其在反向傳播期間可能會梯度消失的問題,將卷積神經網絡與GRU 相結合,希望通過將能夠抽取空間特征的卷積操作加入能夠抽取時序特征的GRU 網絡中,在編碼端和解碼端之間插入ConvGRU 模塊,通過該模塊對編碼部分提取的特征圖進行處理,獲取圖像空間信息,把有用的隱藏歷史信息給提取出來。本文采用多尺度架構,每一層都具有相同的網絡結構,整個網絡ConvGRU 之間的連接方式如圖3 所示。
圖3 ConvGRU模塊連接方式Fig.3 Connection mode of ConvGRU modules
圖3 中s1、s2、s3 分別表示由粗到細3 個不同尺度的網絡,相鄰兩個尺度之間差0.5 倍,一個ConvGRU 塊包括輸入xt、輸出yt,從上一個ConvGRU 塊得到ht-1和當前塊隱藏狀態(tài)ht。該模塊的網絡狀態(tài)表示為:
其中:↑表示往上一層網絡輸出;t表示尺度規(guī)模,t=1 代表最粗的尺度,表示從第t到第t+1 級網絡的比例調整;隱藏狀態(tài)ht可能包含有關中間結果和模糊模式的有用信息。這些信息被傳遞到下一個尺度,有利于精細尺度問題。
為了更好地訓練網絡,采用由L2 損失和感知損失共同組成的損失函數,因為L2 損失魯棒性更好,L2 損失可以表示為:
感知損失與一般使用的損失函數不同,是利用從預訓練的深度神經網絡提取多尺度特征來量化估計圖像和真實圖像之間的視覺差異。在本文中,使用在ImageNet 上預先訓練的VGG16 作為損失網絡,并從前3 個階段的最后一層提取特征,感知損失定義為:
總的損失函數是結合了L2 損失和感知損失得到的,表示為:
其中:α是為了調整損失函數相對權重的參數,本文設置為0.05。
為了更好地驗證本文所提算法的效果,使用了兩組數據集來進行訓練,包括在非均勻運動模糊復原中最常用的GoPro 模糊數據集,以及用各種手持設備,包括手機、相機等拍攝的視頻,并通過積累一些短曝光來綜合創(chuàng)建的Blur 數據集[21],在多次訓練得到理想的實驗結果后,還進行了一系列對比測試,選擇的評價指標有峰值信噪比(Peak Signal-to-Noise Ratio,PSNR)、結構相似性(Structural SIMilarity,SSIM)和復原時間,PSNR 和SSIM 的值越高,表明復原效果越好。此外為了驗證所提算法對真實模糊圖像是否也具有很好的復原效果,還使用手機拍攝了一系列模糊圖像,用于進行定性分析。
實驗是在配有Nvidia GeForce GTX1080Ti GPU,16 GB 內存,CPU為Inter Core i5,操作系統(tǒng)為Ubuntu16.04的PC上進行的,使用的是基于pytorch的深度學習框架來訓練和測試,為了結果的公平性,所有實驗都是在相同訓練配置環(huán)境的同一數據集上進行。因為內存限制,訓練過程中的批大小設置為4,學習率初始值設置為1 × 10-4,每200 個epoch 降低一半,使用Adam優(yōu)化器,總的訓練周期為1 000,網絡收斂結果較好。
這個網絡是端到端可訓練的,不需要對子模塊進行預訓練。訓練過程中首先將輸入圖像隨機裁剪為256×256,并且隨機進行90°、180°或270°旋轉,以防止網絡會過擬合。該網絡包含了3 個尺度的編解碼網絡,由粗到細每個尺度輸入圖像尺寸分別為64×64、128×128、256×256,最終輸出復原后的圖像尺寸與輸入保持一致,訓練和測試采用的圖片分辨率都是1 280×720。
深度學習需要大量數據用于訓練網絡,在模糊復原領域,則需要大量模糊-清晰圖像對來進行訓練,但是在現實生活中很難獲取到成對的模糊和清晰圖像,早期數據集獲取方式主要是通過將清晰圖像與模糊核進行卷積來合成模糊圖像,這樣雖然可以獲得足夠大的數據集,但是因為模糊核單一,訓練的網絡只能對特定類型的模糊圖像進行恢復,不能很好地對真實模糊圖像進行復原,因此,數據集的選擇非常重要。
為了得到更準確的結果,本文使用了兩組數據集來對網絡進行訓練和測試:一個是常用的GoPro 數據集,該數據集的模糊圖像是通過GoPro 攝像機從若干張清晰幀圖像中求平均得到的,每一張模糊圖像對應的清晰圖像為中間幀,共包含了3 214 對模糊-清晰圖像對,其中2 103 對用作訓練集,另外1 111 對用作測試集;另外一組Blur數據集是利用各種手持設備,包括手機、相機等拍攝的71 個視頻,并通過積累一些短曝光來綜合創(chuàng)建的,以近似更長的曝光,共包含6 708 個圖像對,其中4 472 對用作訓練集,另外2 236 對用于測試集。
2.3.1 注意力機制對實驗結果的影響
融合了注意力機制的殘差塊是所提算法的基本單元,為了驗證注意力機制對實驗結果的影響,設計了兩組對比實驗來進行驗證,一組是本文算法,另外一組是去除了殘差塊中注意力機制的算法。兩組實驗都在同樣環(huán)境下進行訓練,實驗參數設置都一樣,且使用的數據集都是GoPro,實驗結果對比采用的指標是PSNR 和SSIM,結果如表1 所示。
表1 注意力機制對實驗結果的影響Tab.1 Influence of attention mechanism on experimental results
從結果中可以看出,本文算法的PSNR 和SSIM 比無注意力機制的算法分別高3.24 dB 和0.029 3,這是因為RAB 模塊中使用的空間注意力和通道注意力對于圖片特征提取的效果會更好,卷積操作在每一層獲得的感受野十分有限,通過引入注意力機制可以增大感受野。
2.3.2 ConvGRU模塊對實驗結果的影響
ConvGRU 位于編碼端和解碼端中間,編碼端輸出的特征進入到該模塊中,可以通過獲取特征的隱藏歷史信息來對模糊圖像進行復原,然后再將結果輸入到解碼端進行處理;而且該模塊優(yōu)化了網絡結構,參數量更少,加快了訓練速度。為了驗證ConvGRU 對實驗結果的影響,也進行了兩組對比實驗:一組是本文算法,另外一組是無ConvGRU 的算法,使用了基本模塊RAB 代替了ConvGRU,兩組實驗都在同樣環(huán)境下進行訓練,實驗參數設置都是一樣的,且使用的數據集都是GoPro,實驗結果對比采用的指標是參數量、復原時間、PSNR 和SSIM,結果如表2 所示。
表2 ConvGRU模塊對實驗結果的影響Tab.2 Influence of ConvGRU module on experimental results
從表2 中可以看出,本文算法參數量更少,PSNR 和SSIM比無ConvGRU 的算法分別高1.96 dB 和0.013 9,復原時間少0.118 1 s,由此可見,該模塊對于網絡性能的提升效果較好。
2.3.3 感知損失對實驗結果的影響
感知損失是將真實圖片卷積得到的特征圖與生成圖片卷積得到的特征圖作比較,使得全局結構更接近。感知損失函數可以增強圖片細節(jié),因為感知損失的權重會影響圖片復原質量。
為了驗證感知損失函數對實驗結果的影響,本文進行了對比實驗,包括只有L2 損失函數,以及L2 損失函數和感知損失函數共同組成的混合損失函數,兩組實驗都在相同硬件環(huán)境下進行訓練,實驗參數設置都一樣,且使用的數據集都是GoPro,訓練輪次都為1 000,圖4、5 分別表示只有L2 損失函數的訓練過程和混合損失函數的訓練過程。
圖4 L2損失函數的訓練過程Fig.4 Training process of L2 loss function
從圖4、5 中可以看出,雖然圖5(a)中的均方誤差(Mean Square Error,MSE)一開始下降速度沒有圖4(a)的快,但最終得到的值更?。籔SNR 類似,一開始上升速度稍慢,但最終穩(wěn)定后,得到的值更大。這表明,感知損失的加入使得訓練結果更加精細,得到的圖像也與原圖更加接近。
圖5 混合損失函數的訓練過程Fig.5 Training process of mixed loss function
2.3.4 本文算法與主流算法對比
為了測試實驗結果,對所提算法進行全面的比較和性能評估。選擇的對比方法包括:Gupta 等[22]提出的傳統(tǒng)盲去模糊算法[22]、Sun 等[9]提出的非均勻運動模糊去除卷積神經網絡(CNN)、去模糊效果很好的尺度遞歸網絡(Scale-Recurrent Network,SRN)[23]和用于圖像去模糊的深度層次化多patch網 絡(Deep Stacked Hierarchical Multi-patch Network,DMPHN)[24]。圖6 為在GoPro 數據集上測試的結果。從圖6中可以明顯看出傳統(tǒng)算法盲去模糊效果并不是很好,這是因為在非均勻動態(tài)場景中的模糊核很復雜,傳統(tǒng)算法在反卷積時利用的是施加各種約束條件所得到的模糊核,因此這樣并不能得到效果很好的模糊復原圖像。深度學習算法因為采用端到端的網絡,且經過了大量數據的訓練,所以都在一定程度上達到了去模糊效果。從圖6 中可以看出,本文算法跟其他幾種算法相比,對模糊圖像的細節(jié)復原效果更好。
圖6 幾種算法在GoPro數據集上的測試結果對比Fig.6 Test results comparison of several algorithms on GoPro dataset
圖7 為在Blur 數據集上測試結果,傳統(tǒng)算法對于非均勻運動模糊圖像的復原效果依舊不好。對于深度學習算法,在第一行的圖片中,可以看出SRN 算法對于非均勻運動模糊圖像復原的高頻部分效果不好,出現了明顯振鈴現象,甚至恢復出原來并不存在的線條,而本文算法復原的圖像沒有明顯的模糊邊緣,紋理也很清晰。
圖7 幾種算法在Blur數據集的上測試結果對比Fig.7 Test results comparison of several algorithms on Blur dataset
實驗中使用GoPro 數據集圖像是將從高速攝像機獲取的圖像合成得到的,而Blur 數據集也是通過積累短曝光手持設備所拍攝的視頻來綜合創(chuàng)建的,因此都與實際模糊圖像有一些差別。為了驗證本文算法對于真實模糊圖像復原效果,使用手機拍攝了一組模糊圖像,通過在按動快門的同時把手機向各個方向快速移動得到;然后對這組模糊圖像進行復原效果測試,選擇SRN 算法進行對比,因為該算法對真實模糊圖像復原效果很好。
測試對比結果如圖8 所示,在圖8(a)第1 張圖片中,可以發(fā)現帽子上的字母顯示模糊,在圖8(b)SRN 復原和圖8(c)本文算法復原的結果圖中,都能明顯看出字母為“NEAS”,但是對于鍵盤旁邊的“鉛筆”,第3 張圖中筆的亮度更高,輪廓也更加清晰一些,可以看出本文算法對于模糊圖像邊緣與細節(jié)紋理方面的復原效果更好。
圖8 真實模糊圖像復原結果對比Fig.8 Restoration results comparison of real blurred image
在GoPro 數據集和Blur 數據集上對這幾種方法在相同的硬件環(huán)境下進行定量比較,選擇的評價指標包括PSNR、SSIM 和復原時間,測試結果如表3 所示。
表3 所提算法與其他算法的對比結果Tab.3 Comparison results of the proposed algorithm and other algorithms
定量測試結果表明,相較于目前去模糊效果良好的算法,本文方法有一定提升,尤其是在與真實圖像更接近的GoPro 數據集上,與較新的DMPHN 算法相比,PSNR 提升了1.22 dB,SSIM 提升了0.018 6,復原時間縮短了0.221 0 s,而在利用模糊核生成的Blur 數據集上的表現就沒有那么好,可能是因為利用網絡模擬生成的模糊圖像丟失了一部分細節(jié)信息,導致在圖像復原中無法提取出更精細的特征。
針對非均勻運動模糊的模糊源多樣性,以及邊緣和細節(jié)方面不足的問題,本文提出一種基于多尺度端到端的運動模糊圖像復原算法。首先,在每一尺度采用相同的非對稱編碼解碼網絡,在編碼端使用引入了注意力機制的殘差塊,會放大卷積神經網絡結構的優(yōu)點,增加感受野,加快網絡收斂;編碼解碼端中間加入ConvGRU 模塊,可以通過對編碼部分提取的特征圖進行處理,獲取圖像空間信息,把有用的隱藏歷史信息給提取出來,從而利用圖像空間的連續(xù)性來進行模糊圖像復原。其次,還采用跨尺度共享網絡權重,減少了網絡中可訓練的參數量,提高了訓練速度。
通過一系列實驗可以看出,本文算法能有效復原非均勻運動模糊圖像,在PSNR 和SSIM 指標對比中都比對比算法更優(yōu),復原時間也更短。無論是對于合成的數據集,還是實際模糊圖像,本文算法都有較好的復原效果,能夠恢復出清晰的圖像邊緣和一些細節(jié)的圖像紋理信息。