周思雨,儲(chǔ)岳中,張學(xué)鋒
(安徽工業(yè)大學(xué) 計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院,馬鞍山 243032)
在燒結(jié)礦生產(chǎn)中,燒結(jié)礦的FeO 含量是燒結(jié)礦強(qiáng)度的一個(gè)關(guān)鍵因素. 當(dāng)FeO 含量較高時(shí),會(huì)導(dǎo)致燒結(jié)礦還原性能變差,從而影響燒結(jié)礦的強(qiáng)度. 一個(gè)燒結(jié)礦的氣孔數(shù)量和面積可以判斷其FeO 含量,因此檢測(cè)燒結(jié)礦氣孔數(shù)量和面積是很重要的研究方向. 傳統(tǒng)的檢測(cè)氣孔數(shù)量和面積的方法是通過人工進(jìn)行的,由于燒結(jié)礦數(shù)量多,導(dǎo)致工作量大,使得檢測(cè)困難. 因此,很多小型企業(yè)只是對(duì)氣孔進(jìn)行粗略的觀察,并沒有進(jìn)行正規(guī)檢測(cè)和記錄.
隨著科學(xué)技術(shù)的發(fā)展,自動(dòng)化以及信息化等技術(shù)逐步應(yīng)用到工業(yè)領(lǐng)域中. 各種圖像分割技術(shù)應(yīng)用到工業(yè)中,文獻(xiàn)[1,2]都是利用圖像分割,對(duì)礦石進(jìn)行粒度檢測(cè). 文獻(xiàn)[3]利用圖像分割技術(shù)進(jìn)行鋼鐵的缺陷檢測(cè). 針對(duì)傳統(tǒng)圖像分割,常用的方法有閾值分割[4]、邊緣檢測(cè)[5]、形態(tài)學(xué)分水嶺算法[6]、Hough 變換算法和輪廓查找算法[7]等. 由于燒結(jié)礦氣孔的圖像存在氣孔形狀不規(guī)則、輪廓不清晰、氣孔相互粘連,增加了氣孔的分割難度,從而出現(xiàn)了很多改進(jìn)傳統(tǒng)的分割算法的研究,如針對(duì)粘連圖像進(jìn)行分水嶺算法的改進(jìn)[8]. 近年來,運(yùn)用卷積神經(jīng)網(wǎng)絡(luò)對(duì)圖像進(jìn)行分割,具有很大的優(yōu)勢(shì)并取得了較大的進(jìn)展[9,10]. Shelhamer 等[11]提出的全卷積網(wǎng)絡(luò)(FCN)使得語義分割得到了快速發(fā)展,該網(wǎng)絡(luò)相比傳統(tǒng)的CNN 分割的網(wǎng)絡(luò)更加高效,減少了像素塊帶來的冗余存儲(chǔ)和計(jì)算. Ronneberger 等[12]提出的UNet網(wǎng)絡(luò)主要用于生物醫(yī)學(xué)圖像的分割,使用小數(shù)據(jù)集訓(xùn)練得到不錯(cuò)的結(jié)果,使得很多研究者關(guān)注. Zhou 等[13]提出了UNet++使用密集跳躍連接,通過疊加不同層次的特征,減小了編碼特征和解碼特征之間的語義鴻溝.仝真等[14]提出結(jié)合殘差網(wǎng)絡(luò)的方式,形成Res-UNet 網(wǎng)絡(luò)進(jìn)行圖像輪廓優(yōu)化. 文獻(xiàn)[15]結(jié)合特征層密集連接的方式,提出Dense-UNet 模型用以改善分割性能. 這些網(wǎng)絡(luò)都是在UNet 網(wǎng)絡(luò)基礎(chǔ)上進(jìn)行改進(jìn),存在著在上采樣時(shí)冗余和丟失部分特征,不適用于燒結(jié)礦氣孔細(xì)節(jié)特征分割.
為了獲得更高的準(zhǔn)確度,本文提出先對(duì)原始燒結(jié)礦氣孔圖像進(jìn)行OpenCV 圖像處理[16–18]后進(jìn)行圖像分割. 為減少燒結(jié)礦圖像分割氣孔信息的丟失,在原始的UNet 上結(jié)合殘差連接和拼接連接的思想提出改進(jìn)的編碼器,加強(qiáng)了氣孔輪廓邊緣特征的提取.
由于受到現(xiàn)場(chǎng)的光線、灰塵等因素干擾,需要對(duì)圖像進(jìn)行去噪處理. 為減少干擾,只進(jìn)行單個(gè)燒結(jié)礦的采集和處理. 圖像預(yù)處理的過程如圖1 所示.
圖1 圖像預(yù)處理的過程
通過對(duì)燒結(jié)礦圖像進(jìn)行像素相加處理,如圖2(a),消除部分噪聲,提高像素亮度. 使用非線性濾波器中值濾波處理,如圖2(b),中值濾波對(duì)于消除圖像中的隨機(jī)噪聲和脈沖噪聲具有較好的效果,又能很好的保護(hù)細(xì)節(jié)信息[19]. 之后將圖像二值化,如圖2(c),增強(qiáng)了燒結(jié)礦圖像中氣孔和其他地方的對(duì)比度,看出燒結(jié)礦圖像上仍存在噪聲信息. 最后通過運(yùn)用形態(tài)濾波,開運(yùn)算和閉運(yùn)算聯(lián)合,有效的去除二值圖像中存在的前景和背景噪聲,并在一定程度上平滑了邊界,如圖2(d).
圖2 圖像預(yù)處理
本實(shí)驗(yàn)利用傳統(tǒng)的邊緣檢測(cè)算法和分水嶺分割算法對(duì)燒結(jié)礦圖像進(jìn)行分割,基于邊緣檢測(cè)的圖像分割算法是通過檢測(cè)包含不同區(qū)域的邊緣來解決分割問題,是最先想到也是研究最多的方法之一. 分水嶺算法是一種基于拓?fù)淅碚摰臄?shù)學(xué)形態(tài)學(xué)的分割方法. 通過實(shí)驗(yàn),邊緣檢測(cè)算法對(duì)圖像中的噪聲進(jìn)行了分割,將部分背景也分割成氣孔. 分水嶺算法存在著過度分割圖像的現(xiàn)象. 利用形態(tài)學(xué)的處理,結(jié)合開運(yùn)算和閉運(yùn)算的操作,減少噪聲再進(jìn)行分水嶺分割,仍然存在燒結(jié)礦氣孔像素信息相近的背景進(jìn)行了分割. 開運(yùn)算是對(duì)圖像先進(jìn)行腐蝕然后膨脹,閉運(yùn)算是對(duì)圖像先進(jìn)行膨脹后進(jìn)行腐蝕. 式(1)是開運(yùn)算的定義. 式(2)是閉運(yùn)算的定義.
其中,X代表原圖,Y代表結(jié)構(gòu)元,⊙是腐蝕操作,⊕是膨脹操作.
如圖3 所示. 由于傳統(tǒng)的分割方法需要找到最佳閾值,當(dāng)分割不同燒結(jié)礦圖像時(shí),都要改變閾值才能得到更好的效果,這個(gè)過程極其復(fù)雜. 傳統(tǒng)分割算法不具有靈活性,導(dǎo)致分割出來的氣孔誤差率較大. 所以不能很好地適用于燒結(jié)礦氣孔的分割.
圖3 傳統(tǒng)圖像分割
UNet 網(wǎng)絡(luò)最早是應(yīng)用在醫(yī)學(xué)影像分割中,相比于另外幾種經(jīng)典的語義分割網(wǎng)絡(luò)具有訓(xùn)練數(shù)據(jù)量少并且精度高的特點(diǎn),符合燒結(jié)礦氣孔分割的要求. 圖4 為UNet 網(wǎng)絡(luò)結(jié)構(gòu). 網(wǎng)絡(luò)由編碼器和解碼器兩個(gè)部分組成.編碼部分是通過Conv3×3 卷積、ReLU 激活函數(shù)和2×2 最大池化對(duì)輸入圖片進(jìn)行降維和特征提取,使得特征圖的尺寸逐漸減小、特征維度逐漸增加. 解碼部分通過對(duì)特征圖進(jìn)行2×2 轉(zhuǎn)置卷積以及1×1 卷積,使特征圖片尺寸增加,維度增加,加強(qiáng)了氣孔特征的細(xì)節(jié)提取. 解碼器與編碼器之間通過跳躍連接進(jìn)行特征圖融合,使得不同層氣孔特征融合連接到解碼相對(duì)應(yīng)層中,其中淺層特征用來分割氣孔,深層特征用來定位氣孔的位置,二者的有效結(jié)合有助于增加氣孔特征的多樣性. 因此,UNet 網(wǎng)絡(luò)非常適用于分割燒結(jié)礦氣孔圖像.
圖4 UNet 網(wǎng)絡(luò)結(jié)構(gòu)
為獲取更多的燒結(jié)礦氣孔的信息和特征,可以通過加深網(wǎng)絡(luò)來實(shí)現(xiàn). 用一種“短路” (shortcut connections)的模型來幫助多層的非線性的神經(jīng)網(wǎng)絡(luò)的擬合[20].結(jié)合殘差結(jié)構(gòu)思想解決網(wǎng)絡(luò)加深所帶來網(wǎng)絡(luò)退化的問題,使網(wǎng)絡(luò)可以加深到更深的層次,利用到更多的信息.
當(dāng)輸入為xl時(shí),學(xué)習(xí)殘差是F(xl),xl+1表示下一層輸入. 當(dāng)殘差為0 時(shí),此時(shí)堆積層僅僅做了恒等映射,此時(shí)把該處的深度忽略掉,這樣保證網(wǎng)絡(luò)性能至少不會(huì)下降. 但是實(shí)際上殘差不會(huì)為0,這也會(huì)使得堆積層在輸入特征基礎(chǔ)上能學(xué)習(xí)到新的特征,從而擁有更好的性能. 如果殘差映射F(xl)的結(jié)果的維度與跳躍連接xl的維度不同,對(duì)xl進(jìn)行升維操作,兩個(gè)維度相同,然后進(jìn)行相加計(jì)算. 如圖5 所示.
圖5 殘差結(jié)構(gòu)
殘差結(jié)構(gòu)可以認(rèn)為是燒結(jié)礦氣孔圖像的信息,且圖像的信息可以直接進(jìn)行傳遞,所以在卷積層上學(xué)到的東西就比較少,只是學(xué)習(xí)特殊的表達(dá)特征,而全部的信息是可以用殘差的另一個(gè)恒等式保存下來,一定程度上解決網(wǎng)絡(luò)退化問題,提升了梯度的反向傳播,使得網(wǎng)絡(luò)更容易訓(xùn)練. 所以殘差結(jié)構(gòu)使得網(wǎng)絡(luò)需要學(xué)習(xí)的燒結(jié)礦氣孔特征變少,容易學(xué)習(xí).
由于殘差連接可以通過前后層特征相加實(shí)現(xiàn)特征重用,使訓(xùn)練過程中梯度的反向傳播更容易. 為使燒結(jié)礦氣孔特征不容易丟失,可以采用拼接連接,當(dāng)提取到新的特征的時(shí)候,拼接前面層特征. 所以,為了使燒結(jié)礦氣孔能更加準(zhǔn)確地分割,本文提出了一種結(jié)合殘差拼接連接思想的模塊,在原始UNet 網(wǎng)絡(luò)的解碼器的基礎(chǔ)上,在進(jìn)行一次卷積過后,將其結(jié)果直接與下一次卷積結(jié)果進(jìn)行拼接,使氣孔特征更少地丟失,提取到更多的氣孔特征. 加入特征映射,將提取的原始?xì)饪滋卣骱托碌臍饪滋卣鬟M(jìn)行多尺度融合,使用1×1 的卷積進(jìn)行相加操作. 最后將特征融合學(xué)習(xí)得到新特征進(jìn)行輸出.
其中,X1和X2是通過BN (batch normalization)、ReLU、3×3 卷積操作得到的結(jié)果,C(·)是拼接函數(shù). 通過將X1和X2特征進(jìn)行拼接,能得到更多的燒結(jié)礦氣孔特征,且X1直接與輸出連接,在反向傳播過程中,使這部分傳遞的更容易. 輸入通過1×1 卷積操作,使與前面輸出維度相同,然后進(jìn)行相加計(jì)算,最后輸出結(jié)果,如圖6.
圖6 擴(kuò)展連接結(jié)構(gòu)
UNet 網(wǎng)絡(luò)能夠高效地利用不同層的特征,但是作為獨(dú)立模型使用時(shí)還存在著很多不足,每一層提取特征使用了兩次Conv3×3 卷積 ,很多氣孔的細(xì)節(jié)信息丟失,分割效果較差,網(wǎng)絡(luò)層數(shù)還較淺,提取氣孔特征較少,使得特征學(xué)習(xí)次數(shù)也有限,表達(dá)性不強(qiáng). 本文使用改進(jìn)的殘差拼接連接結(jié)構(gòu)作為特征提取模塊,結(jié)合UNet 網(wǎng)絡(luò)的設(shè)計(jì)思路,網(wǎng)絡(luò)結(jié)構(gòu)如圖7 所示. 采用改進(jìn)的殘差拼接結(jié)構(gòu)Block 移植到編碼器部分,進(jìn)行燒結(jié)礦氣孔特征的提取. 操作過程如下: 在特征提取部分,將得到的尺寸為512×512 燒結(jié)礦氣孔圖像輸入到改進(jìn)的UNet 網(wǎng)絡(luò)特征提取模塊中,采用不同Block 模塊數(shù)量,加深網(wǎng)絡(luò),形成多層特征融合,學(xué)習(xí)到更多的新特征,提取了更高級(jí)的燒結(jié)礦特征. 利用上采樣對(duì)燒結(jié)礦氣孔圖像進(jìn)行還原圖像分辨率,使用特征復(fù)制拼接操作將特征提取部分和上采樣部分相同尺度的特征進(jìn)行拼接融合. 上采樣部分的終層卷積使用Sigmoid 分類器目標(biāo)分類函數(shù),以提高學(xué)習(xí)效率,保證分類的準(zhǔn)確率.本文方法可以有效地解決UNet 燒結(jié)礦氣孔特征遺失的問題,減少網(wǎng)絡(luò)參數(shù)并且很大程度上防止梯度消失和爆炸.
圖7 改進(jìn)網(wǎng)絡(luò)架構(gòu)
本文利用工業(yè)相機(jī)采集了尺寸為3024 像素×4032像素的燒結(jié)礦圖像200 張,并挑選出100 張作為數(shù)據(jù)樣本. 為增加訓(xùn)練速度和效果,將燒結(jié)礦圖像裁剪成為512 像素×512 像素尺寸. 將數(shù)據(jù)集(100 張圖片)劃分為訓(xùn)練集、驗(yàn)證集和測(cè)試集,訓(xùn)練集用以訓(xùn)練模型,驗(yàn)證集用以對(duì)模型進(jìn)行調(diào)優(yōu)工作,測(cè)試集用以測(cè)試模型的性能. 利用 labelme 對(duì)數(shù)據(jù)樣本進(jìn)行標(biāo)注,制作標(biāo)簽集,樣本集與對(duì)應(yīng)的標(biāo)簽集即構(gòu)成了新的數(shù)據(jù)集. 圖8(a)是原圖,圖8(b)是通過人工分割氣孔,進(jìn)行標(biāo)注的標(biāo)簽圖像.
圖8 數(shù)據(jù)與標(biāo)簽
原始的燒結(jié)礦圖像樣本是進(jìn)行預(yù)處理過的數(shù)據(jù)集.為擴(kuò)充樣本的數(shù)量,對(duì)訓(xùn)練集和驗(yàn)證集進(jìn)行數(shù)據(jù)增強(qiáng).通過隨機(jī)旋轉(zhuǎn)、翻轉(zhuǎn)和鏡像等處理將數(shù)據(jù)集擴(kuò)充到200 張. 測(cè)試集不作處理. 用生成的樣本數(shù)據(jù)訓(xùn)練網(wǎng)絡(luò)模型,模型初始設(shè)置中網(wǎng)絡(luò)模型權(quán)重為隨機(jī)值,批量大小設(shè)置為2,采用Adam 作為模型的優(yōu)化器,學(xué)習(xí)率設(shè)置為0.000 01,訓(xùn)練批次設(shè)置為100,損失函數(shù)使用經(jīng)典的二分類交叉熵?fù)p失函數(shù),如式(6)所示.yi表示樣本i的label,正類為1,負(fù)類為0,pi表示樣本i預(yù)測(cè)為正類的概率根據(jù)訓(xùn)練集和驗(yàn)證集的損失,來判斷網(wǎng)絡(luò)模型是否收斂.
實(shí)驗(yàn)環(huán)境為Intel Xeon E5 v3 處理器,32 GB 內(nèi)存,NVIDIA GeForce RTX 2080 Ti 11 GB 顯卡,采用CUDA 10.0
架構(gòu),使用PyTorch 深度學(xué)習(xí)框架,Python 3.6 語言編寫.
本文為了對(duì)燒結(jié)礦氣孔分割網(wǎng)絡(luò)性能進(jìn)行評(píng)估,采用準(zhǔn)確率(Accuracy)和Dice 系數(shù)(Dice)、平均交并比(MIoU)來量化分析本文算法分割結(jié)果,計(jì)算公式如式(7)–式(9):
式(7)和式(8)中,Rgt表示ground truth 的氣孔區(qū)域面積;Rpred表示本文算法預(yù)測(cè)的分割結(jié)果;TP表示算法圖和標(biāo)準(zhǔn)圖中各個(gè)氣孔像素均為1 的像素點(diǎn)數(shù)量;TN為結(jié)果圖和標(biāo)準(zhǔn)圖中像素值均為0 的像素點(diǎn)數(shù)量;FP表示測(cè)試結(jié)果圖中像素值為1 而標(biāo)準(zhǔn)圖像素值為0 的像素點(diǎn)數(shù)量;FN表示結(jié)果圖像素值為0 且標(biāo)準(zhǔn)圖像素值為1 的像素點(diǎn)數(shù)量. 式(9)中pij表示真實(shí)值為i,被預(yù)測(cè)為j的數(shù)量,k+1是類別個(gè)數(shù)(包含空類).pii是真正的數(shù)量.pij和pji則分別表示假正和假負(fù).
由圖9 可知,改進(jìn)的UNet 網(wǎng)絡(luò)(UNetnext)相較原始UNet 網(wǎng)絡(luò),損失函數(shù)收斂的更快,并且收斂于更小的值,因此改進(jìn)后的UNet 網(wǎng)絡(luò)具有更高的訓(xùn)練效率.
圖9 網(wǎng)絡(luò)訓(xùn)練過程的損失函數(shù)
為了驗(yàn)證本算法的分割能力,本文選取傳統(tǒng)的UNet和具有密集連接的UNet++進(jìn)行對(duì)比實(shí)驗(yàn),其中各網(wǎng)絡(luò)的數(shù)據(jù)集和參數(shù)設(shè)置與本文算法相同,計(jì)算得到各模型網(wǎng)絡(luò)的精度評(píng)價(jià)指標(biāo).
從表1 評(píng)價(jià)指標(biāo)可知,UNet 網(wǎng)絡(luò)準(zhǔn)確率達(dá)到95.55%,UNet++網(wǎng)絡(luò)準(zhǔn)率達(dá)到95.73%,改進(jìn)網(wǎng)絡(luò)準(zhǔn)確率達(dá)到95.56%,可以看出,各網(wǎng)絡(luò)的準(zhǔn)確率都很高,可能是由于前景氣孔面積過小,導(dǎo)致分割的準(zhǔn)確率都高,并不能說明氣孔分割的準(zhǔn)確. UNet++網(wǎng)絡(luò)的MIoU和Dice系數(shù)高于原始的UNet 網(wǎng)絡(luò),說明密集連接提取到了更多的燒結(jié)礦的特征. 改進(jìn)的網(wǎng)絡(luò)模型的MIoU和Dice系數(shù)也優(yōu)于原始的UNet 網(wǎng)絡(luò),改進(jìn)的殘差拼接連接提取到了更多的特征.
表1 網(wǎng)絡(luò)模型的評(píng)價(jià)指標(biāo) (%)
為了測(cè)試本文改進(jìn)的模型網(wǎng)絡(luò)應(yīng)用效果更好,進(jìn)行可視化效果顯示,結(jié)果見圖10 所示. 每一行是一個(gè)燒結(jié)礦的樣本,圖10(a)為原始燒結(jié)礦圖像,圖10(b)為真值圖像,圖10(c)–圖10(e)分別為UNet、UNet++和本文網(wǎng)絡(luò)的分割結(jié)果.
從圖10 中虛線方框中可以看出,UNet 網(wǎng)絡(luò)可以大致分割出燒結(jié)礦的氣孔,但是由于氣孔輪廓模糊,很多氣孔都沒有分割出來,存在著欠分割現(xiàn)象,UNet++網(wǎng)絡(luò)由于存在密集連接使模型能在一定程度上提高了對(duì)細(xì)節(jié)部分的檢測(cè)能力,對(duì)輪廓模糊的氣孔進(jìn)行了分割,但是對(duì)氣孔輪廓分割不夠精細(xì),有些氣孔還存在了過分割的現(xiàn)象,相比,改進(jìn)的網(wǎng)絡(luò)結(jié)合了殘差和拼接連接,更準(zhǔn)確地分割燒結(jié)礦氣孔.
圖10 網(wǎng)絡(luò)分割效果
將前面的輪廓圖二值化. 利用 OpenCV 的相關(guān)算法獲取各個(gè)模型算法輪廓圖的參數(shù),利用findContours函數(shù)算法,檢測(cè)出每個(gè)圖像中的輪廓的個(gè)數(shù),由于燒結(jié)礦氣孔大小不一,統(tǒng)計(jì)沒有規(guī)律,設(shè)置一定的周長或面積的限制,排除特小的氣孔輪廓,再進(jìn)行氣孔個(gè)數(shù)統(tǒng)計(jì).
如表2 所示,通過與原始的圖像氣孔數(shù)量進(jìn)行比較,改進(jìn)網(wǎng)絡(luò)分割出來的燒結(jié)礦氣孔數(shù)量比OpenCV 改進(jìn)的分水嶺算法檢測(cè)出的氣孔數(shù)更加準(zhǔn)確,比UNet 和UNet++網(wǎng)絡(luò)分割出來的氣孔數(shù)量誤差率較小.
表2 各算法法分割氣孔的個(gè)數(shù)
本文通過傳統(tǒng)圖像分割算法分割燒結(jié)礦氣孔效果較差的不足,應(yīng)用圖像語義分割技術(shù),提出UNet 網(wǎng)絡(luò),結(jié)合殘差和拼接連接的思想,分割燒結(jié)礦氣孔圖像. 利用擴(kuò)展連接模塊將UNet 的每個(gè)子模塊替換,通過不斷增加提取模塊,進(jìn)行多層特征融合,使得網(wǎng)絡(luò)在保持原本空間信息的情況下,獲取更多氣孔的局部特征. 使用殘差連接,解決了網(wǎng)絡(luò)退化的問題. 使用拼接連接,保證了更多的特征信息. 該思想能夠有效分割出氣孔區(qū)域,有利于更好判斷氣孔的占比和數(shù)量,對(duì)于燒結(jié)礦的燒結(jié)質(zhì)量具有重要價(jià)值. 然而,由于燒結(jié)礦氣孔圖像樣本是人工標(biāo)注,氣孔圖像不清晰等諸多因素的影響,改進(jìn)后的網(wǎng)絡(luò)仍然存在氣孔邊緣輪廓不精確,錯(cuò)把背景當(dāng)成氣孔檢測(cè)出來等問題. 因此,后續(xù)模型的改進(jìn)方向仍然是提升模型的分割精度,并且對(duì)氣孔實(shí)現(xiàn)更加精確的語義標(biāo)注.