丁泳鈞,黃 山
(四川大學 電氣工程學院,成都 610065)
卷積神經網絡良好的學習能力使得深度學習、人工智能得到快速發(fā)展[1],人臉識別、目標跟蹤等技術的應用變得越來越廣泛,如手機人臉解鎖、無人駕駛汽車等。在無人駕駛領域,圖像質量與乘客安全密切相關,在霧天情況下,空氣中存在大量懸浮顆粒物,它們對光線產生散射,使物體反射的光線衰減[2],同時,這種反射光與觀察者接收的光線發(fā)生混合,造成觀察者獲取到的圖像對比度、清晰度等特征發(fā)生改變,細節(jié)信息大量丟失[3],這對人類的視覺感知以及許多依賴計算機視覺的智能系統(tǒng)而言都是一個巨大挑戰(zhàn)。
近年來,隨著圖像去霧相關研究的不斷發(fā)展,出現了很多優(yōu)秀的去霧算法,其中,應用較廣泛的是直方圖均衡化去霧算法、暗通道先驗去霧(DCP)算法[4]、基于神經網絡的去霧算法等,這些算法可以分成基于手工先驗、基于學習先驗兩大類。
基于手工先驗的方法需要人手工制作圖像先驗,具有代表性的算法是暗通道先驗算法,該算法基于大氣散射物理學模型,通過使用圖像像素點先驗來估計透射率,其復雜度較低,然而,當場景對象與大氣光值相似時,該算法去霧效果不佳。此外,ZHU等[5]提出一種結構簡單但性能強大的顏色衰減先驗算法,該算法為估計有霧圖像的場景深度建立了一種線性模型。BERMAN[6]提出一種非局部先驗來重建原始的無霧圖像,該算法假設無霧圖像的顏色由數百種不同的顏色近似并在RGB 空間中形成緊密集群。盡管上述方法取得了一定的成功,但是基于手工先驗的方法并不能很好地處理所有情況,且去霧處理后的圖片存在顏色失真的問題。
基于學習先驗的方法使用卷積神經網絡或生成對抗網絡(Generative Adversarial Network,GAN)[7]模型,通過大量的訓練數據訓練模型使其擁有去霧的能力。CAI[8]提出一種基于卷積神經網絡的端到端去霧模型DehazeNet,該模型以有霧圖像作為輸入,輸出其介質透射圖,并通過大氣散射模型重建無霧圖像。與之類似,ZHANG[9-10]也采用深度卷積神經網絡來估計透射圖并以此重建無霧圖像,然而,不準確的透射圖往往會對去霧效果產生不利影響。此外,ENGIN 等[11]提出一種基于循環(huán)生成對抗網絡(Cycle Generative Adversarial Network,CycleGAN)的改進去霧網絡Cycle-dehaze,該網絡通過增加循環(huán)感知一致性損失以及循環(huán)一致性損失來增強用于單圖像去霧的CycleGAN 架構。YANG等[12]將與霧度相關的先驗學習引入到深度學習網絡中,所提算法結合了傳統(tǒng)的基于先驗的去霧方法和深度學習方法的優(yōu)點。LI[13]提出一種輕量級的CNN網絡AODNet,該網絡可以直接生成無霧圖像,這種端到端設計使得研究人員可以很容易地將AOD-Net 嵌入到其他深度學習模型中。ZHANG 等[14]提出一個雙分支卷積神經網絡,該網絡首先提取基本特征和恢復特征,其次將這些特征通過遞歸門模塊進行融合以獲得超分辨率的清晰特征,從而提高了生成圖像的質量。
盡管上述方法大多取得了較好的性能指標結果,但是普遍依賴于成對的數據集,這就意味著對于每一個有霧圖像,都需要一個與之相對應的無霧圖像。然而,由于光照強度和對比度在不斷地發(fā)生變化,同時收集同一場景下的有霧圖像與無霧圖像時成本較高,難度較大。因此,需要探索一種不依賴于成對數據集訓練的圖像去霧算法。
本文選用CycleGAN[15]作為基礎網絡,該網絡于2017 年被提出,之后廣泛應用于圖像修復、風格遷移等領域[16]。近年來,有很多優(yōu)秀的去霧算法都使用CycleGAN 及其衍生網絡[17],相較傳統(tǒng)的神經網絡,CycleGAN 最大的優(yōu)勢在于不需要成對的數據集進行訓練,大幅降低了對數據集的要求。但是,CycleGAN依然存在去霧后圖像失真的問題。為此,本文在CycleGAN 的基礎上對網絡的損失函數進行改進,通過引入顏色損失函數使去霧后的圖像與原始無霧圖像具有相同的顏色分布,此外,引入特征損失函數,以保留圖像的細節(jié)特征,提高去霧后圖像的質量。
GAN 采用博弈論中二人零和博弈的思想,網絡包括生成器和判別器,采用對抗訓練的方式進行訓練。其中,生成器根據輸入圖像生成一張類似訓練數據的虛假圖像以“騙”過判別器,而判別器的作用是區(qū)分真實數據和所生成的虛假數據,并將其判斷結果反饋給生成器,生成器根據結果再進行訓練,以提高生成更真實圖片的能力。通過上述過程,生成器與判別器之間會達到一個均衡的狀態(tài),GAN 的目標函數可以表示為:
其中:x是真實的輸入數據;Pdata(x)表示真實數據的分布;z表示隨機噪聲;P(z)表示生成網絡的分布。該目標函數表示:對于判別器D,希望它能夠準確分辨出生成器生成的虛假圖片,即希望D(G(z))接近于0,此時目標函數的值最?。粚τ谏善鱃,希望它生成的每張圖片都可以騙過判別器,即希望D(G(z))接近于1,此時目標函數的值最大。當D(G(z))=0.5 時,就達到了平衡狀態(tài)。
CycleGAN 的目的是實現X域圖像數據與Y域圖像數據的相互轉換。如圖1(a)所示,CycleGAN包含2個映射函數,分別是G:X→Y和F:Y→X,同時還包括DY和DX這2 個判別器。DY輸出的判別結果會激勵生成器G 將X向Y域中轉換,同樣,DX輸出的判別結果會激勵生成器F 將Y向X域中轉換。此外,為了保證圖像轉換時的一致性,避免出現X域中的所有圖片都被映射到Y域中同一張圖片的情況,CycleGAN 中引入2 個循環(huán)一致性損失,所謂循環(huán)一致性損失,指的是圖像從源域轉換到目標域后,同樣也可以從目標域返回到源域。圖1(b)所示為前向循環(huán)一致性損失,即圖像從X域經過生成器G 后,再經過生成器F 仍然可以轉換到源域,可表示為:x→G(X)→F(G(X))≈x。同理,圖1(c)所示為反向循環(huán)一致性損失,即Y域中的圖片經生成器轉換到X域后,再經過生成器G 仍然可以轉換到源域,可以表示為:y→F(Y)→G(F(Y))≈y。
圖1 CycleGAN 結構Fig.1 CycleGAN structure
CycleGAN 中引入了2 個對抗損失,對于映射函數G:X→Y以及判別器DY,有:
其中:Pdata(x)表示X域的樣本分布;Pdata(y)表示Y域的樣本分布。式(2)表示當生成器G 試圖讓其生成的圖像與Y域中的圖像盡可能相似時,判別器D 也在試著將真實圖片與生成的虛假圖片區(qū)分開,這樣,生成器與判別器就形成了對抗關系,因此,可以表示為。
同理,另一個映射F:Y→X和它的判別器DX也是如此,可以表示為:。
從理論上來講,當G 和F 是隨機函數時,1.3節(jié)中的對抗損失可以使生成器G 和F 分別產生與目標域Y和X相同分布的輸出。然而,僅使用對抗損失可能出現圖像在轉換時無法保留其內容、結構等信息的問題,CycleGAN 通過引入循環(huán)一致性損失來解決該問題。如圖1(b)所示,對于X域中的每一張圖像x,圖像的循環(huán)轉換都應該能夠將x還原成原始圖像,即x→G(X)→F(G(X))≈x,同樣對Y域中的每一個圖像y來說,G 和F 也要滿足反向循環(huán)一致性條件:y→F(Y)→G(F(Y))≈y。循環(huán)一致性損失定義如下:
其中:G(x)和F(y)是前向生成器和反向生成器;x是屬于X域的圖像;y是屬于Y域的圖像;F(G(x))和G(F(y))是重新構建的圖像。
CycleGAN 使用對抗損失函數使得判別器擁有判斷一張圖片是否具有目標域風格的能力,同時,使用循環(huán)一致性損失函數來確保重構圖像與原始圖像大致相似。但是,在CycleGAN 中,去霧前后圖像顏色失真,此外,圖像在特定域轉換時由無關域隨機變化導致生成器不能很好地保留圖像特征。本文引入顏色損失和特征損失來解決上述問題。
通常來說,有霧的圖像缺乏亮度與對比度,因此,受文獻[18]的啟發(fā),本文引入顏色損失函數來最小化無霧圖像與重構的無霧圖像之間的誤差,以此強制生成器生成與無霧圖像具有相同顏色分布的圖像。顏色損失函數定義如下:
其中:()p表示一個像素點;∠(,)是將RGB 顏色作為3D 矢量并計算2 種顏色之間角度的運算符;y是Y域中的無霧圖像;G(F(y))是重構的無霧圖像。通過優(yōu)化重構圖像與原始無霧圖像中每個像素點的誤差和,可以解決圖像轉換過程中顏色失真的問題。
如圖2 所示,已知CycleGAN 中有生成器映射G:X→Y,表示生成器G 將X域中的圖像轉換為Y域中的圖像,那么當向G 中輸入原本就是Y域的圖像y時,希望G(y)與原始的y圖像盡可能地接近。因此,采用文獻[19]的思想,本文在2 個生成器上分別添加一個恒等映射,即G:Y→Y和F:X→X,將此映射中的損失稱為特征損失。在加入了特征損失后,生成器G 在原有輸入的基礎上增加了Y域圖像的輸入,生成器F 也添加了X域圖像的輸入。使用L1 損失函數對原圖像和生成的圖像進行優(yōu)化,可以確保2 個生成器在生成目標域圖像時能獲取目標域中圖像的特征,從而更好地還原原始圖像的細節(jié)特征,提高生成圖像的質量。
圖2 生成器的輸入和輸出Fig.2 Input and output of the generator
特征損失函數定義如下:
其中:x是屬于X域的圖像;y是屬于Y域的圖像;Pdata(x)表示X域的樣本分布;Pdata(y)表示Y域的樣本分布;G(y)與F(x)分別是添加了Y域圖像輸入和X域圖像輸入的生成器。
改進之后的網絡總損失函數可以表示為:
其中:LGAN是對抗損失;Lcolor是顏色損失;Lcycle是循環(huán)一致性損失;Lidt是特征損失;λ和μ分別是循環(huán)一致性損失與特征損失的權值參數。λ的值選用CycleGAN 中的默認值10,μ的值會影響網絡的性能表現,下文將對此進行討論。
本文實驗采用NYU-depth-v2 數據集[20],其為圖像去霧領域常用的數據集,共包含1 449 張有霧圖與無霧圖,NYU 數據集規(guī)模較大,本文選擇在該數據集上進行訓練和測試。首先,將數據集按照一定比例隨機劃分為訓練集和測試集,訓練集由trainA 和trainB 這2 個部分組成,trainA 中存放有霧圖像,trainB 中存放無霧圖像,訓練集中不包含測試集圖像的任何信息。同時,在訓練之前將訓練圖像壓縮至286×286 像素,以適配網絡要求的輸入尺寸。
實驗所用環(huán)境為:Ubuntu16.04 系統(tǒng),CPU 為Intel?Xeon?E5-2678 v3 @2.50 GHz,62 GB 內存,GPU 為一塊NVIDIA 2080Ti 11 GB 顯卡,使用深度學習框架Pytorch 1.4.0,編程語言為Python3.6。
本次實驗使用batch size 為1 的Adam 優(yōu)化器。網絡共迭代200 個epoch,在前100 個epoch 中,網絡的學習率保持0.000 2 不變,在之后的100 個epoch 中學習率線性衰減至0。
本文采用圖像去霧領域常用的性能指標對實驗結果進行評價,包括結構相似性指數(Structural Similarity Index,SSIM)[21-22]、峰值信噪比(Peak Signal-to-Noise Ratio,PSNR)。
SSIM 通過比較參考圖像與待評圖像的亮度、對比度和結構,以計算2 幅圖像之間的結構相似性,該值越大,說明圖像失真越小,生成圖像的質量越好。SSIM 效果可靠且具有說服力,因此,在圖像去霧領域得到廣泛應用[23]。
PSNR 通過計算待評圖像與參考圖像之間各個像素點的誤差之和來評價一個算法的性能,該值越高,表明圖像失真越小,重建方法越有效。
本文實驗主要包括3 個部分:首先,通過客觀數據證明本文算法相較其他算法的優(yōu)越性;其次,列舉消融實驗和對比實驗的結果,證明本文所提改進方法的有效性;最后,討論不同的特征損失函數權值μ對網絡去霧能力的影響,并給出μ值的選取建議。
3.3.1 客觀評價
使用圖像去霧領域常用的指標SSIM、PSNR 進行比較,消融實驗結果如表1 所示,從表1 可以看出,相較原始CycleGAN,在添加了顏色損失函數和特征損失函數之后,結構相似性指數SSIM 分別提高約4 和7 個百分點,峰值信噪比PSNR 分別提高約3.1 和3.5個百分點,這證明了本文所提改進方法的有效性。
表1 消融實驗結果Table 1 Ablation experimental results
使用不同的去霧算法在測試集上進行圖像去霧,性能指標結果如表2 所示。從表2 可以看出,使用DCP算法進行去霧后雖然提高了圖像的平均PSNR 值,但其平均SSIM 值反而下降,使用另外3 種算法去霧后圖像的性能指標有不同程度的提升,但是本文算法依然取得了最高的平均SSIM 值和PSNR 值。
表2 去霧算法性能指標對比結果Table 2 Comparison results of performance indexes of dehazing algorithms
3.3.2 主觀評價
本節(jié)首先通過消融實驗證明本文引入的顏色損失和特征損失函數的有效性,隨后通過對比實驗驗證本文改進后算法的優(yōu)勢。加入顏色損失函數的實驗結果如圖3 所示,其中,左圖為未添加顏色損失函數的結果,右圖為加入顏色損失函數后的結果,從圖中的方框處可以看出,引入顏色損失函數之前圖片中桌子一側由于顏色失真引起了過度曝光的問題,而加入顏色損失后解決了該問題。引入特征損失函數的實驗結果如圖4所示,從左到右依次是未添加特征損失函數處理結果、引入特征損失函數處理結果及對應的原始圖像??梢钥闯觯尤胩卣鲹p失后能更好地還原方框中物體的細節(jié)特征,生成的圖像更接近原始圖像。
圖3 添加顏色損失前后的去霧效果Fig.3 Dehazing effect before and after adding color loss
圖4 添加特征損失前后的去霧效果Fig.4 Dehazing effect before and after adding feature loss
將本文算法與DCP算法、CycleGAN算法、AOD-Net算法,以及基于CycleGAN的去霧算法Cycle-dehaze進行比較,從實驗結果中隨機抽取5張圖片,結果如圖5所示。從前2張圖片可以看出,本文算法在去霧能力上優(yōu)于3種對比算法,去霧效果更好。從后3張圖片可以看出,DCP算法去霧后存在嚴重的顏色失真問題,而其余3種算法去霧后圖片雖然在顏色失真問題上優(yōu)于DCP算法,但是去霧效果依然沒有本文算法明顯。因此,從主觀結果和客觀結果上可以得出,本文算法可以更好地還原圖像的細節(jié)特征及顏色信息,生成的圖像更接近原始圖像。
3.3.3μ值對網絡性能的影響
在證明引入特征損失函數可以有效提高網絡去霧性能之后,本文進一步探究不同的特征損失權重參數μ值對網絡性能的影響,分別測試μ=0,0.5,1,2,4,8 時網絡在測試集上的性能指標,結果如圖6所示。從圖6(a)可以看出,當μ取0.5~8 時,網絡的SSIM 指標在一個很小的范圍內波動,從圖6(b)可以看出,當μ取0.5 左右時,網絡具有最好的PSNR 指標,同時在訓練過程中觀察到,當μ的取值大于2 時,損失函數曲線收斂情況并不好。因此,根據該實驗結果,本文建議將μ值設置在0.5 左右,以使網絡擁有最佳的去霧性能。
圖6 μ 取不同值時網絡的性能指標Fig.6 Performance index of network with different μ values
本文提出一種基于改進循環(huán)生成對抗網絡的圖像去霧算法,該算法通過引入顏色損失和特征損失來解決網絡去霧過程中存在的顏色失真問題,能更好地保留原始圖像的細節(jié)特征,使得去霧效果更佳。實驗結果表明,該算法的去霧能力優(yōu)于AOD-Net、Cycle-dehaze等算法。下一步將使用Ghost 模塊[24]替代卷積塊并結合注意力機制,在保證去霧圖像質量的同時減少網絡參數,提高去霧的效率,從而將本文算法應用于視頻去霧領域。