李小艷,宋亞林,樂 飛
(河南大學 軟件學院,開封 475004)
圖像在采集、存儲、記錄和傳輸過程中常常會受到眾多不良因素的干擾影響,從而導致圖像在一定程度上會退化失真,質量下降,導致獲取的圖像中有噪聲的存在,從而影響圖像的質量.圖像去噪是在保持原始圖像細節(jié)信息完整的同時,去除圖像中的無用噪聲信息,以便于后續(xù)對圖像進行應用[1,2].圖像去噪是計算機視覺研究中的一個經(jīng)典問題,同時也是圖像領域中一個具有挑戰(zhàn)性的研究課題[3-5].
傳統(tǒng)的圖像去噪方法主要是高斯濾波降噪[6,7],這種方法屬于局部平滑濾波,這種去噪方法針對圖像的非平滑部分,不能進行有效的處理.非局部均值降噪[8]方法可以解決圖像的非平滑這一問題,該方法利用了圖像中存在的冗余信息進行去噪處理,能夠較好地去除圖像中存在的高斯噪聲,該方法的最大缺陷就是計算復雜度太高,程序非常耗時,導致該算法不夠實用.小波閾值降噪[9,10]主要是利用濾除高頻信號這一原理,小波閾值降噪如果選擇的閾值過大,會導致圖像中的高頻信息被無區(qū)別的抑制,從而導致圖像邊緣信息,紋理細節(jié)丟失.如果閾值過小,就不能對高頻噪聲進行有效的去除.Dabov 等人在2007年提出了一種基于融合變換算法的塊匹配和三維濾波降噪方法[11],簡稱為BM3D (block matching and 3D filtering),該方法采用不同的去噪策略,通過與相鄰圖像塊進行匹配搜索,在三維空間進行濾波,得到塊評估值,最后通過加權求和將各個塊復原得到最終去噪效果.BM3D 降噪方法雖然去噪效果顯著,但時間復雜度比較高.采用傳統(tǒng)圖像去噪算法的復雜度較低,實時性比較強,處理速度快,但在去噪過程中邊緣細節(jié)信息和紋理信息很容易丟失.
隨著深度學習特別是卷積神經(jīng)網(wǎng)絡(CNN)[12,13]在計算機領域的逐漸發(fā)展,CNN 被眾多研究學者應用在圖像去噪問題上并取得了較好的研究成果.Holt[14]在研究神經(jīng)網(wǎng)絡去噪的過程中,其選用的研究方法是多層感知機(multi layer perceptron,MLP).在他看來多層感知機網(wǎng)絡具有強大的擬合能力和非線性能力,通過學習帶噪聲的圖像和無噪聲圖像來實現(xiàn)圖像之間的映射關系,MLP 模型對各種類型的噪聲影響不大,通過對含有此類噪聲的圖像進行分類,可以獲得良好的效果.這種模型的缺點是由于不能很好地處理各種等級噪聲,因此用不同等級噪聲圖像進行訓練,則很難獲得較好的去噪效果.Mao 等人[15]提出了一種深卷積編解碼網(wǎng)絡應用于圖像去噪,該網(wǎng)絡具有對稱結構的編碼(encoding)和解碼(decoding),每一層編碼卷積和解碼卷積之間都有跳躍連接,可以獲得更好的泛化能力.但是由于網(wǎng)絡變深會導致圖像細節(jié)的丟失.Zhang 等人[16]提出用較深層的CNN 網(wǎng)絡實現(xiàn)圖像去噪,稱為DnCNN,該網(wǎng)絡模型通過利用殘差學習[17]和歸一化[18]的共同作用,提高去噪性能,該算法使用端到端的神經(jīng)網(wǎng)絡模型來進行降噪,同時該算法具有較好的盲去高斯噪聲的能力.但是,由于所建立的神經(jīng)網(wǎng)絡模型是由單一大小的卷積核卷積運算完成,因此,圖像的特征信息提取很少.Zhang 等人[19]采用擴張卷積來學習殘差圖像并提出了IRCNN 模型,該模型基于半二次方分裂(HQS)算法,利用卷積神經(jīng)網(wǎng)絡學習快速有效的去噪器,以此來處理不同的圖像修復問題,但是該模型收斂速度慢,計算成本大,比較耗時.Zhang 等人將估計的噪聲水平和圖像下采樣后的多張子圖像作為輸入,提出了快速靈活的圖像去噪網(wǎng)絡FFDNet[20],該模型能夠在較大程度上改善降噪性能,同時能較好地處理真實場景下的圖像去噪問題.該方法只有在噪聲水平較大時,才能保持更好的視覺效果,當噪聲較小時,去噪后的視覺效果不佳.Creswell 等人[21]介紹了GAN 用于圖像合成、圖像超分辨率和圖像分類.Wang 等人提出了一種基于GAN 和CNN 相結合的圖像去噪網(wǎng)絡[22],該網(wǎng)絡采用GAN 進行降噪處理,采用CNN 實現(xiàn)對圖像細節(jié)的恢復.該方法存在網(wǎng)絡訓練不穩(wěn)定,收斂速度慢,模型不可控等問題.席志紅等人[23]提出了一種深層殘差神經(jīng)網(wǎng)絡用于圖像的超分辨率重建,通過實驗驗證該網(wǎng)絡可以更好地還原圖像中的細節(jié)信息,消除偽影.但該方法特征表達能力不足,難以去除密集的噪聲.陳人和等人[24]采用對抗損失和重建損失的加權和,該網(wǎng)絡雖然能夠去除噪聲并且針對圖像的細節(jié)信息得到保留,然而該算法可能會導致圖像的邊緣模糊.秦毅等人[25]針對不同類型的圖像,通過采用一個邊緣感知損失函數(shù)去除圖像噪聲,同時恢復圖像的邊緣細節(jié).該算法的淺層像素級信息利用率低,紋理細節(jié)容易丟失.朱斯琪等人[26]提出一種循環(huán)一致性生成對抗網(wǎng)絡,實現(xiàn)了從低劑量CT 圖像到標準劑量CT 圖像的端到端映射,同時將密集型殘差學習網(wǎng)絡模型引入到該網(wǎng)絡生成器中,利用殘差網(wǎng)絡的特征復用性來恢復圖像細節(jié),但是該方法在去除噪聲后仍然會有偽影存在,且該方法目前只適用于腹部CT 圖像.
上述圖像去噪算法盡管在網(wǎng)絡結構設計,目標損失函數(shù)以及數(shù)據(jù)集的選擇上存在差異,但是這些算法都能夠取得顯著的成果.上述這些算法在進行網(wǎng)絡訓練時,圖像特征不能被充分學習,導致圖像細節(jié)丟失,降低去噪效果.因此為進一步改善圖像去噪質量,本文在去除噪聲的過程中,保存圖像的邊緣特征信息的基礎上,提出一種密集連接殘差塊的卷積神經(jīng)網(wǎng)絡去噪算法.該網(wǎng)絡模型由卷積層,Leaky ReLU 層,批量歸一化,密集殘差塊組成,其中密集殘差塊通過多級殘差網(wǎng)絡和密集連接,用優(yōu)化的殘差映射代替原始的卷積層,相鄰的卷積層之間通過短連接,以提高殘差網(wǎng)絡的學習能力.該網(wǎng)絡結構以含噪聲的圖像作為輸入,去噪后的圖片作為輸出,構成了由噪聲圖像到去噪后圖像的非線性映射.本文算法在去除噪聲的同時,能夠保留更多的圖像細節(jié)信息和圖像邊緣特征,去噪后的圖像視覺效果更好,且具有更高的峰值信噪比值和結構相似性值.
Zhang 等人[16]設計出一種經(jīng)典的基于殘差學習的卷積神經(jīng)網(wǎng)絡去噪模型稱為DnCNN,相比于MLP 和BM3D 等傳統(tǒng)的圖像去噪算法,去噪性能有明顯的提高.
DnCNN 網(wǎng)絡共有17 層,其中第1 層由64 個大小為3×3×1的濾波器被用來生成64 個特征映射,然后經(jīng)過ReLU 激活函數(shù).第2 至第16 層由64 個大小為3×3×1的濾波器,而后經(jīng)過BN 和ReLU 激活函數(shù); 網(wǎng)絡的最后一層采用1 個大小為3×3×64的濾波器對網(wǎng)絡模型進行重構.DnCNN 網(wǎng)絡的訓練通過式(1)進行學習:
其中,x為去除噪聲后的圖像,y為噪聲圖像,F(x)為網(wǎng)絡預測的噪聲.對于DnCNN 圖像去噪,實際上F(x)不可能包含全部的噪聲信息,因此x會丟失掉部分的細節(jié)信息,因此DnCNN 的去噪效果仍有待提高.
為了提高卷積神經(jīng)網(wǎng)絡的精確度,通常情況下都是通過簡單的堆疊網(wǎng)絡增加網(wǎng)絡的深度,與此同時網(wǎng)絡的加深致使網(wǎng)絡梯度發(fā)生爆炸或者衰減到很小,誤差值乘上權重后向后傳播,使得權重越來越小,神經(jīng)網(wǎng)絡的訓練精度先上升然后達到飽和,因此提出殘差學習用來解決網(wǎng)絡性能退化的問題.He 等人[17]提出了殘差學習的方法,其框架結構如圖1 所示.
x為殘差模塊的輸入,F(x)+x是殘差模塊的輸出.只要F(x)=0就構成了一個恒等映射H(x)=x,殘差為F(x),殘差學習結構通過前向神經(jīng)網(wǎng)絡和shortcut 連接的方式實現(xiàn),shortcut 連接執(zhí)行了一個恒等映射,這種方式不會產(chǎn)生額外的參數(shù),同時也不會增加網(wǎng)絡的計算復雜度.采用殘差學習策略使得深度卷積神經(jīng)網(wǎng)絡容易被訓練并且能更好地提升精確度.
帶泄露修正線性單元函數(shù)(Leaky ReLU)[27]是基于ReLU 激活函數(shù)的改進,帶泄露修正線性單元函數(shù)在保留ReLU 函數(shù)的優(yōu)點的同時,還可以做到修正數(shù)據(jù)分布.激活函數(shù)如圖2 所示,通過在ReLU 函數(shù)的負半?yún)^(qū)間引入一個泄露值,解決部分神經(jīng)元因為失活不能參與參數(shù)的更新.
圖2 Leaky ReLU 激活函數(shù)
在反向傳播過程中,經(jīng)過激活函數(shù)負區(qū)間的神經(jīng)元在參與網(wǎng)絡訓練過程時,由于泄露值的存在,神經(jīng)元對應的權重和偏置參數(shù)也得到了更新,計算得到的梯度不會恒為0,網(wǎng)絡的擬合能力得到提高.由于圖像在噪聲環(huán)境下的有效特征信息相對來說較為有限,因此在網(wǎng)絡訓練中對于圖像中的特性信息需要充分挖掘.Leaky ReLU 函數(shù)替換掉原始網(wǎng)絡中的ReLU 激活函數(shù),該激活函數(shù)可以實現(xiàn)網(wǎng)絡梯度更快的更新,同時擁有比原始網(wǎng)絡更好的圖像去噪效果.
卷積神經(jīng)網(wǎng)絡的輸入都是上一層的輸出,不同卷積層所提取到的特征各不相同,所以通過單一層的卷積不能盡可能多地獲取到圖像的特征信息,僅依靠殘差塊的疊加同樣會限制網(wǎng)絡的性能,所以為了優(yōu)化殘差網(wǎng)絡的性能,Huang 等人[28]提出了一種新的密集連接殘差模塊,用于緩解梯度消失問題,加強特征傳播與特征復用,極大地減少了參數(shù)量.本文提出了一個密集連接殘差(RRDB)的卷積神經(jīng)網(wǎng)絡結構.RRDB 模塊如圖3 所示.
圖3 RRDB 殘差塊
RRDB 模塊包括3 個dense block 塊,每一個dense block 里面又包含4 組卷積層與Leaky ReLU 激活函數(shù),卷積核的大小為3×3,每組由32 個卷積核組成,每組都通過密集連接,最后通過一個3×3的卷積層.每一個dense block 的輸出進行殘差縮放[29,30],乘以一個0 到1 之間的數(shù),以用于防止網(wǎng)絡模型的不穩(wěn)定.
通過多級殘差網(wǎng)絡和密集連接,用優(yōu)化的殘差映射代替原始的卷積層,相鄰的卷積層之間通過短連接,以提高殘差網(wǎng)絡的學習能力.RRDB 模塊中的卷積與卷積之間以跳躍連接的方式,讓模塊中每一層卷積層的特征可以做到被充分利.RRDB 模塊提高了網(wǎng)絡的整體訓練的速度,加深了網(wǎng)絡的深度,通過每一層特征的融合,輸出的特征圖可以更好地包含原圖像的特征信息.
圖像去噪是通過對含噪圖像進行處理,通過非線性映射到噪聲圖像,從而得到去噪后圖像的過程.
為了對網(wǎng)絡進行特征提取,同時為了降低網(wǎng)絡訓練的復雜度,通過結合密集連接殘差塊,設計了一種基于密集連接殘差的卷積神經(jīng)網(wǎng)絡模型(DRCNN).圖4展示了本文算法網(wǎng)絡整體架構示意圖,該模型結構分為3 個部分: 特征提取模塊,密集連接殘差模塊(RRDB)和重建模塊.
圖4 網(wǎng)絡模型結構
本文提出的去噪網(wǎng)絡,共有12 層,網(wǎng)絡架構由3 部分組成: 卷積層(Conv),激活函數(shù)(ReLU),批規(guī)范化操作處理(BN),具體如下:
網(wǎng)絡模型第1 層: Conv + Leaky ReLU,由64 個卷積核大小為3×3×c的濾波器用來生成64 個特征映射,并使用Leaky ReLU 激活函數(shù)對特征實現(xiàn)非線性變換形成非線性特征映射,步長為1×1,c表示圖像的通道數(shù),該網(wǎng)絡模型使用灰度圖像,故c=1.
網(wǎng)絡模型第2 層: dense block + dense block +dense block,結構如圖3 所示,每一個dense block 里面又包含4 組卷積層與Leaky ReLU 激活函數(shù),卷積層由32 個卷積核大小為3×3的濾波器用來生成32 個特征映射,每組都通過密集連接,最后通過64 個卷積核大小為3×3的卷積層生成64 個特征映射.
網(wǎng)絡模型第3-11 層: Conv + BN + Leaky ReLU,由64 個卷積核大小為3×3×c的濾波器用來生成64 個特征映射,并使用Leaky ReLU 激活函數(shù)對特征實現(xiàn)非線性變換形成非線性特征映射,步長為1×1,c表示圖像的通道數(shù),該網(wǎng)絡模型使用灰度圖像,故c=1.
網(wǎng)絡模型第12 層: Conv,采用c個大小為3×3×64的濾波器進行網(wǎng)絡重構,步長為1×1,通過式(1)的殘差學習策略進行訓練,最終輸出去噪后的圖片.
在網(wǎng)絡結構中,采用0 填充的方法保持每層卷積特征圖的大小保持不變,用來防止產(chǎn)生邊界偽影.
通過從預測的噪聲圖片中恢復無噪聲圖片,訓練數(shù)據(jù)是帶有噪聲的圖像y=x+v,去噪模塊采用殘差學習獲取到殘差映射R(y)≈v,然后得到x=y-R(y).本文所設置網(wǎng)絡訓練的目標損失函數(shù)為:
其中,N為訓練樣本數(shù),xi代表原始圖像,yi表示帶噪聲的圖片.實際噪聲為(yi-xi)(噪聲圖像值減去無噪聲圖像值),θ為當前網(wǎng)絡的訓練參數(shù)數(shù)值,估計的噪聲殘差R(yi;θ)與圖片中實際噪聲的平方誤差是損失函數(shù)的期望值.為了計算函數(shù)L(θ)的最小值,本文采用Adam 優(yōu)化器進行迭代和參數(shù)更新.定義如下:
其中,mt表示一階動量項,vt表示二階動量項,β1值為0.9,β2值為0.999,為偏移修正值,θt表示迭代t次模型的參數(shù),利用式(7)的參數(shù)更新過程,能夠通過訓練得到網(wǎng)絡模型.
本文使用來自伯克利分割數(shù)據(jù)集(BSD)的400 幅大小為180×180的灰度圖像來訓練高斯合成去噪模型.深度學習模型在訓練上往往需要大量的訓練圖像,但是訓練集的圖片數(shù)量一般都有限,所以為了防止出現(xiàn)過擬合的情況,需要對樣本圖像進行數(shù)據(jù)增強.本文所設計的算法中,首先對每一張圖像進行1、0.9、0.8、0.7 倍的縮放,然后采用40×40的裁剪框,滑動步長設置為10,隨后將每一個子圖像塊都進行隨機旋轉,原圖像進行水平、垂直、順時針翻轉90°、180°、270°進行數(shù)據(jù)增廣操作,將400 張圖像裁剪成238 336 個 子圖像塊,充足的訓練圖像塊有助于促進特征的魯棒性并提高訓練去噪模型的效率.通過上述數(shù)據(jù)增強操作后的不含噪聲的原始圖像,隨后將高斯白噪聲添加到原始圖像中生成含噪圖像.為了測試不同噪聲強度對網(wǎng)絡性能的影響,將σ=5,σ=10,σ=25,σ=50的高斯白噪聲分別添加到原始圖像中用以生成不同的訓練集.測試數(shù)據(jù)集采用BSD68 和Set12 組成,Set12 數(shù)據(jù)集如圖5 所示,包含5 張人像,3 張動物以及房子輪船飛機場景.BSD68 數(shù)據(jù)集包含建筑,人物,動物,植物,飛機等場景,共68 張圖片.兩個測試集均為灰度圖像.
圖5 數(shù)據(jù)集Set12 示例圖片
為了評估去噪后的圖像質量,通常從峰值信噪比(PSNR)和結構相似性(SSIM)兩方面進行定量的評估分析,其中PSNR是一種基于對應像素點之間誤差的指標,PSNR和SSIM的值越大,就代表失真越少,圖像去噪效果更好.計算公式如下:
(1)峰值信噪比(PSNR)
n為每像素的比特數(shù),一般取8,即像素灰階數(shù)為256,單位為dB.
(2)均方誤差(MSE)
MSE表示當前圖像f?(i,j)和參考圖像f(i,j)的均方誤差; 其中M,N為圖像的高度和寬度.
(3)結構相似性(SSIM)
結構相似性分別從樣本圖像的亮度(luminance,l)、對比度(contrast,c)和結構(structure,s)這3 個方面來度量圖像的質量.其中亮度l、對比度c和結構s的計算公式如下:
其中,c3=c2/2,ux代表圖像x的像素的均值,uy代表圖像y的像素的均值,σ2x代表圖像x的像素的方差,σ2y代表圖像y的像素的方差,σxy代表圖像x和圖像y的協(xié)方差,SSIM的計算公式為:
為了驗證本文所提出的網(wǎng)絡結構的去噪性能,將本文所提出的算法與BM3D,DnCNN,FFDNet,IRCNN 幾種常見的卷積神經(jīng)網(wǎng)絡去噪模型進行了實驗對比,為了驗證圖像在不同等級噪聲下網(wǎng)絡去噪性能的影響,分別對訓練集添加噪聲等級為5,10,15,25,50 的高斯噪聲.
為了對本文所設計的算法進行驗證,實驗的硬件配置為GPU 為Tesla P4,內存為8 GB,軟件配置為CUDA 10.1,Python 3.7,神經(jīng)網(wǎng)絡的搭建采用深度學習框架PyTorch 0.4.采用Adam 優(yōu)化器進行訓練,學習率設置為1×10-3,訓練輪數(shù)為50.為了提高網(wǎng)絡訓練效率,對網(wǎng)絡的輸入數(shù)據(jù)采用批量輸入,batchsize 為128.
為了考察不同的dense block 模塊對網(wǎng)絡去噪模型的影響,將分別對含有1,2,3 個Conv+Leaky ReLU層的dense block 模塊進行圖像去噪性能比較,實驗結果如表1、表2 所示.表1 表示在噪聲等級為25 時,不同數(shù)量的dense block 在測試集Set12 上的PSNR和SSIM值.表2 表示在噪聲等級為25 時,不同數(shù)量的dense block 在測試集BSD68 上的PSNR和SSIM值.
表1 不同dense block (DB)模塊在Set12 數(shù)據(jù)集上的PSNR/SSIM 值
表2 不同dense block (DB)模塊在BSD68 數(shù)據(jù)集上的PSNR/SSIM 值
從表1 和表2 中可以看出,將3 個dense block 模塊進行串聯(lián)拼接,可以融合更多的圖像特征信息,在網(wǎng)絡輸出時可以對輸入圖像進行更細節(jié)的恢復,平均峰值信噪比和結構相似性均具有較好的效果.此實驗說明dense block 模塊的特征融合對圖像去噪是有效的.
對Set12 和BSD68 兩種數(shù)據(jù)集分別添加不同等級σ=5,σ=10,σ=15,σ=25,σ=50的高斯噪聲,由于圖像自身結構的差異性,不同的圖像在不同的去噪算法上的結果存在差異,導致PSNR和SSIM的值不相同.表3 顯示在不同噪聲等級下,Set12 數(shù)據(jù)集的每一張圖片的去噪結果的PSNR值,本文提出的算法在σ=5,σ=10,σ=15,σ=25,σ=50時,圖像去噪效果優(yōu)于其他去噪算法,在高噪聲σ=50場景下,本文的圖像去噪效果一般,PSNR提升較小.表4 顯示在不同噪聲等級下,Set12 數(shù)據(jù)集在不同圖像去噪算法下的平均SSIM值,本文提出算法的圖像去噪上取得了良好的效果.從表3 和表4 可以看出,本文所提出的算法在5 種噪聲等級下的PSNR與經(jīng)典的BM3D 圖像去噪算法相比平均超出了2.7 dB,SSIM平均超出了0.2776.與深度神經(jīng)網(wǎng)絡圖像去噪方法中的DnCNN 方法比較,在噪聲等級為5,10,15,25,50 時,本文提出的去噪算法平均PSNR分別提高了0.09 dB,0.11 dB,0.1dB,0.12 dB,0.18 dB,平均SSIM分別提高了0.000 3,0.000 7,0.000 6,0.002 1,0.0049.表5 展示了在5 種不同噪聲等級下,本文算法在數(shù)據(jù)集BSD68 下,PSNR取得最好的平均值,表6 使用了SSIM作為評價指標,在不同噪聲等級下,不同算法在數(shù)據(jù)集BSD68 下的平均SSIM值,表明本文算法在不同強度的噪聲環(huán)境下,去噪性能整體效果最優(yōu).
表3 不同算法在Set12 數(shù)據(jù)集上的PSNR 值(dB)
表4 不同算法在Set12 數(shù)據(jù)集上的SSIM 值
表5 不同算法在BSD68 數(shù)據(jù)集上的PSNR 值(dB)
表6 不同算法在BSD68 數(shù)據(jù)集上的SSIM 值
圖6 選取了Set12 數(shù)據(jù)集中的5 幅圖像,在5 種不同噪聲等級下,通過不同的算法對含噪聲圖像進行去噪,每一張去噪后的圖片給出了局部放大效果,圖片中的白框區(qū)域為放大區(qū)域,圖片右下角為局部細節(jié)放大圖,由圖可見,本文提出的方法在去噪時很好地保留了圖像的紋理細節(jié),有效地較少邊界偽影和邊緣細節(jié)損失.
圖6 不同算法不同噪聲等級下數(shù)據(jù)集Set12 的部分去噪圖片
本文針對圖像去噪存在不能充分提取圖像特征導致圖像細節(jié)丟失且收斂時間過長的問題,提出了一種基于殘差密集塊的卷積神經(jīng)網(wǎng)絡圖像去噪方法,該模型通過引入密集連接殘差塊并添加Leaky ReLU 激活函數(shù)操作進一步提高網(wǎng)絡性能,能夠有效去除不同等級強度的噪聲,同時利用PSNR和SSIM值進行網(wǎng)絡性能評估.與經(jīng)典圖像去噪算法相比較,實驗結果顯示,本文提出算法的PSNR和SSIM均有明顯的提升,本文算法提高了圖像去噪的性能,提升圖像的紋理細節(jié)信息,隨著殘差結構的加入,網(wǎng)絡訓練的過程也隨之加快,與此同時減少了邊界偽影,但本文所提出的算法針對高噪聲環(huán)境下的圖像進行去噪時,依然存在圖像細節(jié)丟失問題,針對該問題,后續(xù)將針對該網(wǎng)絡模型作進一步的研究.此外,結合真實場景,例如醫(yī)學成像、遙感圖像產(chǎn)生的真實噪聲問題,需要繼續(xù)研究.