姜旭,趙榮彩*,劉勇杰,宋雯琦
(1.河南省超級計(jì)算中心,鄭州 450053;2.鄭州大學(xué)信息工程學(xué)院,鄭州 450001)
圖像去噪作為計(jì)算機(jī)視覺領(lǐng)域的經(jīng)典問題,其任務(wù)目標(biāo)是盡可能去除或消除外界噪聲的同時保留原圖像的清晰細(xì)節(jié)。本質(zhì)則是減少數(shù)字圖像中噪聲的過程,對原始清晰的圖像進(jìn)行恢復(fù)和重建。生活中由于圖像在采集、傳輸?shù)冗^程中,因?yàn)榄h(huán)境、采集設(shè)備、人為等等因素的影響[1],圖像難免會被噪聲不同程度地污損,因此圖像去噪任務(wù)顯得非常重要。此外,圖像去噪任務(wù)對于醫(yī)療、軍工、光子等領(lǐng)域[2]也有非常重要的研究價值,處理后的圖像質(zhì)量好壞將直接影響后續(xù)任務(wù)的開展情況。
目前圖像去噪的方法大致分為兩類:基于傳統(tǒng)算法以及基于深度學(xué)習(xí)的算法?;趥鹘y(tǒng)算法的有雙邊濾波、高斯濾波、中值濾波、大小波變換等方法。上述方法都是在去噪的基礎(chǔ)上盡可能地使得圖像特征平滑以保留更多的邊緣細(xì)節(jié),所處理過的圖像經(jīng)常會模糊,原圖的邊緣細(xì)節(jié)紋理保留得也不是很清晰,效果較差。傳統(tǒng)方法中最具有代表性的方法是塊匹配三維協(xié)同濾波(block matching and 3D filtering,BM3D)。該方法是一種統(tǒng)計(jì)學(xué)習(xí)的方法[3],該算法把圖像分成一定大小的塊,然后把具有相似特性的塊進(jìn)行匹配形成一個3D陣列,將3D變換域中的收縮算子用于該3D陣列[4],通過逆變換得到去噪后的圖像。雖然傳統(tǒng)的方法在圖像去噪任務(wù)上取得了不錯的效果,但傳統(tǒng)方法的弊端也暴露了出來:針對特定場景下的去噪測試,需要逐一手動設(shè)置參數(shù)、優(yōu)化改進(jìn)方法等。隨著深度學(xué)習(xí)的發(fā)展,利用神經(jīng)網(wǎng)絡(luò)可以克服這些傳統(tǒng)方法所帶來的弊端。
基于深度學(xué)習(xí)的方法大都屬于外部先驗(yàn)法。其中成功且經(jīng)典的有:2017年,Zhang等[5]提出的卷積神經(jīng)網(wǎng)絡(luò)(denoising convolutional neural networks-DnCNN),DnCNN利用了殘差學(xué)習(xí)以及批量歸一化(batch normalization,BN)實(shí)現(xiàn)了網(wǎng)絡(luò)去噪,解決了深層網(wǎng)絡(luò)梯度爆炸彌散問題。2018年,Zhang等[6]提出了一種更加快速且靈活的去噪卷積神經(jīng)網(wǎng)絡(luò)(a fast and flexible solution for CNN based image-denoising,FFDNet)。FFDNet可以處理更為復(fù)雜的噪聲,網(wǎng)絡(luò)可以進(jìn)行盲去噪。2014年,Goodfellow等[7]提出了生成對抗網(wǎng)絡(luò)(generative adversarial networks,GAN),越來越多的研究者利用GAN網(wǎng)絡(luò)來實(shí)現(xiàn)圖像去噪。2018年,Chen等[8]等通過使用GAN生成噪聲圖像與干凈的圖像混成數(shù)據(jù)集,訓(xùn)練神經(jīng)網(wǎng)絡(luò)實(shí)現(xiàn)去噪任務(wù)。
雖然上述的傳統(tǒng)去噪方法與深度學(xué)習(xí)的去噪算法都可以實(shí)現(xiàn)去噪任務(wù),還原出較為清晰的原始圖像。但得到的圖像在視覺上看起來過于平滑,紋理特征顯示的不明顯,因此,現(xiàn)設(shè)計(jì)一種基于深度學(xué)習(xí)下的去噪算法。在U-Net網(wǎng)絡(luò)結(jié)構(gòu)的基礎(chǔ)上進(jìn)行改進(jìn),同時使用VGG16網(wǎng)絡(luò)對處理過后的圖像進(jìn)行邊緣特征提取,以達(dá)到更好的視覺效果。實(shí)驗(yàn)表明,使用所提出的算法圖像效果在視覺上優(yōu)于前面提出的幾種算法,更加清晰,圖像的紋理細(xì)節(jié)更加豐富和真實(shí),提高重建后圖像的整體質(zhì)量。
基于深度學(xué)習(xí)下的全卷積神經(jīng)網(wǎng)絡(luò)(full convolution neural network,F(xiàn)CN)[9]去噪模型其泛用性與去噪效果好壞依賴于訓(xùn)練數(shù)據(jù)圖像與真實(shí)被污損的噪聲圖像之間相似程度。使用泊松高斯噪聲來模擬實(shí)際噪聲形成的過程(Poissonian-Gaussian noise)。對于高斯、泊松噪聲來講,其屬于加性噪聲[10]。
按照噪聲組成來說,假定:f(x,y)表示給定的原始圖像,g(x,y)表示圖像集合,n(x,y)表示噪聲項(xiàng),則加性噪聲可表示為
f(x,y)=g(x,y)+n(x,y)
(1)
從式(1)中可以看出,這種噪聲是直接加在原始圖像上面的。如高斯噪聲、椒鹽噪聲[11]等。如果已知n(x,y)的形成過程,式(1)做減法即可獲得原始圖像信號,但這種方法往往是不現(xiàn)實(shí)的。
由于大多噪聲在數(shù)學(xué)理想化中都可認(rèn)為是近似滿足高斯分布,因此高斯噪聲模型是一種比較常用的噪聲模型。假定隨機(jī)變量z滿足高斯噪聲分布,則其概率密度函數(shù)為
(2)
式(2)中:z為圖像的灰度值;μ為隨機(jī)變量z的均值或期望值;σ為z的標(biāo)準(zhǔn)差。而對于泊松噪聲來講,如果z為0,1,2,…隨機(jī)變量,則泊松噪聲的概率密度函數(shù)為
(3)
z的均值和方差為
μ=σ2=λ
(4)
目前大多數(shù)基于噪聲模型建模后的圖像去噪算法公式為
(5)
1.2.1 原始的U-Net網(wǎng)絡(luò)結(jié)構(gòu)
所提出的改進(jìn)算法是在原始的U-Net網(wǎng)絡(luò)結(jié)構(gòu)上進(jìn)行改進(jìn)的。圖1即為原始的U-Net網(wǎng)絡(luò)結(jié)構(gòu):采用2D U-Net的架構(gòu),左側(cè)為編碼過程(下采樣)右側(cè)為解碼過程(上采樣),初始輸入為256×256的RGB圖像,在編碼過程中,使用大小為3×3的卷積核,2×2的maxpool對原圖像進(jìn)行降維編碼處理。具體來說是在進(jìn)行Conv卷積后,使用ReLU作為激活函數(shù)接池化(maxpooling)的操作。在解碼過程(上采樣階段),使用大小為3×3的反卷積核,其中upscale代表上采樣操作。解碼過程中,網(wǎng)絡(luò)接收到原圖像通過Deconv反卷積操作后將Feature Map的尺寸大小翻倍,同時與左側(cè)的Feature Map進(jìn)行合并,最終在網(wǎng)絡(luò)結(jié)構(gòu)的最后一層解碼出處理過后的圖像,大小仍為256×256。選用的U型網(wǎng)絡(luò)與通用的U-Net網(wǎng)絡(luò)總體架構(gòu)是一致的,在編碼與解碼過程中略有不同。
圖1 原始的U-Net網(wǎng)絡(luò)結(jié)構(gòu)
1.2.2 U-Net++跳躍連接結(jié)構(gòu)
改進(jìn)使用的是U-Net++跳躍連接結(jié)構(gòu),U-Net++拓?fù)浣Y(jié)構(gòu)如圖2所示。
圖2 U-Net++拓?fù)浣Y(jié)構(gòu)
由圖2可知,直觀上來看U-Net++是將原始的U-Net網(wǎng)絡(luò)每一層的任意兩個節(jié)點(diǎn)之間都進(jìn)行連接,同時不同深度的網(wǎng)絡(luò)節(jié)點(diǎn)之間也進(jìn)行了連接。如果單從一層網(wǎng)絡(luò)結(jié)構(gòu)來看,其與文獻(xiàn)[5]中提出的DenseNet網(wǎng)絡(luò)結(jié)構(gòu)十分相似,因此,稱這種結(jié)構(gòu)為U-Net++密集連接結(jié)構(gòu)。實(shí)際上,U-Net++網(wǎng)絡(luò)結(jié)構(gòu)還可以往上繼續(xù)拓展,圖2中只給出了3層這樣的結(jié)構(gòu)圖。
使用U-Net++而并非傳統(tǒng)的U-Net網(wǎng)絡(luò)是因?yàn)橄噍^于U-Net網(wǎng)絡(luò),U-Net++有兩個優(yōu)點(diǎn):一是使用U-Net++網(wǎng)絡(luò)結(jié)構(gòu)可以避免在面向不同圖像處理任務(wù)時網(wǎng)絡(luò)深度的選擇,即面向不同任務(wù)圖像特征提取感受野的選擇,加入深監(jiān)督機(jī)制即可實(shí)現(xiàn)。同時使得剪枝操作(簡化結(jié)構(gòu),縮減參數(shù))成為可能。二是使用U-Net++跳躍連接應(yīng)用到原U-Net網(wǎng)絡(luò)中可以減少編碼器與解碼器特征映射之間的語義差距,在面向圖像去噪任務(wù)時,優(yōu)化任務(wù)可以更好地被處理。
1.2.3 使用U-Net++結(jié)構(gòu)
改進(jìn)后的U-Net網(wǎng)絡(luò)結(jié)構(gòu)如圖3所示,在原網(wǎng)絡(luò)的基礎(chǔ)上使用更多的跳躍連接,使用密集連接的結(jié)構(gòu)目的是讓新網(wǎng)絡(luò)在圖像特征信息編碼提取與解碼恢復(fù)的過程中,任務(wù)更容易被處理。
圖3 跳躍連接結(jié)構(gòu)
圖3中,第一層、第二層、第三層在原始U-Net網(wǎng)絡(luò)中進(jìn)行卷積和池化操作,使用大小為3×3的卷積核,2×2的池化,卷積步長Stride1。其中Output 1、Output 2、Output 3、Output 4與密集連接的下采樣第一層、第二層、第三層之間做上擴(kuò)展,去卷積化操作。
從圖3可以看出,U-Net++相較于U-Net結(jié)構(gòu)最大的區(qū)別就是在任意兩層生成的Output特征圖像之間采用了跳躍連接結(jié)構(gòu)。
由于目前現(xiàn)有的算法在單一去噪任務(wù)時,處理后的圖像邊緣紋理細(xì)節(jié)保留的不是很好,因此加入了以VGG16為網(wǎng)絡(luò)架構(gòu)的邊緣信息提取模塊。加入VGG16邊緣信息提取模塊主要是對去噪網(wǎng)絡(luò)處理后的圖像再進(jìn)行特征提取學(xué)習(xí),目的則是恢復(fù)出更清晰的圖像,同時,邊緣模塊還可以反傳去噪后的圖像經(jīng)過多層提取網(wǎng)絡(luò)的損失參數(shù),用來反向優(yōu)化去噪網(wǎng)絡(luò)的性能。邊緣模塊具體網(wǎng)絡(luò)參數(shù)配置如表1所示。
如表1所示,以VGG16為網(wǎng)絡(luò)架構(gòu)的多特征融合網(wǎng)絡(luò)卷積核大小均為3×3,經(jīng)過2層進(jìn)行一次池化(maxpooling)操作,同去噪網(wǎng)絡(luò)一樣,包括卷積(conv)操作,使用ReLU作為激活函數(shù)接池化操作。
表1 邊緣提取模塊網(wǎng)絡(luò)參數(shù)
文獻(xiàn)[13-14]中,分別使用了CNN與FMN進(jìn)行了邊緣特征提取,受此影響,邊緣提取網(wǎng)絡(luò)在使用卷積進(jìn)行特征提取后,對特征圖進(jìn)行多次池化,池化后,輸入圖像尺寸大小減半。隨后對這些特征圖進(jìn)行特征學(xué)習(xí)、上采樣,然后串接成最終的特征向量,恢復(fù)出處理后的圖像。對于圖像去噪任務(wù),全局特征通常是與整體輪廓相關(guān)的信息,而局部特征則是圖像的細(xì)節(jié)紋理,要想對噪聲進(jìn)行很好的去除,這兩部分信息都是必需的。
2.1.1 訓(xùn)練集
數(shù)據(jù)訓(xùn)練集使用的ImageNet是數(shù)據(jù)集中的Val40K,即Imanet-val 40K。其中ImageNet數(shù)據(jù)集是計(jì)算機(jī)視覺領(lǐng)域一個較大的公共數(shù)據(jù)集,其被廣泛用于視覺領(lǐng)域的比賽應(yīng)用中,在針對普通圖片做去噪任務(wù)時,選取的是Val40K中的數(shù)據(jù)集,選取44 283張圖片作為訓(xùn)練集,BSD300數(shù)據(jù)集是超分辨率任務(wù)常用的數(shù)據(jù)集,其中包括200張訓(xùn)練集圖片與100張測試集圖片。
2.1.2 測試集
用于測試本文算法效果的測試集分別選取的是Set5、Set12、Kodak、CBSD68數(shù)據(jù)集。使用多類型的圖像數(shù)據(jù)進(jìn)行測試可以更好地模擬真實(shí)場景下的去噪效果。
圖像質(zhì)量的好壞可以用測得的圖像峰值信噪比(peak signal to noise ratio,PSNR)與結(jié)構(gòu)相似性(structural similarity,SSIM)進(jìn)行判定,目前在圖像去噪任務(wù)中均使用這兩種客觀評估方法。PSNR和SSIM的數(shù)值越大就代表圖像質(zhì)量越好,越清晰。反之?dāng)?shù)值小則代表圖像模糊,視覺效果差[15]。
PSNR為圖像處理領(lǐng)域最常用的評價指標(biāo),在均方誤差基礎(chǔ)上求得,可表示為
(6)
式(6)中:MAXI為圖像像素的最大值;MSE為M×N大小的圖像與處理后圖像之間的均方誤差。
SSIM是通過比較圖像結(jié)構(gòu)信息改變來判斷圖像的失真程度。其定義為
(7)
式(7)中:μikμik′、σikσik′分別為圖像k與kr以第i個像素為中心的窗口中平均值與標(biāo)準(zhǔn)差;NR為圖片數(shù)量;a1、a2為常數(shù),分別為(0.01L)2、(0.03L)2;L為圖像的動態(tài)范圍[16]。
實(shí)驗(yàn)平臺為國家超級計(jì)算鄭州中心超算系統(tǒng),實(shí)驗(yàn)在NVIDIA Tesla P100 16GB機(jī)器上運(yùn)行。CUDA9.1,CUDANN7.0的硬件環(huán)境以及以TensorFlow相關(guān)的庫為框架搭建,以Python為編寫語言的軟件環(huán)境。
輸入圖片為256×256大小的RGB圖像,一共44 283張,實(shí)驗(yàn)的批尺寸(batch-size)設(shè)置為1 107,整個訓(xùn)練流程迭代輪數(shù)(epoch)設(shè)置為100,學(xué)習(xí)率(learning-rate)設(shè)置為0.001。損失函數(shù)設(shè)置為L2損失函數(shù),訓(xùn)練流程中每迭代10輪進(jìn)行一次模型保存操作。實(shí)驗(yàn)優(yōu)化過程選擇Adam優(yōu)化器,整個實(shí)驗(yàn)訓(xùn)練時長共約40 h。
為了探究不同程度噪聲對實(shí)驗(yàn)結(jié)果的影響,使用的加性噪聲Poissonian-Gaussian noise模型中,噪聲水平σ分別設(shè)置為25、30、35、45、50。
3.3.1 不同方法下去噪效果
去噪方法與目前常見的經(jīng)典去噪方法(或模型)在不同噪聲水平下對測試數(shù)據(jù)集的PSNR和SSIM數(shù)值對比如表2所示。同時對使用的去噪方法與文獻(xiàn)[17]中所用方法進(jìn)行了對比,圖4和圖5分別對應(yīng)的是在高斯噪聲σ為25、泊松噪聲λ為30的影響下,本文算法測得BSD300測試集上的PSNR數(shù)值。表3為兩種方法對比情況。
表2 不同噪聲水平下各算法去噪結(jié)果比較
圖4 高斯噪聲σ=25下的PSNR數(shù)值與L2曲線
圖5 泊松噪聲λ=30下的PSNR數(shù)值與L2曲線
表3 本文算法與文獻(xiàn)[17]中算法去噪結(jié)果比較
3.3.2 實(shí)驗(yàn)量化結(jié)果分析
表2為在不同噪聲水平下各算法去噪結(jié)果比較,從表2中可以看到不同方法下對測試集進(jìn)行測評的結(jié)果。最后一欄為使用本文算法所測得的PSNR和SSIM數(shù)值,由表2可以看到,傳統(tǒng)去噪方法下的BM3D算法在測試集中所測得的PSNR和SSIM數(shù)值均小于深度學(xué)習(xí)下的幾種算法??梢?,在去噪任務(wù)上使用深度學(xué)習(xí)下的方法更加具有優(yōu)勢。表2中,除了在Set12數(shù)據(jù)集下,其他數(shù)據(jù)集所測得的PSNR和SSIM數(shù)值呈現(xiàn)逐漸增加的趨勢,尤其在CBSD68數(shù)據(jù)集下效果極為明顯。使用本文算法所測試的PSNR和SSIM數(shù)值均高于傳統(tǒng)方法下的BM3D算法、深度學(xué)習(xí)下的DnCNN和經(jīng)典的FFDNet算法。對文獻(xiàn)[17]中所用方法與本文算法進(jìn)行了對比,結(jié)果如表3所示,在加性高斯白噪聲σ=25情況下,使用本文算法進(jìn)行去噪,在Kodak、BSD300、Set14這3個測試數(shù)據(jù)集下進(jìn)行測試,得到的去噪效果優(yōu)于文獻(xiàn)[17]算法。在泊松噪聲下,明顯是劣于文獻(xiàn)[17]中的。由于加性高斯白噪聲可以很好地模擬真實(shí)噪聲,對測試集下圖片使用白高斯噪聲加噪,然后使用不同去噪方法進(jìn)行對比實(shí)驗(yàn),結(jié)果如圖6所示,可以看到本文算法的去噪后圖片效果是優(yōu)于其他幾種去噪方法的。
圖6 在噪聲水平σ=25下不同方法在測試集上的去噪效果對比圖
3.3.3 算法效率分析
除了對不同方法下的去噪效果進(jìn)行了對比,還對不同方法下所測得的時間進(jìn)行了評估。具體結(jié)果如表4所示。
表4 不同算法下各平均耗時對比結(jié)果比較
測試使用的是512×512像素大小的圖像,均來自驗(yàn)證集。測試時,在相同配置的不同機(jī)器上進(jìn)行運(yùn)行。由表4可見,傳統(tǒng)的CBM3D算法運(yùn)行時間最長,單幅圖片去噪為6.5 s,DnCNN和FFDNet運(yùn)行時長分別為0.8 s和0.3 s。本文算法最大運(yùn)行時長為1 s,最小為0.8 s。
在運(yùn)行效率上,本文算法和DnCNN基本上相一致,由于FFDNet[18]旨在快速去噪,所以運(yùn)行時間上較短??傮w來說,本文算法和經(jīng)典算法DnCNN和FFDNet均可在1 s內(nèi)完成單張圖片去噪任務(wù),且本文算法在圖片質(zhì)量上更加清晰,算法效率較高。
提出一種改進(jìn)U-Net神經(jīng)網(wǎng)絡(luò)的圖像去噪算法,使用了U-Net++中的跳躍連接結(jié)構(gòu),密集連接的U型去噪網(wǎng)絡(luò)可以減少編碼器與解碼器特征映射之間的語義差距,以便還原出更清晰的圖像,同時還加入了基于VGG16設(shè)計(jì)的邊緣提取模塊,處理去噪后的圖像的同時反向優(yōu)化U型去噪網(wǎng)絡(luò),從而更好地還原出圖像的紋理細(xì)節(jié)問題。根據(jù)實(shí)驗(yàn)結(jié)果中數(shù)值的顯示,使用本文算法在Set5、Set12、Kodak、CBSD68數(shù)據(jù)集上評價指標(biāo)PSNR和SSIM數(shù)值均優(yōu)于目前具有代表性的幾種算法,而且在圖像上紋理細(xì)節(jié)恢復(fù)的更加明顯,圖像質(zhì)量有所提升。
雖然本文算法測得的效果優(yōu)于現(xiàn)有的算法,但是在一些圖像上(如Set12數(shù)據(jù)集)效果不夠明顯,后續(xù)會針對通用場景下進(jìn)行研究,在圖像去噪任務(wù)上進(jìn)行探索。