王高峰,張 賽,張亞南,邵 倩,高 濤
1(貴州宇鵬科技有限公司,貴陽 550014)
2(長安大學 信息工程學院,西安 710072)
霧霾天氣是一種常見的天氣現象,霧霾天氣中包含的粒子使得大氣光散射,從而造成拍攝的圖像質量嚴重降低.在伴隨有沙塵的霧霾天氣情況下,甚至會嚴重干擾人們的視覺問題[1].因此,對于去霧圖像處理對圖像研究領域以及社會發展有著重要的積極作用,并且許多優秀的去霧算法已經孕育而生.
目前對于圖像的處理方法主要分為兩類:圖像增強和圖像復原[2].圖像增強算法不考慮圖像降質的本質原由,僅從增加圖像對比度和凸顯有用細節入手,雖然在一定程度上有去霧的效果,但丟失了很多圖像細節,對于霧天車輛檢測圖像,其本身由于光照,雜質影響,圖像細節不夠明顯,車輛特征不夠突出,因此不采用圖像增強算法.圖像復原算法基于物理模型,是當前去霧算法研究被廣為使用的一種方法.2011年,He 等[3]提出了一種暗原色先驗的去霧理論假設,利用引導濾波細化透射率恢復圖像,在物體對象亮度接近天空光亮度時候,這種基于統計規律得出的先驗去霧方法將不能夠取得較好的去霧效果;Zhu 等[4]提出一種顏色衰減先驗去霧算法,通過建立有霧圖像的線性模型并利用監督學習方法來恢復出場景深度信息,該方法可以復原出較多的細節信息,但仍存在一定程度殘霧;Wang等[5]提出一種基于線性傳輸的去霧算法,該算法運行速度較快,但存在去霧越徹底,復原圖像整體越暗的現象.近年來,深度學習憑借其強大的學習能力,在圖像去霧領域已經取得了較好的效果,最常見的如Cai 等[6]提出的DehazeNet,該網絡是一種端到端的訓練模型,通過網絡訓練對透射率值進行學習,從而實現圖像去霧,但是該網絡只估計出透射率圖部分并沒有得出大氣光值部分.受到DehazeNet 以及Zhang 等[7]的深度學習去霧啟發,本文提出一種改進的對抗性神經網絡來估計大氣照度和透射率,提出了解決這個問題的方案.在這種方法中,使用獨立的神經網絡體系結構來建立大氣散射模型中的未知變量.
通常情況下,在計算機視覺中,式(1)被廣泛認為是霧圖像形成模型.

其中,x代表像素點,I(x)是待去霧圖像,J(x)是需要恢復的無霧圖像,A是全球大氣光成分,t(x)是透射率.因此,無霧圖像可以通過結合全球大氣光照估計值和透射率來獲得,從上式顯然可得,如果我們不加任何限制的話是有無窮多個解的,因此,合適的透射率是去霧問題的關鍵.許多成功的去霧理論算法以式(1)作為研究基礎來估計圖像的透射率值,但是其中傳統方法占據大多數.近年來,CNN 在圖像處理領域方面取得重大進展,已經實現了很多優秀的算法成果.2017年,Li 等[8]提出大氣散射模型可以通過具有單變量和偏差的非線性變化所描述,并將其用式(1)變化得式(2)、式(3).

式(2)、式(3)中,x代表圖像像素點,I(x)是待去霧圖像,J(x)是需要恢復的無霧圖像,A是全球大氣光成分,t(x)是透射率,參數k最終會被消掉.符合深度學習工作原理,并且顯示了卷積方法的有效性,因此,本文使用深度學習方法進行圖像去霧.
Cai 等[6]提出的DehazeNet是一種端到端的深度學習去霧網絡.該網絡將有霧圖像作為輸入,并輸出對應的透射率圖,隨后通過大氣散射模型恢復無霧圖像.DehazeNet 采用基于卷積神經網絡的深層架構,其網絡層專門設計用于體現圖像去霧中已建立的先驗假設.其結構圖如圖1所示.

