雷世威,肖興美,張 明
(中煤科工集團(tuán)重慶研究院有限公司,重慶 400039)
我國能源結(jié)構(gòu)的現(xiàn)狀為富煤、貧油、少氣,而清潔能源尚處于發(fā)展階段,目前煤炭在我國能源結(jié)構(gòu)中仍處于主體地位[1]。煤和矸石分選是煤炭生產(chǎn)中的重要環(huán)節(jié),有助于提高原煤品質(zhì),也可避免矸石因發(fā)生自燃、雨淋、泥化等情況對環(huán)境造成危害[2]。
傳統(tǒng)選煤方法存在成本高、自然資源消耗大、環(huán)境污染大等諸多問題,煤矸分選的機(jī)械化、自動化、智能化已成為煤炭生產(chǎn)中亟待研究的重要課題,其中煤矸的準(zhǔn)確識別是實現(xiàn)自動分選的首要任務(wù)和關(guān)鍵技術(shù)。目前煤矸識別方法主要有密度識別法、硬度識別法、射線識別法、圖像識別法[3]。圖像識別法相較于其他的識別方法具有安全、系統(tǒng)簡單、易于維護(hù)等優(yōu)點,是目前煤矸識別的一個重要發(fā)展方向。傳統(tǒng)的圖像識別技術(shù)[4-11]主要運用圖像處理技術(shù)對煤和矸石的灰度和紋理等參數(shù)進(jìn)行提取,通過不同的算法建立特征值模型,分析并優(yōu)化分割參數(shù),最終實現(xiàn)煤和矸石的識別,但在特征的選取和閾值的確定過程中需要通過人為分析確定,其實用性和適應(yīng)性不強(qiáng)。近年來,深度學(xué)習(xí)技術(shù)已逐漸應(yīng)用于煤矸識別的研究中,曹現(xiàn)剛等[12]提出了一種基于GoogLenet深度學(xué)習(xí)網(wǎng)絡(luò)的煤矸識別方法,采用Inception 模型,并通過遷移學(xué)習(xí)共享已訓(xùn)練模型卷積層權(quán)值和偏差,取得了較高的分類準(zhǔn)確率;王冠軍等[13]采用Tengine深度學(xué)習(xí)框架中的VGG16深度學(xué)習(xí)模型對煤矸圖像進(jìn)行訓(xùn)練識別,提升了網(wǎng)絡(luò)識別精度。采用GoogLenet、VGG16等深度學(xué)習(xí)網(wǎng)絡(luò)避免了人工確定特征參數(shù),在識別的準(zhǔn)確率上相較于傳統(tǒng)圖像識別方法有較大提升,但相較于在VOC和COCO數(shù)據(jù)集上表現(xiàn)良好的R-CNN[14-17]、SSD[18]、YOLO[19-21]等目標(biāo)檢測算法的識別效果還有一定差距。R-CNN系列算法屬于兩階段目標(biāo)檢測方法,先使用卷積神經(jīng)網(wǎng)絡(luò)產(chǎn)生候選區(qū)域,然后將候選區(qū)域進(jìn)行分類和回歸,其準(zhǔn)確率高但處理效率偏低;SSD及YOLO系列算法屬于一階段目標(biāo)檢測算法,使用回歸算法直接預(yù)測不同目標(biāo)的類別與位置,滿足實時性要求,但其準(zhǔn)確率偏低。YOLOv3在前兩個版本的基礎(chǔ)上,優(yōu)化了網(wǎng)絡(luò)結(jié)構(gòu)及參數(shù),相較于其他目標(biāo)檢測算法,在識別準(zhǔn)確率及識別速度的綜合表現(xiàn)上具有較大優(yōu)勢。近年來深度學(xué)習(xí)技術(shù)發(fā)展迅速,但在煤矸識別領(lǐng)域尚未得到較好的應(yīng)用,針對上述問題,結(jié)合煤矸識別的應(yīng)用場景,筆者提出一種基于改進(jìn)YOLOv3的煤矸識別方法,可對煤與矸石進(jìn)行準(zhǔn)確識別,并具有較快的識別速度。
YOLOv3吸收了當(dāng)前優(yōu)秀檢測框架的思路,提出了DarkNet-53網(wǎng)絡(luò)結(jié)構(gòu),如圖1所示。
圖1 DarkNet-53網(wǎng)絡(luò)結(jié)構(gòu)簡圖
圖1中:DBL為卷積、BN(Batch Normalization)、Leaky ReLU三層的組合;DBL為卷積層的基本組件,DBL后面的數(shù)字為組件數(shù)量;Res為殘差模塊,上采樣使用的方式為上池化,使用元素復(fù)制擴(kuò)充的方法擴(kuò)大特征尺寸;Concat操作即通道的拼接,和FPN中使用的元素相加不同,Concat是在上采樣后將深層與淺層的特征圖進(jìn)行拼接。
由圖1可見,該特征提取網(wǎng)絡(luò)由52個卷積層和1個全連接層組成,DarkNet-53網(wǎng)絡(luò)默認(rèn)使用416×416×3的輸入,DarkNet-53在基礎(chǔ)網(wǎng)絡(luò)中大量使用了殘差網(wǎng)絡(luò)連接,使得網(wǎng)絡(luò)結(jié)構(gòu)可以設(shè)計得很深,并緩解了訓(xùn)練過程中出現(xiàn)梯度消失的問題,增加了模型的收斂能力。通過上采樣與Concat操作,將深層特征與淺層特征進(jìn)行融合,最終輸出3種尺寸的特征圖用于后續(xù)的預(yù)測,多層特征圖有助于對多尺度目標(biāo)與小目標(biāo)的檢測。DarkNet-53網(wǎng)絡(luò)與其他網(wǎng)絡(luò)的性能比較見表1。
表1 DarkNet-53網(wǎng)絡(luò)與其他網(wǎng)絡(luò)的性能對比
由表1可知,DarkNet-53網(wǎng)絡(luò)在Top-1和Top-5識別的準(zhǔn)確率和ResNet-101、ResNet-152相當(dāng),網(wǎng)絡(luò)對GPU的硬件資源利用率較高,浮點運算次數(shù)可達(dá)到1 457次/s。同時,DarkNet-53網(wǎng)絡(luò)具有較快的檢測速度,在DarkNet-19的基礎(chǔ)上對網(wǎng)絡(luò)性能進(jìn)行了平衡,在滿足實時檢測要求的情況下,提高了識別準(zhǔn)確率。
損失函數(shù)表示的是模型的預(yù)測值與真實值的不一致程度,是判別模型是否收斂和優(yōu)化模型的重要參數(shù),損失函數(shù)的計算值越小,說明模型的預(yù)測值和真實值的差距越小,識別的準(zhǔn)確率和魯棒性越高。對于YOLOv3的損失函數(shù)原論文作者Redmon J沒有明確的講解,筆者根據(jù)YOLOv3論文實現(xiàn)的源碼DarkNet歸納總結(jié)出YOLOv3的損失函數(shù)為:
(1)
式中:floss為YOLOv3的損失函數(shù);λobj為目標(biāo)系數(shù),在特征圖網(wǎng)格單元中存在目標(biāo)時為1,若不存在目標(biāo)則為0;wtru、htru是經(jīng)過標(biāo)準(zhǔn)化及歸一化后目標(biāo)寬和高的真實值;rtru是真實位置;rpre是預(yù)測位置;c是預(yù)測類別值;ctru是真實類別值;Pc是預(yù)測類別概率值;Ftru是真實置信度;Fpre是預(yù)測置信度。
由于網(wǎng)絡(luò)存在3個檢測尺度,每個檢測尺度的特征圖網(wǎng)格單元存在3個預(yù)設(shè)的錨框,因此需要計算3×(13×13+26×26+52×52)即10 647個錨框的損失值。
更深的卷積層數(shù)及更深的網(wǎng)絡(luò)結(jié)構(gòu)可增強(qiáng)對目標(biāo)特征提取和識別的效果。由于煤和矸石在圖像特征上非常相似,相較于COCO數(shù)據(jù)集和VOC數(shù)據(jù)集中的飛機(jī)、自行車、椅子、船等日常生活中的物體,煤和矸石的目標(biāo)較小且兩者之間的辨識度較低,結(jié)合算法本身的結(jié)構(gòu)深度,筆者對YOLOv3算法的特征提取網(wǎng)絡(luò)DarkNet-53進(jìn)行了改進(jìn),在網(wǎng)絡(luò)中增加 2個 1×1和3×3的卷積層。增加卷積層可提升卷積神經(jīng)網(wǎng)絡(luò)特征提取能力[22],具體體現(xiàn)在以下幾個方面:降低卷積核通道維數(shù)與參數(shù),簡化卷積神經(jīng)網(wǎng)絡(luò);在不損失分辨率的情況下增加非線性特征表達(dá),豐富信息表現(xiàn)形式;在獲得相同的感受野與捕捉更多的語言信息的同時,較小的卷積核可在加深網(wǎng)絡(luò)的同時提高網(wǎng)絡(luò)表達(dá)能力;較小卷積核的卷積層比較大卷積核的卷積層擁有更多層的非線性函數(shù),可增強(qiáng)網(wǎng)絡(luò)的泛化能力[23]。改進(jìn)后的YOLOv3網(wǎng)絡(luò)結(jié)構(gòu)參數(shù)如圖2所示。
圖2 改進(jìn)后的YOLOv3網(wǎng)絡(luò)結(jié)構(gòu)參數(shù)圖
為了區(qū)分原始網(wǎng)絡(luò)和改進(jìn)后的網(wǎng)絡(luò),便于對比改進(jìn)前后的網(wǎng)絡(luò)性能,將改進(jìn)網(wǎng)絡(luò)結(jié)構(gòu)后的YOLOv3網(wǎng)絡(luò)命名為YOLOv3-A。
YOLOv3對每個邊界框輸出4個預(yù)測值,分別記為tx,ty,tw,th。通過公式(2)~(5)計算得到邊界框在特征圖上的中心坐標(biāo)bx、by及寬高bw、bh:
bx=σ(tx)+cx
(2)
by=σ(ty)+cy
(3)
bw=wpetw
(4)
bh=hpeth
(5)
式中:tx、ty為網(wǎng)絡(luò)預(yù)測的偏移量值,經(jīng)過Sigmoid運算將其縮放到[0,1]區(qū)間;cx、cy為特征圖網(wǎng)格單元左上角的坐標(biāo)值;wp、hp為預(yù)設(shè)錨框映射到特征圖中的寬和高;tw、th為網(wǎng)絡(luò)預(yù)測的尺度縮放值,由于在預(yù)測時tw、th經(jīng)過了log運算縮放到了對數(shù)空間,故需要經(jīng)過指數(shù)運算進(jìn)行轉(zhuǎn)換。
通過位置偏移、縮放偏移值的預(yù)測,讓預(yù)設(shè)錨框盡可能地接近真實框,通過置信度過濾掉低分的預(yù)測框,然后對剩下的預(yù)測框進(jìn)行非極大抑制(Non Maximun Suppression, NMS)處理,得到網(wǎng)絡(luò)最終的預(yù)測結(jié)果。邊界框預(yù)測公式如圖3所示。
圖3 邊界框預(yù)測公式
由圖3邊界框(bounding boxes)預(yù)測公式可知,在不同大小的預(yù)測中,相同像素值的位置偏差,對小邊界框的IOU的影響更大。而經(jīng)過均方誤差的計算,大邊界框和小邊界框相同尺寸的誤差對損失值的影響卻相同,這將影響到小邊界框預(yù)測回歸的精確度。在YOLOv3中增加了尺度修正,采用λm=2-wtruhtru來加大對小框損失的計算,這在一定程度上補償了小框損失對損失值的影響,但這個修正參數(shù)值域范圍小,不便于調(diào)整參數(shù),而且對于不同尺度的特征值,這個補償參數(shù)是相同的。由于特征值尺度越小,其特征像素點對應(yīng)到原始圖像的感受野就越大,所以小尺度的特征圖用于預(yù)測較大的目標(biāo),而大尺度的特征圖用于預(yù)測較小的目標(biāo)。筆者針對不同尺度的特征圖對損失進(jìn)行修正,給出了修正位置回歸的計算方法,如式(6)~(8)所示:
(6)
Fs=λs(1/(1+exp(wtru+htru)))
(7)
Fl=λl(1/(1+exp(-1/max(ws/wl,hs/hl))))
(8)
式中:Lerr為單個預(yù)測框的位置回歸損失函數(shù);Fs為目標(biāo)尺度修正參數(shù);Fl為特征圖尺度修正參數(shù);λs、λl分別為目標(biāo)尺度和特征尺寸修正系數(shù);ws、hs分別為輸入圖片的寬和高;wl、hl分別為特征圖的寬和高。
修正參數(shù)的設(shè)計采用類似Sigmoid的計算方式將值縮放到[0,1]區(qū)間,為了平衡參數(shù)之間對損失值貢獻(xiàn)度,本文取λs=4,λl=2。將改進(jìn)網(wǎng)絡(luò)結(jié)構(gòu)和損失函數(shù)的YOLOv3網(wǎng)絡(luò)命名為YOLOv3-M。
硬件平臺為臺式計算機(jī),處理器為Intel Core i5-7500,主頻為3.40 GHz,16 GB內(nèi)存,1 TB 硬盤,顯卡為NVIDA GeForce GTX1080Ti,11 GB顯存。軟件環(huán)境為Ubuntu 16.06 64位操作系統(tǒng),編程語言為C++、Python,采用Darknet深度學(xué)習(xí)框架。
主要模型配置參數(shù)如下:網(wǎng)絡(luò)輸入尺寸width×height為416×416;網(wǎng)絡(luò)輸入通道數(shù)channels為3;動量因子Momentum為0.9;權(quán)重衰減因子Decay為0.000 5;學(xué)習(xí)率Learning_rate為0.001;批次樣本數(shù)Batch為64;細(xì)分次數(shù)subdivisions為16;最大迭代次數(shù)Max_batches為50 200;學(xué)習(xí)率調(diào)整策略Policy為steps;學(xué)習(xí)率衰減因子Scales為0.1。
以煤、矸石為研究對象,采用礦用防爆攝像頭(型號KBA127A)對煤矸圖像進(jìn)行采集,共收集到不同形態(tài)、不同光照、不同角度的煤矸圖片約360張。其中將240張作為訓(xùn)練集,60張作為驗證集,60張作為測試集,每張圖像的煤矸數(shù)量為1~6個不等,采用YOLO_MARK工具對數(shù)據(jù)進(jìn)行標(biāo)注。
平均損失變化曲線如圖4所示。
圖4 平均損失變化趨勢
由圖4可知:訓(xùn)練開始時的損失函數(shù)值極大,隨著訓(xùn)練迭代次數(shù)的增加,損失函數(shù)值逐漸減小,并逐漸趨于平穩(wěn);訓(xùn)練迭代到2 000次時,損失函數(shù)在0.14上下浮動,從平均損失的收斂情況來看,訓(xùn)練結(jié)果比較理想,此時停止訓(xùn)練,用訓(xùn)練生成的模型進(jìn)行煤矸識別。
對煤矸識別準(zhǔn)確率的評價需要同時考慮精確率(Precision)和召回率(Recall)[24],其定義如下:
(9)
(10)
式中:P為精確率;R為召回率;ntp為實際是煤或矸石并且被識別為煤或矸石的個數(shù);nfp為實際是背景或其他物體卻被識別為煤或矸石的個數(shù);nad為所有檢測到的目標(biāo)數(shù)量;nfn為實際是煤或矸石但沒有被識別為煤或矸石的個數(shù);nagt為所有待識別的目標(biāo)數(shù)量。
將模型識別出的目標(biāo)置信度(屬于煤或矸石的概率值)由大到小進(jìn)行排序,逐個把目標(biāo)加入進(jìn)行預(yù)測,得到一組P、R序列,代入式(11)、式(12),求得Pa(Average Precision)值:
(11)
(12)
將煤和矸石二者的Pa值取平均值,作為識別準(zhǔn)確率的評價指標(biāo)。
采用改進(jìn)網(wǎng)絡(luò)結(jié)構(gòu)和損失函數(shù)的YOLOv3-M對煤、矸進(jìn)行識別,部分煤(coal)、矸(gangue)識別效果如圖5所示。
由圖5可知:YOLOv3-M網(wǎng)絡(luò)可以較為準(zhǔn)確地識別并定位煤和矸石,在不同背景、不同大小、不同形態(tài)、不同光照強(qiáng)度的情況下,也能進(jìn)行準(zhǔn)確識別,其魯棒性、泛化能力較強(qiáng)。
原始網(wǎng)絡(luò)YOLOv3、改進(jìn)網(wǎng)絡(luò)結(jié)構(gòu)的YOLOv3-A,以及改進(jìn)網(wǎng)絡(luò)結(jié)構(gòu)和損失函數(shù)的YOLOv3-M部分煤、矸檢測效果對比如圖6所示。
(a)YOLOv3
(b)YOLOv3-A
(c)YOLOv3-M
由圖6可知:YOLOv3在光照條件好、煤和矸石的辨識度較高的情況下預(yù)測結(jié)果比較理想,而在光照較弱、煤和矸石的辨識度較低的情況下原始網(wǎng)絡(luò)YOLOv3易出現(xiàn)漏檢的情況;YOLOv3-A由于網(wǎng)絡(luò)深度的提升,故比YOLOv3有更強(qiáng)的識別能力,可以識別出YOLOv3部分漏檢的目標(biāo);YOLOv3-M在加深網(wǎng)絡(luò)深度的情況下優(yōu)化了損失函數(shù),使得模型對不同環(huán)境下煤矸圖像的適應(yīng)性更強(qiáng),在識別準(zhǔn)確率和錨框精度上都優(yōu)于YOLOv3-A和YOLOv3。
此外,使用基于傳統(tǒng)識別算法的支持向量機(jī)SVM、高斯混合模型Gaussian Model,以及基于深度學(xué)習(xí)網(wǎng)絡(luò)的Inception V3、VGG16、YOLOv3等識別算法,與筆者提出的算法進(jìn)行對比,對比結(jié)果如表2所示。
表2 各種煤矸識別算法對比
由表2可知,煤矸識別網(wǎng)絡(luò)YOLOv3-A、YOLOv3-M的單張圖像識別時間與原始YOLOv3相當(dāng),在對煤矸識別的準(zhǔn)確率上分別有0.9%和2.2%的提升;YOLOv3-M在識別速度上比其他類別的網(wǎng)絡(luò)具有較大的優(yōu)勢,可以達(dá)到實時檢測的目的。綜上所述,基于改進(jìn)YOLOv3的煤矸識別網(wǎng)絡(luò)YOLOv3-M具有較強(qiáng)的適應(yīng)性,較好地平衡了識別準(zhǔn)確率和識別速度。
1)加深神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu),可加強(qiáng)對煤和矸石的特征提取性能,提升對煤和矸石的識別準(zhǔn)確率。
2)改進(jìn)邊界框損失函數(shù),可優(yōu)化邊界框回歸過程,提升預(yù)測框的識別和定位準(zhǔn)確率。
3)煤矸識別網(wǎng)絡(luò)YOLOv3-M模型收斂速度快,對不同背景、不同大小、不同形態(tài)、不同光照強(qiáng)度的煤矸具有較強(qiáng)的適應(yīng)性和泛化能力。
4)煤矸識別網(wǎng)絡(luò)YOLOv3-M在識別速度和識別準(zhǔn)確率上取得了較好的平衡,可滿足工程應(yīng)用的準(zhǔn)確性、實時性要求。