孫順遠(yuǎn),楊 挺
(1.江南大學(xué)輕工過程先進(jìn)控制教育部重點(diǎn)實(shí)驗(yàn)室,江蘇無錫 214122;2.江南大學(xué)物聯(lián)網(wǎng)工程學(xué)院,江蘇無錫 214122)
嵌入式儀表能夠測(cè)量、計(jì)算各種物理參數(shù)。隨著儀表的廣泛使用,使得人工讀數(shù)的成本不斷增加。使用更高效的方式進(jìn)行儀表檢測(cè)成為新的研究熱點(diǎn),其中基于圖像的儀表檢測(cè)得到了廣泛的關(guān)注。由于工業(yè)環(huán)境的復(fù)雜性,在雨、霧、強(qiáng)光等干擾嚴(yán)重的環(huán)境中使用傳統(tǒng)的圖像處理往往難以應(yīng)對(duì)。而基于深度學(xué)習(xí)的目標(biāo)檢測(cè)算法通過訓(xùn)練極端環(huán)境下的圖像,能夠很好地解決此類問題。
針對(duì)儀表自動(dòng)檢測(cè)問題,國(guó)內(nèi)外學(xué)者提出了多種檢測(cè)策略。邢浩強(qiáng)等[1]通過構(gòu)建9層卷積神經(jīng)網(wǎng)絡(luò)提取儀表特征以解決儀表目標(biāo)的定位。徐發(fā)兵等[2]在YOLO9000[3]模型的基礎(chǔ)上添加濾波器和批量標(biāo)準(zhǔn)化,并且對(duì)于錨框尺寸的選取采用k-means聚類的方式,加快包圍框(Bounding box)的回歸。司朋偉等[4]利用Faster RCNN[5]網(wǎng)絡(luò)生成候選集,再將其中位于高置信度的目標(biāo)區(qū)域經(jīng)過篩選建立特征模板,實(shí)現(xiàn)對(duì)儀表類型的識(shí)別與定位。文獻(xiàn)[6-7]利用形態(tài)學(xué)方式,增強(qiáng)目標(biāo)區(qū)域特征以進(jìn)行定位。
由于儀表體積普遍較小,在檢測(cè)時(shí)往往會(huì)出現(xiàn)漏檢的現(xiàn)象。因此,加強(qiáng)對(duì)于小目標(biāo)的檢測(cè)至關(guān)重要。YOLOv3[8]使用了復(fù)雜的DarkNet-53來提取特征,并且加入特征金字塔網(wǎng)絡(luò) (FPN),提升了小物體的檢測(cè)精度。DSSD[9]利用反卷積來提取更多上下文信息。DSOD[10]中將基礎(chǔ)網(wǎng)絡(luò)由VGG-16變?yōu)镈enseNet[11],使得模型可以從零開始訓(xùn)練并收斂。FSSD[12]借鑒了特征金字塔網(wǎng)絡(luò)的思路,將網(wǎng)絡(luò)較低層的特征引入到較高層當(dāng)中,提升了小物體的檢測(cè)精度。RSSD[13]中增加池化和反卷積,提升了特征金字塔中各個(gè)分支的通道數(shù)。
對(duì)于儀表讀數(shù)識(shí)別問題,陳剛等[14]將數(shù)碼字符切割后進(jìn)行七段特征檢測(cè),以進(jìn)行儀表數(shù)碼的快速識(shí)別。劉晶[15]利用連通域的方式實(shí)現(xiàn)對(duì)圖像區(qū)域的定位分割,采用OAO分類將其拓展到多分類以實(shí)現(xiàn)數(shù)字識(shí)別。
在儀表定位和類型判別中,為加快模型運(yùn)行速度,提高算法準(zhǔn)確率,不僅要降低計(jì)算量,還要改進(jìn)優(yōu)化策略。本文主要的改進(jìn)如下:(1)將ResNet-50[16]作為基礎(chǔ)網(wǎng)絡(luò),不僅降低了模型的大小和計(jì)算復(fù)雜度,而且可以充分提取圖片的特征。(2)加入特征金字塔網(wǎng)絡(luò)結(jié)構(gòu),將底層中的細(xì)節(jié)信息與高層中的語義信息進(jìn)行結(jié)合。(3)使用GIoU[17](generalized intersection over union)作為評(píng)判預(yù)測(cè)框與真實(shí)框的距離指標(biāo),并將其作為損失函數(shù),使得包圍框(Bounding Box)的回歸更高效。
在使用目標(biāo)檢測(cè)算法確定數(shù)字式儀表位置后,通過構(gòu)建4層卷積神經(jīng)網(wǎng)絡(luò)提取數(shù)字特征。在數(shù)字識(shí)別時(shí),先對(duì)儀表圖像進(jìn)行預(yù)處理,濾除表盤周圍的文字和噪聲,再對(duì)其進(jìn)行二值化、輪廓檢測(cè)、提取數(shù)字區(qū)域,最后利用網(wǎng)絡(luò)讀取示數(shù)。
SSD(single shot multibox detector)網(wǎng)絡(luò)結(jié)構(gòu)由基礎(chǔ)網(wǎng)絡(luò)VGG16增加6個(gè)卷積層和檢測(cè)網(wǎng)絡(luò)2部分組成,分別用于特征提取和多尺度的預(yù)測(cè)。網(wǎng)絡(luò)結(jié)構(gòu)如圖1所示。
圖1 SSD算法框架圖
SSD中引入預(yù)選框(default box),抽取網(wǎng)絡(luò)中的6張?zhí)卣鲌D,并以每個(gè)點(diǎn)為中心,生成一系列同心的預(yù)選框。再將中心點(diǎn)的坐標(biāo)乘上步長(zhǎng),將其映射到原始圖片。其中第1、5和6張?zhí)卣鲌D上生成4個(gè)預(yù)選框,其余特征圖上生成6個(gè)預(yù)選框,一共生成8 732個(gè)預(yù)選框。
SSD的損失函數(shù)與其他目標(biāo)檢測(cè)算法相似,整個(gè)損失函數(shù)分為2部分:預(yù)選框與真實(shí)框的類別損失(confidence loss)以及定位損失(localization loss),公式如下所示:
(1)
式中:Lconf(x,c)為類別損失值;Lloc(x,l,g)為定位損失值;N指用于前景分類的默認(rèn)框;α為定位損失占總損失值的權(quán)重。
在測(cè)試階段,SSD網(wǎng)絡(luò)預(yù)測(cè)出預(yù)選框的偏移量,通過解碼求出預(yù)測(cè)框的位置。將置信度超過閾值的預(yù)測(cè)框篩選出來,并對(duì)其進(jìn)行非極大值抑制(NMS),最終得出檢測(cè)結(jié)果。
1.2.1 基礎(chǔ)網(wǎng)絡(luò)改進(jìn)
為了在不降低模型運(yùn)行速率的前提下提高準(zhǔn)確率,需要選擇模型復(fù)雜度不高的基礎(chǔ)網(wǎng)絡(luò)。因此,在PyTorch框架下對(duì)VGGNet、GoogLeNet、ShuttleNet、MobileNet、Inception和ResNet進(jìn)行測(cè)試,運(yùn)行環(huán)境為NVIDIA GTX 1080,測(cè)試集為ImageNet2012,批量大小為32,結(jié)果如表1所示。
表1 分類網(wǎng)絡(luò)在ImageNet2012下的對(duì)比
其中FLOPs代表了網(wǎng)絡(luò)需要的浮點(diǎn)計(jì)算數(shù),其數(shù)值越大代表著網(wǎng)絡(luò)的復(fù)雜度越高,往往運(yùn)行的速度會(huì)變慢,占用的內(nèi)存變大。從表1中可知原本的基礎(chǔ)網(wǎng)絡(luò)VGG-16計(jì)算量大,精度不高,而GoogleNet、ShuffleNet 和MobileNet-v2 雖然計(jì)算量小了,但是精度沒有提升。使用Inception-v3后,精度得到了提升,但是速度變慢很多。
最后,為了在保證速度的前提下,提高網(wǎng)絡(luò)的精度,本文選取ResNet-50作為基礎(chǔ)網(wǎng)絡(luò)。
1.2.2 特征金字塔網(wǎng)絡(luò)
對(duì)于卷積神經(jīng)網(wǎng)絡(luò),不同深度對(duì)應(yīng)不同層的語義信息。底層分辨率較高,感受視野小,學(xué)到的主要是細(xì)節(jié)信息,高層分辨率低,感受視野大,主要是語義信息。SSD算法雖然復(fù)用了不同層上的特征圖,但是并沒有將底層和高層的特征融合,這導(dǎo)致了極大的語義間隔,其網(wǎng)絡(luò)結(jié)構(gòu)如圖2(a)所示。
特征金字塔原理:先從下采樣中抽取一部分特征圖,并對(duì)其進(jìn)行上采樣,構(gòu)建自頂向下的通道,再將上采樣的特征圖與原特征圖進(jìn)行融合,最后利用融合的特征圖進(jìn)行預(yù)測(cè),其網(wǎng)絡(luò)結(jié)構(gòu)如圖2(b)所示。使用特征金字塔網(wǎng)絡(luò),將細(xì)節(jié)信息和語義信息進(jìn)行融合,可以進(jìn)一步提高分類和定位的準(zhǔn)確率。
圖2 特征提取方法的對(duì)比
1.2.3 定位損失函數(shù)改進(jìn)
IoU是目標(biāo)檢測(cè)中的重要概念,在基于錨框的檢測(cè)框架中,它不僅可以用來確定正負(fù)樣本,而且可以用來判斷預(yù)測(cè)框與真實(shí)框之間的距離。在SSD的位置回歸任務(wù)中,判斷預(yù)測(cè)框與真實(shí)框之間距離最恰當(dāng)?shù)闹笜?biāo)就是IoU,但是采用Smooth L1 loss的回歸損失函數(shù)卻不適合,如圖3所示,在Smooth L1 loss和Smooth L2 loss損失值相同的情況下,位置回歸的效果卻相差甚遠(yuǎn)。
圖3 位置回歸中不同評(píng)價(jià)指標(biāo)的值
然而直接使用IoU作為損失函數(shù)會(huì)出現(xiàn)2個(gè)問題:(1)當(dāng)預(yù)測(cè)框與真實(shí)框交集為0時(shí),根據(jù)定義得IoU=0,此時(shí)梯度為0,無法回傳訓(xùn)練。(2)IoU不能正確反映2個(gè)框是如何重疊的。如圖4所示,此時(shí)IoU的值都是0.33,但是它們的回歸效果是不一樣的,左側(cè)的效果最好,右側(cè)的效果最差。
圖4 相同IoU值下的回歸效果
考慮到使用IoU作為損失函數(shù)導(dǎo)致的問題,本文采用GIoU作為指標(biāo)。IoU和GIoU具體表達(dá)式如下:
(2)
GIoU=IoU-|C(A∪B)|/|C|
(3)
GIoU作為損失函數(shù)時(shí),計(jì)算公式如下所示:
LGIoU=1-GIoU
(4)
式中:A為預(yù)測(cè)框的面積;B為真實(shí)框的面積;C為能同時(shí)包圍2個(gè)框的最小區(qū)域的面積。
GIoU與IoU相比主要優(yōu)勢(shì)為:IoU的取值范圍是[0,1],而GIoU取值范圍為[-1,1]。當(dāng)預(yù)測(cè)框與真實(shí)框重合的時(shí)候取到1,當(dāng)兩者之間不相交且距離無限遠(yuǎn)時(shí)取最小值-1。IoU只關(guān)注重疊區(qū)域,而GIoU不僅關(guān)注重疊區(qū)域,還關(guān)注其余非重疊區(qū)域,因此GIoU能夠更好的衡量2個(gè)框之間距離。
在進(jìn)行數(shù)字檢測(cè)前,首先訓(xùn)練模型,訓(xùn)練集為0~9的圖片共50張,像素均為28×28,部分?jǐn)?shù)據(jù)集如圖5所示,構(gòu)建4層卷積網(wǎng)絡(luò)如表2所示,最后經(jīng)過2次全連接層,輸出為10×1的向量。采用AdamOptimizer優(yōu)化方法,一共迭代500次。
圖5 訓(xùn)練集部分?jǐn)?shù)據(jù)
表2 特征提取卷積層參數(shù)
訓(xùn)練結(jié)束后,對(duì)圖像進(jìn)行預(yù)處理。先將圖像變?yōu)榛叶葓D,再進(jìn)行二值化,接著對(duì)其進(jìn)行開運(yùn)算,以消除數(shù)碼管之間的間隙。最后加載權(quán)重讀取儀表示數(shù)。運(yùn)行結(jié)果如圖6所示。
圖6 數(shù)字儀表檢測(cè)
本文實(shí)驗(yàn)在Ubuntu 16.04 LTS、CUDA10.0、cuDNN7.5、NVIDIA GeForce GTX 1080的系統(tǒng)下進(jìn)行,深度學(xué)習(xí)框架是PyTorch 1.1.0,環(huán)境語言為python3.6。使用VOC數(shù)據(jù)格式對(duì)800張儀表圖像進(jìn)行標(biāo)注并訓(xùn)練,在200張儀表圖像上進(jìn)行測(cè)試。使用小批量隨機(jī)梯度下降(SGD)進(jìn)行訓(xùn)練,動(dòng)量設(shè)置為0.9,初始學(xué)習(xí)率為0.001,權(quán)重衰減率為0.000 5,最小批量是16。當(dāng)?shù)螖?shù)到達(dá)6 000、8 000、10 000時(shí)學(xué)習(xí)率降為先前的1/10,一共訓(xùn)練200個(gè)epoch。
在目標(biāo)檢測(cè)中,常使用平均精度(mAP)作為評(píng)價(jià)不同算法精度的指標(biāo)。其主要由查準(zhǔn)率和查全率組成,公式分別為:
(5)
(6)
式中:precision為模型預(yù)測(cè)為正例中真正例的比率,即預(yù)測(cè)的準(zhǔn)確性;recall為所有正例中被正確預(yù)測(cè)出的比率;TP為真正例,指模型正確預(yù)測(cè)出物體;FP為假正例,指模型預(yù)測(cè)錯(cuò)誤,預(yù)測(cè)出不存在的物體;FN為假反例,指模型漏檢,沒有預(yù)測(cè)出物體。
在一個(gè)類別中對(duì)預(yù)測(cè)結(jié)果排序,可以得到一條查準(zhǔn)率-查全率(precision-recall)曲線,曲線下的面積即為AP值,對(duì)所有類別的AP值求平均,可得mAP值。實(shí)驗(yàn)結(jié)果如表3所示。
表3 不同算法在測(cè)試集下的結(jié)果
由表3可知,在分辨率為300×300情況下,改進(jìn)后的SSD與改進(jìn)前相比mAP提升了4.6%,運(yùn)行速度也稍有提升。圖7為使用改進(jìn)SSD算法后在測(cè)試集上的檢測(cè)圖,在保證速度的前提下,能更精確的識(shí)別目標(biāo)。
圖7 儀表定位檢測(cè)
在200張儀表圖像中數(shù)字共有763個(gè),利用本文算法對(duì)其進(jìn)行數(shù)字檢測(cè),得到98.3%識(shí)別率,檢測(cè)效果如圖8所示。
圖8 儀表讀數(shù)
本文提出了基于SSD的改進(jìn)算法,將基礎(chǔ)網(wǎng)絡(luò)由VGG-16變?yōu)镽esNet50,在保證速度的前提下提取圖片中更多特征信息。加入特征金字塔結(jié)構(gòu),將圖片中的語義信息與細(xì)節(jié)信息進(jìn)行融合,提高了模型對(duì)于小目標(biāo)的檢測(cè)精度。最后,引入GIoU這一評(píng)估指標(biāo),不僅關(guān)注預(yù)測(cè)框與真實(shí)框的重疊區(qū)域,還關(guān)注非重疊區(qū)域,使用GIoU Loss作為損失函數(shù)使得位置回歸更加準(zhǔn)確。在表盤數(shù)字檢測(cè)中,利用卷積神經(jīng)網(wǎng)絡(luò)充分提取數(shù)字特征。實(shí)驗(yàn)結(jié)果表明,本文提出的算法在NVIDIA GeForce GTX 1080環(huán)境、儀表測(cè)試集上達(dá)到78.9 mAP,數(shù)字識(shí)別率達(dá)到98.3%,此算法檢測(cè)效果好。后續(xù)將繼續(xù)簡(jiǎn)化模型,提升算法的運(yùn)行速度與檢測(cè)精度,以應(yīng)對(duì)更為復(fù)雜的場(chǎng)景。