圖1 DehazeNet 網絡架構圖
圖1中,與傳統的卷積層不同的是,DehazeNet 采取了Conv+Maxout[9]結構,該網絡層根據不同的假設與先驗設計不同的濾波器.對于16 個卷積濾波器時,其中每4 個是上述一種先驗特征濾波器,之后,通過Maxout unint 激活函數,每4 個輸入一張圖,當輸入圖像為3×16×16,輸出為16×12×12.上一層的輸出作為多尺度平行卷積操作的輸入,由于多尺度特征被證明有利于去霧并在inception[10]模型中使用,即同一張圖使用不同尺度的卷積核進行卷積操作.DehazeNet 中分別使用16 個3×3、16 個5×5 以及16 個7×7的卷積核,每一種尺度對應輸出16 個特征圖,并且通過padding 操作使得輸出尺寸相同,輸出為48×10×10.隨后,局部極值部分中對多尺度輸出進行最大值池化操作,最大池化對局部數據敏感,另外根據透射率具有局部不變性,所以使用文中使用了7×7 局部最大值濾波替代最大池化,輸出為48×6×6.最后,因為ReLU[11]抑制了小于0的數,只適用于圖像分類等方面,并不適合圖像復原.因為最后的透射率圖允許高于1 或者低于0,所以作者提出了一種新的雙邊線性整流函數BReLU,如圖2所示,該函數既保持了局部線性,有保持了雙邊的限制.線性回歸部分中,上層局部極值的輸出通過1 個4×4的卷積核,產生1×1的標量,并且使用BReLU 進行激活,最終,輸出的是一個標量,即輸入塊中心點的透射率值.

圖2 BReLU 激活函數
2.3.1 提出的深度學習去霧網絡
DehazeNet 算法很好的實現了去霧效果,但該方法只估計了去霧要求的透射率圖.為了解決徹底去霧的問題,本文設計了一種深度學習網絡,在估計透射率部分之外,同時準確輸出大氣光值,最后通過圖像復原公式,恢復出無霧圖像.網絡架構如圖3所示.

圖3 去霧網絡架構
如圖3所示,網絡架構可分為估計透射率部分和估計大氣光值部分.在Zhang 等[7]提出的一種端到端的去霧網絡中,作者在使用了卷積層池化層和上采樣層,取得了較好的效果,但由于使用卷積核較大,導致運行時間緩慢,這對我們進行圖像去霧造成阻礙.為了解決這一問題,本文在估計透射率部分用深度可分離(DS卷積)來取代原有常規卷積層.2018年,Sandler 等[12]提出了MobileNet v2 這一架構,該卷積層可分為深度卷積(depthwise convolution)和逐點卷積(pointwise convolution)兩部分,前者針對每個輸入通道采用不同的卷積核,即一個卷積核對應一個輸入通道,后者采用1×1 卷積核的普通卷積操作,兩者結合,效果等同于普通卷積,但會大幅度的減少計算量和模型參數,進而提升運算時間.
2.3.2 透射率圖估計
圖1左側部分中,是對透射率圖的估計.輸入有霧分別經過DS 卷積和池化層,與傳統的卷積層+池化層相比,DS 卷積可分解為深度卷積(depthwise convolution)和逐點卷積(pointwise convolution),兩者結合,效果等同于常規卷積,但是參數數量和復雜度大大減少.為了使輸出結果非線性,我們使用ReLU 激活函數.在最后一層卷積中,由于輸出的透射率圖是灰度圖,所以我們采取了一個1×1的卷積核,這樣可以將前面的深度為10的特征圖轉為深度為1.1×1 卷積核不僅可以保留前層的平面架構信息,也可以起到將低深度的作用.考慮到透射率的值在0 到1 之間,所以我們在這一層的激活函數使用Sigmoid 以保證輸出的值在該范圍內.池化層我們選取的是最大池化層,最大池化層方法可以很好地維持特征圖的平移和旋轉不變性,然而這樣做會縮小特征圖,但我們所需的透射率圖和輸入圖大小相同,所以在池化層后我們添加了上采樣層來保證特征圖大小不變.
2.3.3 大氣光值估計
下層部分中,即估計大氣光值部分,考慮到該值是和整幅圖像相關,所以我們應采取較大的卷積核,這樣感受野較大,有利于這部分的工作,同時綜合計算量,我們采取膨脹卷積的方法,這樣做的好處是在不丟失太多信息的情況下,加大了感受野,讓卷積層輸出包含較大范圍的圖片特征信息.該部分特征提取相對簡單,所以我們設置了兩層卷積層.同時,最大池化層也是我們的選擇,這樣可以在保持不變形的基礎上起到降維的作用.最后,我們采用了全連接層,依次降到256、10和1,最后將大氣光值輸出.
式(1)可變換為式(4):

