劉家樂,吳懷宇,+,陳志環(huán)
(1.武漢科技大學 機器人與智能系統(tǒng)研究院,湖北 武漢 430081;2.武漢科技大學 信息科學與工程學院,湖北 武漢 430081)
指針式儀表制造成本低,結構簡單易維護,廣泛用于大規(guī)模工業(yè)上的生產(chǎn)監(jiān)測。礦廠、變電站、化工企業(yè)的指針式儀表數(shù)量眾多且不固定、多分布在高溫、高壓場所,這種精密器件都需要按時校準來維持自身精確度。傳統(tǒng)的檢測方法是通過人工完成,而個人可能因主觀干擾和危險環(huán)境而導致誤檢造成巨大經(jīng)濟損失。到目前為止,國內(nèi)外學者對儀表自動檢測方法已有大量的研究,此外,指針式儀表目標多為室外高處的小目標,提高小目標的檢測效果是目前一大挑戰(zhàn)。
以往的目標檢測采用的大多是Hough變換等進行監(jiān)測,而其對噪聲太敏感、泛化能力弱、復雜度較高,容易漏檢或多檢導致誤差。隨著深度學習的發(fā)展,已經(jīng)有許多學者利用其解決目標檢測識別方面類似的問題,且已經(jīng)取得不錯的成效。目前,基于深度學習的目標檢測方法已經(jīng)取得的突破大致可分為兩類。一種是基于區(qū)域推薦的Two Stage算法,如:Fast RCNN[1]、Faster RCNN[2],它們通常具有高精度,但通常實時性不足。另一種是基于回歸方法的One Stage算法,如YOLO[3]、SSD[4]、YOLOv3[5],其將檢測問題作為回歸問題來解決并直接預測目標位置和類別,這些方法通常速度快但準確度低。
Laroca R等[6]利用卷積神經(jīng)網(wǎng)絡對儀表圖像進行分析,但精確度不夠;He P等[7]使用Mask RCNN來分割自然場景儀表盤,但實時性不高;Wang L等[8]使用YOLOv2對儀表進行定位,但對小目標的檢測效果有待提升。計算機內(nèi)置的內(nèi)存單元與計算單元有限,盡管目前利用深度學習實現(xiàn)指針式儀表檢測算法越來越多,但這些方法網(wǎng)絡規(guī)模大,實時性和準確性仍有待提高,難以在算力有限的計算機上完成對指針式儀表的實時高效檢測,因此不能滿足工業(yè)上的實際工作[9]需要。
針對以上問題,本文首先對工業(yè)上的指針式儀表的數(shù)據(jù)集進行采集與制作,然后對YOLOv3算法的系統(tǒng)模型框架結構、損失函數(shù)、先驗框聚類[10]進行設計與改進,通過常用的評估指標來對不同算法與改進版YOLOv3進行對比實驗。最后對實驗結果進行分析,結果表明改進的YOLOv3算法,針對工業(yè)中的半盤、整盤式指針式儀表檢測有較高的精度與速度,對小目標檢測效果大幅提升,能夠滿足工業(yè)上指針式儀表檢測的實際需要。
YOLOv3借鑒了圖像金字塔FPN(feature pyramid networks)的思想,在3種不同的規(guī)模的特征圖下進行預測,大尺寸特征圖用來檢測小目標,小尺寸特征圖用來檢測大目標,而中間特征層則適合檢測中等目標。通過聚類選取先驗框,對不同大小目標的檢測識別都能很好兼顧。圖1為YOLOv3的自上而下檢測的FPN結構圖。
圖1 YOLOv3的圖像金字塔結構
框架上,YOLOv3參考SSD和ResNet網(wǎng)絡結構,設計了分類網(wǎng)絡基礎模型DarkNet-53,相較于YOLOv2的DarkNet-19,DarkNet-53擴充為更大的網(wǎng)絡,共使用52層卷積層,且每個卷積層后都有歸一化操作(batch normalization)來防止過擬合;考慮到網(wǎng)絡復雜度與檢測準確率,所以與常用的特征提取網(wǎng)絡VGG-16相比,DarkNet-53降低了模型運算量,同時為了避免網(wǎng)絡層數(shù)的加深模型在訓練過程中產(chǎn)生梯度爆炸的現(xiàn)象,使用了殘差學習的思想,在網(wǎng)絡中添加了大量的殘差塊。
YOLOv3使用多標簽分類,這與先前版本中使用的互斥標簽不同,它使用邏輯分類器來計算特定標簽對象的可能性。所以對于分類損失,其模型摒棄了Softmax函數(shù)作為最終分類器,它使用每個標簽的二進制交叉熵損失,即常用的Logistic損失函數(shù)來作分類損失的損失函數(shù),而非YOLOv2中使用的一般均方誤差。表1為檢測網(wǎng)絡性能比較對比表,其中mAP為平均類別精度,F(xiàn)PS為幀率。
表1 檢測網(wǎng)絡性能比較對比
由表1可以看出,YOLOv3各指標在檢測算法中表現(xiàn)較為均衡,且在精確度和速度性能上均取得了良好的效果。
盡管YOLOv3在目標檢測領域已經(jīng)取得不錯的效果,但是對于本文工業(yè)上的指針式儀表數(shù)據(jù)集上來說,其對小目標的檢測效果不太理想,且檢測速度仍難以應對龐大數(shù)據(jù)量的檢測任務,故需要對YOLOv3算法做適當改進,以更好適應實際工業(yè)應用中的指針式儀表的檢測任務。
為了應對工業(yè)上的指針式儀表檢測問題,本文主要對YOLOv3算法做如下3個改進。
(1)改進Kmeans聚類。使用最新的Mini Batch Kmeans來加速聚類時間,來應對大量數(shù)據(jù)集的錨框Anchors選擇,主要作用是更快尋找到更合適的預測矩形框來檢測儀表圖像;
(2)改進YOLOv3框架。使用輕量級框架MobileNet加速YOLOv3的訓練時間,保證精確度的同時大幅度提高實時性;
(3)設計更合理損失函數(shù)。使用設計好的損失函數(shù)進行訓練,減小損失率,提升系統(tǒng)對小目標儀表盤的檢測效果。圖2為改進YOLOv3的檢測流程。
圖2 改進版YOLOv3檢測結構
SSD與Faster RCNN中邊界框尺寸都是通過主觀選擇的,這種方式會因數(shù)據(jù)集大小類別不同而產(chǎn)生較大誤差,故YOLOv3采用Kmeans聚類來自動選取邊界框的尺寸與數(shù)量,圖3為Kmeans聚類例圖,聚類中心用X表示,橫縱坐標分別為樣本的序號和特征的分布情況。
圖3 Kmeans聚類
如圖3所示,傳統(tǒng)的Kmeans流程都是隨機初始化K個聚類中心,然后將樣本點分配到最近的中心,分開成K個類別,再更新中心點,如此循環(huán)直到K個中心點不再變化或達到迭代閾值。因為隨機初始化K個聚類中心會導致聚類結果準確度不穩(wěn)定,所以使用Kmeans++初始化可以彌補Kmeans在初始化中心點的選擇上的不足,只預先選取一個中心點,再計算每個點到與其最近的中心點的距離的概率,隨機選擇一個點作為中心點加入集合中,重復步驟直到選定K個中心點。隨著數(shù)據(jù)集的大小進入萬級百萬級,日常目標檢測所需要的精度越來越高,傳統(tǒng)聚類耗時費資源且效果有限,而在聚類環(huán)節(jié)耗費的時間可以用更加效率的Mini Batch彌補。具體步驟為:
(1)隨機拆分訓練集為n份,首先抽取第一份訓練集,使用Kmeans++初始化構建出K個聚簇點的模型;
(2)繼續(xù)抽取訓練集中的下一份樣本的數(shù)據(jù),并將其添加到模型中,且分配給距離最近的聚簇中心;
(3)更新聚簇的中心點坐標(每次更新都只用抽取出來的部分數(shù)據(jù)集)。
Mini Batch Kmeans模型能在保持聚類準確性情況下大幅度降低計算時間。它采用分小批量的方法劃分數(shù)據(jù)子集,以此減少計算時間,同時仍試圖優(yōu)化目標函數(shù),采用這些隨機選取的數(shù)據(jù)進行訓練,極大減少了計算與Kmeans算法收斂的時間,這適用于當數(shù)據(jù)量與類別數(shù)非常大時做聚類,選用通過Kmeans++初始化之后的Mini Batch Kmeans算法能在提升精度的情況下加速聚類時間。
隨著卷積神經(jīng)網(wǎng)絡的層數(shù)加深,實際工程中所消耗的計算資源越來越大,大量的參數(shù)導致網(wǎng)絡訓練與檢測速度緩慢,為了解決這個問題,最好辦法就是對模型進行壓縮,在不損失網(wǎng)絡性能情況下提高運行速度與檢測速度,因此,本文選用輕量級網(wǎng)絡MobileNet代替YOLOv3中使用的Darknet-53網(wǎng)絡。
MobileNet的主要優(yōu)點是深度可分離卷積 (depthwise separable convolution),它將常用的標準卷積神經(jīng)網(wǎng)絡進行分解,變成深度卷積和1×1的逐點卷積,首先用深度卷積針對每個單輸入進行單濾波器濾波,后用逐點卷積的方式結合深度卷積的輸出,這種分解方式能大幅減少計算量,減小模型的大小。MobileNet在計算量,權重內(nèi)存和精確度方面找到了非常合適的平衡點。表2為相同輸入分辨率數(shù)據(jù)集情況下,YOLOv3框架MobileNet與DarkeNet-53間在ImageNet數(shù)據(jù)集上的性能比較。
由表2可以看出,在相同條件下,YOLOv3使用MobileNet框架在參數(shù)數(shù)量上較DarkNet-53框架減小3倍;浮點數(shù)運算量上MobileNet僅需150億次,將運算量較DarkNet-53減小了4倍以上。從計算量和參數(shù)量來說MobileNet具有絕對優(yōu)勢,能有效加快訓練速度,縮短訓練時間。
表2 YOLOv3各框架之間的性能比較
圖4所示是改進后的MobileNet的框架圖,共有27層卷積層,每個卷積層后都接有Batch Norm歸一化和激活函數(shù),抽出其中的第9層、14層、24層的特征圖出來進行后續(xù)訓練檢測操作。這里選用ELU代替原來的Relu激活函數(shù),函數(shù)在左側的負值賦予非零的斜率,不僅能避免或緩解梯度消失和梯度爆炸,而且能極大程度加速訓練過程,使收斂速度加快,對儀表圖像的噪聲有更佳的魯棒性。
圖4 MobileNet框架
損失函數(shù)作為衡量預測值與真實值之間的誤差的指標,對于網(wǎng)絡模型檢測效果的好壞起著至關重要作用,一般來說,損失函數(shù)下降速率越快,損失值越小,系統(tǒng)模型越好。對于YOLOv3來說,損失函數(shù)共分為:f1邊界框的預測(bounding box prediction)、f2置信度計算(confidence prediction)、f3類別預測(class prediction)這3個部分,其總損失為
Loss=f1+f2+f3
(1)
其中,各部分損失為
(2)
上述公式中各參數(shù)信息詳見文獻[5]所示。對于式(2)中邊界框的預測f1采用的是真實值坐標與預測值坐標誤差的平方;而置信度計算f2與類別預測f3均采用的是交叉熵損失函數(shù)。對于邊界框的坐標預測來說,自由場景下采集到的圖像可能尺寸大小不一,使YOLOv3檢測小目標的效果會受到影響,因此,本文對于坐標誤差的寬高部分損失函數(shù)的改進:采用了預測值和真實值的平方和作為損失。這是由于較大目標的誤差相對較小目標的誤差對最終的損失值影響更小,若損失函數(shù)不變,則損失函數(shù)難以下降,對小目標檢測結果較差。根據(jù)本文模型的指針式儀表,為了更好擬合數(shù)據(jù),設計邊界框預測損失函數(shù)如式(3)所示
(3)
最后本文在坐標誤差后加入激活函數(shù)tanh來減小預測框過大而產(chǎn)生的誤差,使預測框更加精確的檢測出儀表圓盤。最終總損失函數(shù)如式(4)所示
(4)
根據(jù)以上問題,本文選擇精確率均值AP(average precision),每秒檢測幀數(shù)FPS(frames per second)、平均IOU(交并比)作為模型評價指標,其中AP和FPS為檢測環(huán)節(jié)精度效率的評價指標,平均IOU為評價邊界框聚類準度指標
(5)
式中:TP(true positive)指的是正樣本,F(xiàn)P(false positive)指的是被判定為正樣本,但實際上是負樣本的樣本數(shù),其中TP與FP相加結果為總樣本數(shù)M,AP是針對單一類別預測,目前為止使用頻率最高,效果最優(yōu)的評價標準和度量指標之一
(6)
幀率FPS(frames per second),即是每秒鐘內(nèi)最大可以處理的圖片數(shù)量。式(6)中S為測試總時間,一般以秒為單位,F(xiàn)為該S秒單位時間內(nèi)系統(tǒng)檢測的圖片數(shù)量。一般顯卡的內(nèi)存越大,一次性處理的圖片數(shù)量越大,則處理一張圖片所需要消耗的檢測時間越短,速度越快
(7)
平均IOU是評價真實框Ground Truth與預測邊框差異性的指標,其中P為預測框大小、G為真實框大小。其式(7)可以理解為神經(jīng)網(wǎng)絡計算出的框與標記框的重合程度,即是檢測結果與真實框的交集比上其并集。IOU的值越高,預測邊界框的位置越準。
根據(jù)以上3點改進,下面將進行實驗。
本文將根據(jù)實驗的軟硬件開發(fā)環(huán)境,對工業(yè)上指針式儀表數(shù)據(jù)集進行制作,包括變電站、化工廠等場景實地拍攝,并對訓練集進行聚類,得到合適的先驗框輸入網(wǎng)絡進行訓練,通過不同算法的對比實驗,得出結論。
實驗環(huán)境配置如下:AMD Ryzen 5 2600 Six-Core Processor 處理器,NVIDIA GeForce GTX 1060 5 GB獨立顯卡,CUDA版本為9.0,Python版本為3.6,基于Tensorflow/Keras框架,操作系統(tǒng)為Windows 10,網(wǎng)絡具體參數(shù)配置見表3。
表3 網(wǎng)絡參數(shù)配置說明
針對本文的研究環(huán)境范圍主要是工業(yè)應用,如變電站、化工廠等,而指針式儀表一般在比較隱蔽的高處,像電線桿上和相關管道處,且表盤多因環(huán)境原因模糊不清,因此,數(shù)據(jù)集的搜集非常不便。本文利用python網(wǎng)絡爬蟲技術從網(wǎng)絡爬取指針式儀表的數(shù)據(jù)集400張,實地拍攝儀表盤圖像照片300余張,用數(shù)據(jù)增強(data augmentation)手段擴充數(shù)據(jù)集至1000張圖片,輸入到神經(jīng)網(wǎng)絡進行訓練。樣本劃分具體是:訓練集、交叉驗證集、測試集之間的比例為6∶2∶2。
圖5是標定數(shù)據(jù)集中真實框的分布,橫縱坐標分別為各先驗框坐標的分布情況。
圖5 真實框Ground Truth分布
3.3.1 Mini Batch Kmeans聚類結果
圖6為Mini Batch Kmeans算法的聚類結果圖,橫縱坐標分別為先驗框選取的個數(shù)和平均IOU的大小。
圖6 Mini Batch Kmeans聚類結果
圖6中Mini Batch Kmeans算法平均IOU值明顯大于Kmeans,且聚類損耗時間短;鑒于增加候選框數(shù)量會影響系統(tǒng)模型的檢測速度,本文最終選擇9個聚類中心。經(jīng)過測驗得到此時的精確度為81.97%,相對于普通的Kmeans算法提高了4.1%。這種對時間優(yōu)化的思路還廣泛應用于梯度下降、深度網(wǎng)絡等。
3.3.2 網(wǎng)絡訓練及其測試
為更好檢測大中小目標,在YOLOv3的網(wǎng)絡中,將圖片共分為3個不同尺寸的特征圖。每個特征圖設置有3個錨框Anchor boxes,因此會獲得9個Anchor boxes來進行預測。根據(jù)預測的邊界框和實際邊界框之間的IOU進行非極大抑制。根據(jù)反復實驗,減小學習率和增大迭代次數(shù)并不能有效減小損失值,故本次實驗迭代次數(shù)定為1000次。圖7為改進版YOLOv3與原版的損失函數(shù)對比曲線圖。
圖7 訓練損失函數(shù)對比
圖7中輸入圖像分辨率為416×416,虛線為YOLOv3損失曲線,實線為改進版YOLOv3曲線。培訓結束后,整合培訓過程中的數(shù)據(jù),由原版loss曲線可看出曲線前期震蕩較大,至900次迭代后趨于穩(wěn)定不再變化;由改進版loss曲線圖可知在400次迭代epoch之前損失急速下降,隨著學習率的不斷減小,損失持續(xù)小范圍下降,后期迭代loss基本不再變化;最終改進版YOLOv3損失值降為2.8,較原版損失率降低30%。
3.3.3 不同圖像分辨率的性能比較
根據(jù)多尺度訓練方式,YOLOv3在不同的圖像分辨率下都有很好的檢測效果,魯棒性較好。為了驗證YOLOv3和改進YOLOv3的在不同圖像分辨率下的檢測效果,本文選出低、中、高{320,416,608}這3種不同分辨率下的圖像進行算法檢測性能評估。由圖8可以看出改進版的YOLOv3在不同分辨率大小上的檢測效果情況,左柱狀圖為YOLOv3效果圖,右柱狀圖為改進版本YOLOv3效果圖。
由圖8可知,在不同分辨率輸入下改進版本YOLOv3均比原版YOLOv3的檢測效果好。由此可得本文所提改進算法能夠適應不同分辨率大小的圖像,且精確度較原版有一定幅度提高。
圖8 兩種算法的圖像分辨率敏感性分析
為體現(xiàn)各不同檢測算法在指針式儀表數(shù)據(jù)集上的檢測效果,本文選取中分辨率的情況下,對原版YOLOv3與改進版本的YOLOv3以及SSD、Mask RCNN在本數(shù)據(jù)集上進行指標評估對比,得出實驗結果指標對比表格。
通過表4可知YOLOv3的精確度(AP)為90.6%,精度方面比Mask RCNN低2%,比SSD高2%;實時性方面,YOLOv3幀率是Mask RCNN的20倍,較SSD提高16%,且小目標檢出率達到81%;綜合來看,YOLOv3綜合性能最好,效果最優(yōu);而改進版YOLOv3在精度方面高于Mask RCNN,且在視頻檢測方面的幀率(FPS)上每秒處理24幀圖像,較原版YOLOv3提升了66.7%,且小目標檢出率提升了7.4%,每百張圖的小目標檢出為87張,體現(xiàn)出本模型優(yōu)越的性能,因此綜合來看,本文提出的改進版YOLOv3算法能夠在工業(yè)上指針式儀表檢測任務中,比原版算法更好,更符合工業(yè)環(huán)境下的檢測需求。
表4 IOU閾值為0.5時各算法的評估結果對比
本文選取以上4種算法進行實際的檢測指針式儀表,以更直觀感受各算法的優(yōu)劣和效果,比較各算法使用的性能。
其中圖9為近處的半盤式(即刻度區(qū)約占表盤一半)指針式儀表,圖10為經(jīng)過局部放大后的遠處整盤式(即刻度區(qū)覆蓋整個儀表表盤)指針式儀表圖像;圖(a)~圖(d)分別為SSD、Mask RCNN、YOLOv3、改進YOLOv3的檢測效果圖像,圖像上附有各算法識別概率大小和儀表預測框的定位情況。
由圖9、圖10可知,各算法都能準確預測,框出不同的指針式儀表表盤,但SSD準確率不高,對表盤的檢測框偏差較大;Mask RCNN通過實例分割進行儀表盤預測較為精準,但失去了一些邊界信息;原版YOLOv3對遠處儀表盤的小目標檢測準確率低;而改進版YOLOv3可以精確檢測出近處的半盤式儀表,也能快速準確地檢測小目標的整盤式儀表。通過實驗結果可看出,本文提出的改進版YOLOv3的準確性、實時性和損失率基本已達到預期效果,并驗證了這些思路和方法的可行性,能夠為工業(yè)上的指針式儀表檢測問題提供更優(yōu)秀的方案。
圖9 近處的半盤式指針式儀表(5 m)
圖10 遠處的整盤式指針式儀表(10 m 局部放大)
本文提出一種基于改進YOLOv3的工業(yè)指針式儀表檢測識別方法。本算法通過Mini Batch Kmeans聚類算法對數(shù)據(jù)集聚類找出更合適樣本的先驗框,并設計新?lián)p失函數(shù)與使用輕量級網(wǎng)絡MobileNet模型框架來進行多尺度訓練、預測。實驗結果表明,改進的YOLOv3算法在保證較高準確率的同時能夠有快速的檢測速率,能夠較好檢測出半盤式、整盤式等不同的指針式儀表表盤,且訓練耗時短,對小目標檢測定位效果提升明顯,該方法具有較好的魯棒性和實用性,能夠滿足在算力有限的計算機上完成指針式儀表的自動檢測任務,也將為未來的指針式儀表指針提取及讀數(shù)工作提供思路。