式中,x代表圖像像素點,I(x)是待去霧圖像,J(x)是需要恢復的無霧圖像,A是全球大氣光成分,t(x)是透射率,t0作為閾值通常設置為0.1,其目的是為了避免當t(x)很小的時候,導致J(x)值很大,從而造成圖片的某些地方會受到強烈的噪聲影響.隨后,通過上述神經網絡獲得透射率和大氣光值之后,根據式(2),我們可以得到恢復的無霧圖像.
本文使用RESIDE 中的公開數據集ITS 以及搜集霧天圖像對網絡進行訓練,在深度學習網絡框架PyTorch 進行實現,該框架是在深度學習領域具有熱門的流行程度.在本文訓練方法中,使用Adam 優化損失函數,調整Batch Size 值為16,設定初始學習率的值為0.01,當訓練為20 000 步后,設定學習率為0.0001,并且當損失函數不再下降停止訓練.其中,對比算法有DCP 算法、Retinex 算法、CAP 算法以及深度學習AOD-Net和DehazeNet 算法.
為了對網絡架構進行定量分析,對數據集進行人工加霧處理.將ITS 數據集進行人工加霧處理,并且搜集霧天圖像,最終包含8410 張訓練圖像數據集,部分圖片如圖4展示.由于部分數據集原始圖像中本身包含有一定量的霧程度,會對試驗造成一定的影響,所以本文對部分數據集進行定性評價.

圖4 數據集構建
該試驗部分我們使用在圖像去霧中被廣泛使用的以結構相似性SSIM (Structural SIMilarity)及峰值信噪比PSNR (Peak Signal-to-Noise Ratio)兩個指標來衡量我們試驗結果的標準,實驗結果如表1所示.

表1 數據集圖像去霧結果指標
圖5為數據集去霧結果對比圖.其中,DCP、CAP以及AODNet 兩者去霧算法自身設計導致不能夠將原始無霧圖像和有霧圖像的映射關系很好的表達出來,從而導致去霧效果不夠理想.而Retinex 去霧效果造成圖像整體偏向灰色,DehazeNet 結構中也同樣采用一定的手工特征,造成圖像去霧不整潔.本文提出的深度學習算法網絡,去霧效果好,細節恢復更多,具有更強的魯棒性.
該部分實驗我們將本文提出的方法與上述幾種方法仍在相同的條件下進行對比實驗.結果如圖6所示.其中DCP 算法去霧后圖像出現光暈,其原因是因為大氣模型估計值偏差較大.CAP 算法經去霧后,圖像丟失了部分原始顏色,效果較差.同樣,AOD-Net 算法由于本身結構的問題,導致去霧效果較差.Retinex 去霧后圖像呈灰色.DehazeNet 圖像發黑,丟失了原有圖像的信息.而本文提出的深度學習網絡去霧效果較好,不僅恢復了更多原始圖像信息,而且具有較強的魯棒性.
本文受到現有深度學習去霧方法的理論指導,在原有的網絡上進行改進,提出一種改進后的端到端的深度學習去霧網絡.該網絡可分為兩部分,即估計透射率圖部分和大氣光值部分.通過與當前流行的去霧算法相比,包括傳統算法與深度學習算法,實驗表明,本文提出的新的深度學習去霧網絡能保留更多的原始圖像信息,去霧效果干凈,具有較強的魯棒性.但在部分霧度較濃的情況下,去霧效果不太理想,結合圖像數據集的制作以及原始有霧圖像與人工加霧圖像的占比不同,相信經過對數據集的調節和訓練方式的改善,會對本文算法去霧效果提供幫助.

圖5 去霧結果對比圖

圖6 去霧結果對比圖