林鴻正,張 斌,趙成龍,戴 杰,湛 敏
(1.中國計(jì)量大學(xué)計(jì)量測試工程學(xué)院,浙江杭州 310018;2.杭州萊霆科技有限公司,浙江杭州 310018)
指針式壓力表是一種常用的壓力測量設(shè)備。然而,讀取指針式壓力表的數(shù)值需要一定的技能和經(jīng)驗(yàn),且容易受到視覺誤差、心理因素等方面的影響。因此,研究準(zhǔn)確、高效的指針式壓力表讀數(shù)方法具有重要意義[1]。
傳統(tǒng)的方法主要基于圖像處理技術(shù),通過攝像頭獲取壓力表的圖像,再利用圖像處理算法識別指針位置和讀數(shù)[2]。然而,這些方法普遍存在對光照、鏡頭角度、背景等環(huán)境因素的要求較高,以及處理速度較慢等問題。近年來,深度學(xué)習(xí)技術(shù)的快速發(fā)展為指針式壓力表讀數(shù)研究提供了新的解決方案。深度學(xué)習(xí)技術(shù)可以通過訓(xùn)練大量的壓力表圖像數(shù)據(jù)來學(xué)習(xí)讀數(shù)規(guī)律,從而實(shí)現(xiàn)更加準(zhǔn)確、高效的讀數(shù)。常用的模型包括卷積神經(jīng)網(wǎng)絡(luò)(CNN)、循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)等[3]。 文獻(xiàn)[4]使用PrRoiPolling 代替現(xiàn)有的Mask-CRNN 中的RoiAlign,對于自然環(huán)境有更高的魯棒性,通過訓(xùn)練這些模型可以使得模型具備對指針位置的檢測和讀數(shù)的識別能力。此外,研究者們還提出了一些新的技術(shù),如小目標(biāo)檢測、文字識別等,來提高識別準(zhǔn)確率和處理速度。文獻(xiàn)[5]提出了一種基于YOLOX卷積網(wǎng)絡(luò)和語義分割技術(shù)的新方法,取得了較高的準(zhǔn)確率。文獻(xiàn)[6]提出了一種基于Fast-CRNN 的方法,用于無人機(jī)巡檢中自動識別電表,能有效識別各種亮度等級和拍攝角度的電表。本文通過了解國內(nèi)外深度學(xué)習(xí)技術(shù)的研究現(xiàn)狀,以指針式壓力表為對象,提出了一種結(jié)合文字識別與圖像處理的指針式壓力表自動讀數(shù)方法。所提出的方法兼顧精確度和識別速度,能很好地適應(yīng)指針式儀表自動校驗(yàn)儀的運(yùn)用場景。
為更準(zhǔn)確地定位和識別刻度值的位置和內(nèi)容,本文采用兩個(gè)深度學(xué)習(xí)的模型,分別進(jìn)行刻度值的定位與識別[7]。在刻度定位部分,以DBNet 網(wǎng)絡(luò)為基礎(chǔ),對壓力表的各個(gè)刻度值進(jìn)行定位,畫出定位框;在內(nèi)容識別部分,將定位完成的圖像按照定位框進(jìn)行分割,并將分割后的圖像傳入以CRNN 為基礎(chǔ)的文本識別網(wǎng)絡(luò)。
如前文所述,相機(jī)采集到的指針式壓力表的圖像易呈現(xiàn)背景雜亂、光線等級和拍攝角度各異、表盤模糊等特點(diǎn)。在文本檢測網(wǎng)絡(luò)的選擇方面需要盡可能考慮這些干擾因素,且保證檢測的速度和準(zhǔn)確性。
1.1.1 改進(jìn)的DBNet 網(wǎng)絡(luò)結(jié)構(gòu)
本文選擇DBNet網(wǎng)絡(luò)為研究對象。DBNet是一種基于像素點(diǎn)分割的文本檢測算法,采用了ResNet-18[8]作為骨干網(wǎng)絡(luò)進(jìn)行特征提取,以FPN[9]作為特征金字塔網(wǎng)絡(luò),用于在多個(gè)尺度和多個(gè)空間位置上捕捉文本特征,在預(yù)測部分采用分割和二值化策略來優(yōu)化文本區(qū)域候選生成,以獲得更好的識別和定位效果[10]。其網(wǎng)絡(luò)結(jié)構(gòu)如圖1 所示。
圖1 DBNet 網(wǎng)絡(luò)模型
本文改進(jìn)的DBNet網(wǎng)絡(luò)結(jié)構(gòu)可分為三部分:
1)具有提取特征功能的主干網(wǎng)絡(luò)ResNet-18 在DBNet 網(wǎng)絡(luò)的基礎(chǔ)上進(jìn)行了改進(jìn),將第一個(gè)卷積層的通道數(shù)設(shè)置為128,使其在后面所有的卷積層中通道數(shù)都是原來模型的2 倍,犧牲少量運(yùn)算速度來換取更多的文本檢測目標(biāo)特征,以提高文本檢測準(zhǔn)確度。
2)以FPN 結(jié)構(gòu)通過加入側(cè)向連接和上采樣,來以極小的附加計(jì)算量構(gòu)建不同尺度的具有高級語義信息的特征金字塔網(wǎng)絡(luò)結(jié)構(gòu)。
3)基于提取到的圖像特征預(yù)測出概率圖和閾值圖,并利用可微分二值化得到近似二值圖,最后通過后處理得到文本包圍四點(diǎn)標(biāo)注框,通過可微分二值化優(yōu)化訓(xùn)練過程從而簡化后處理,大幅提高文本檢測效率。
1.1.2 損失函數(shù)
本文的損失函數(shù)由三個(gè)部分構(gòu)成,分別為概率圖損失Ls、閾值圖損失Lt以及二值圖損失Lb。其計(jì)算公式如下:
式中:α和β是權(quán)重參數(shù),可以根據(jù)模型實(shí)際使用情況自行定義,本文根據(jù)經(jīng)驗(yàn)設(shè)置為5 和10。DBNet 網(wǎng)絡(luò)提出Ls和Lb都應(yīng)用了二進(jìn)制交叉熵(BCE)損失,為了克服正負(fù)樣本的不平衡,通過對硬樣本進(jìn)行采樣,在BCE 損失中使用硬負(fù)樣本挖掘,公式如下:
式中:Si表示數(shù)據(jù)集;yi表示樣本標(biāo)簽,1 代表正類,0 代表負(fù)類;xi表示樣本預(yù)測為正類的概率。交叉熵Loss 可以用在大多數(shù)語義分割場景中,但它有一個(gè)明顯的缺點(diǎn),那就是對于只用分割前景和背景時(shí),當(dāng)前景像素的數(shù)量遠(yuǎn)遠(yuǎn)小于背景像素的數(shù)量時(shí),即背景元素的數(shù)量遠(yuǎn)大于前景元素的數(shù)量,背景元素?fù)p失函數(shù)中的成分就會占據(jù)主導(dǎo),使得模型嚴(yán)重偏向背景,導(dǎo)致模型訓(xùn)練預(yù)測效果不好。
因此本文提出使用Dice 函數(shù)的變體[11]作為Ls和Lb的損失函數(shù)。集合相似度度量函數(shù)通常用于計(jì)算兩個(gè)樣本的相似度,屬于metric learning。X為真實(shí)目標(biāo)mask,Y為預(yù)測目標(biāo)mask,希望X和Y交集盡可能大,占比盡可能大,但是Loss 需要逐漸變小,所以在比值前面添加負(fù)號,可以緩解樣本中前景背景(面積)不平衡帶來的消極影響,前景背景不平衡也就是說圖像中大部分區(qū)域是不包含目標(biāo)的,只有一小部分區(qū)域包含目標(biāo)。DiceLoss 訓(xùn)練更關(guān)注對前景區(qū)域的挖掘,即保證有較低的FN,公式如下:
式中:α為預(yù)測目標(biāo)系數(shù),可以通過調(diào)整α的大小來影響損失函數(shù)對預(yù)測目標(biāo)的關(guān)注程度;Smooth 為平滑系數(shù)。上述兩個(gè)變量可以根據(jù)模型的具體使用情況來定義,本文根據(jù)經(jīng)驗(yàn)設(shè)置為α=2.5,Smooth=0.5。
Lt計(jì)算為擴(kuò)展文本多邊形Gd內(nèi)的預(yù)測和標(biāo)簽之間的距離之和:
式中:Rd是擴(kuò)張多邊形Gd內(nèi)像素的一組索引;yi是閾值映射的標(biāo)簽。
文本區(qū)域檢測效果如圖2 所示。
圖2 文本區(qū)域檢測效果圖
對于指針式儀表刻度值的識別,值得注意的是DBNet 檢測模塊提取到的文本字符長度有所不同,因此無法使用傳統(tǒng)的文本識別網(wǎng)絡(luò)。CRNN 作為目前主流的文本識別模型,具有可以處理任意長度文本的優(yōu)勢,滿足刻度值識別需求。
1.2.1 CRNN 網(wǎng)絡(luò)結(jié)構(gòu)
通過改進(jìn)的DBNet 文本檢測網(wǎng)絡(luò)后,得到各個(gè)刻度值的四點(diǎn)標(biāo)注框。本文通過CRNN 對其進(jìn)行文字識別[12],CRNN 主要包含三個(gè)部分,如圖3 所示。
圖3 CRNN 網(wǎng)絡(luò)結(jié)構(gòu)
圖3 中:卷積層是采用了去除全連接層的CNN 作為特征提取方法,從輸入圖像中提取特征序列;循環(huán)層由基于RNN 改進(jìn)的雙向長短期記憶(Bi-LSTM)網(wǎng)絡(luò)構(gòu)成,用于預(yù)測特征序列中的每一個(gè)特征向量的標(biāo)簽分布;轉(zhuǎn)錄層采用連接時(shí)間分類(Connectionist Temporal Classification, CTC)模型,將循環(huán)層產(chǎn)生的標(biāo)簽分布通過去重整合等操作,得到與輸入序列長度相同的識別結(jié)果序列。
1.2.2 損失函數(shù)
CRNN 的損失函數(shù)是CTC 損失函數(shù),它是一種無監(jiān)督的損失函數(shù),用于解決輸入數(shù)據(jù)與給定標(biāo)簽的對齊問題,特別適合于序列數(shù)據(jù)的預(yù)測。通過卷積層和循環(huán)層后,每一個(gè)特征向量都輸出一個(gè)預(yù)測值y=y1,y2,…,yT,其中T是序列長度。這里,每個(gè)yT∈R||L′是集合L′=L∪上的概率分布,其中L 包含任務(wù)中的所有標(biāo)簽(例如所有阿拉伯?dāng)?shù)字字符),以及“空白”標(biāo)簽。序列映射函數(shù)?定義為序列到序列,其中T為長度。? 將π映射到? 上,首先刪除重復(fù)的標(biāo)簽,然后刪除“空白”。
例如刻度值“100”可能輸出的字符串包括“11000”“1100”“111100”等一系列情況,此時(shí)無法通過刪除重復(fù)字符得到最終結(jié)果。因此引入了空白符(blank)機(jī)制,以“-”表示。RNN 輸出序列時(shí),在文本標(biāo)簽中重復(fù)的字符之間插入一個(gè)“-”,如上述的刻度值“100”,可能的輸出字符串就改為“11-00-000”“1-00-0”“1-0-000”等,最后映射為標(biāo)簽文本? 的總概率為:
式中:?-1(?)代表從序列到序列的映射函數(shù)? 變換后是文本? 的所有路徑集合;而π則是其中的一條路徑。每條路徑的概率為各個(gè)時(shí)間步中對應(yīng)字符的分?jǐn)?shù)的乘積。
用X={?i,li}i表示訓(xùn)練數(shù)據(jù)集,其中?i為訓(xùn)練圖像,li為真值標(biāo)簽序列。目的是最小化真實(shí)值的條件概率的負(fù)對數(shù)似然:
在得到指針式儀表刻度值的文本及其坐標(biāo)后,還需進(jìn)行以下三個(gè)步驟才能得到儀表的最終示數(shù)[13]:
1)尋找儀表的圓心坐標(biāo)。
2)以圓心坐標(biāo)為極坐標(biāo)變換中心,將圖像轉(zhuǎn)換到極坐標(biāo)中。
3)通過距離法計(jì)算出儀表示數(shù)。
據(jù)上文所述,經(jīng)過DBNet 網(wǎng)絡(luò)提取得到刻度值文本定位框后,本文采用最小二乘法擬合圓,得到的圓心坐標(biāo)作為極坐標(biāo)變換的刻度值。文本擬合圓及其中心坐標(biāo)如圖4 所示,并以該坐標(biāo)為中心,將圖像從笛卡爾坐標(biāo)系轉(zhuǎn)換到極坐標(biāo)系,如圖5 所示。
圖4 刻度值文本擬合圓
圖5 極坐標(biāo)變換結(jié)果
其具體過程如下:
1)圓的方程可以表示為:
式中:(A,B)為圓心坐標(biāo);R為圓的半徑。式(7)可以轉(zhuǎn)換為:
式中:a=-2A;b=-2B;c=A2+B2-R2。只要通過式(8)求得a、b、c后,就可以計(jì)算得到圓心的坐標(biāo)和圓的半徑。最小二乘法通過求解方差平方和的最小值來求解a、b、c這三個(gè)參數(shù)。樣本點(diǎn)(xk,yk)與圓心距離的平方與圓半徑的平方之差為:
所有樣本點(diǎn)的誤差平方和為:
用式(10)對a、b、c求偏導(dǎo),令偏導(dǎo)等于0,即可解得使函數(shù)值最小的a、b、c值,從而計(jì)算出圓心坐標(biāo)和圓半徑。
2)極坐標(biāo)變換的實(shí)質(zhì)是以圖像中的某個(gè)點(diǎn)為中心,把圖像從笛卡爾坐標(biāo)系轉(zhuǎn)換到極坐標(biāo)系。其轉(zhuǎn)換公式如下:
式中:x0、y0是點(diǎn)在原坐標(biāo)系中的橫坐標(biāo)和縱坐標(biāo);ρ和θ是極坐標(biāo)系下的極徑和極角;Cx和Cy為極坐標(biāo)變換的中心,已經(jīng)由步驟1)所述基于刻度值文本的極坐標(biāo)中心提取方法得到。算法算得原圖每個(gè)像素點(diǎn)在極坐標(biāo)系下的極徑和極角后,以極徑和極角為橫縱坐標(biāo),將圖像在直角坐標(biāo)系下展開,展開后,原本呈圓弧狀分布的刻度呈現(xiàn)直線形形狀分布。
觀察極坐標(biāo)展開后的指針和刻度線圖像可知,指針在圖像中呈垂直分布,由此,將整張圖像二值化后做垂直投影,統(tǒng)計(jì)每一列的像素點(diǎn)數(shù)量,找到累加黑色像素點(diǎn)個(gè)數(shù)最多的那一列,作為指針?biāo)诘乃轿恢?。同理,找到刻度值對?yīng)的主刻度線的位置,在得到所有主刻度線與指針位置之后,篩選出距離指針左右兩側(cè)各自最近的主刻度線,結(jié)合上文所述的刻度值文本識別得到指針處于的刻度區(qū)間,再通過距離法計(jì)算得出具體示數(shù),公式如下:
式中:V為最后的讀數(shù);Vr為指針右邊刻度線對應(yīng)的刻度值;Vl為指針左邊刻度線對應(yīng)的刻度值;Xpointer為已經(jīng)得到指針直線所在水平坐標(biāo);Xl-scale為指針左邊距離指針最近的主刻度線的水平坐標(biāo);Xr-scale為指針右邊距離指針最近的主刻度線的水平坐標(biāo)。
實(shí)驗(yàn)是在Windows 10 專業(yè)版系統(tǒng)安裝Anaconda 3,使用Intel Core i5-9300 CPU 以及GTX 1660TI 顯卡加速,完成實(shí)驗(yàn)訓(xùn)練。
本次實(shí)驗(yàn)采用400張人工拍攝的指針式儀表真實(shí)樣本作為數(shù)據(jù)集,經(jīng)過圖像增強(qiáng)擴(kuò)充至800 張,采用json 數(shù)據(jù)格式進(jìn)行人工標(biāo)注,隨機(jī)選取700張圖像作為訓(xùn)練集,100 張圖像作為測試集。設(shè)置學(xué)習(xí)率為0.001,最大迭代次數(shù)為120,批輸入大小為16,實(shí)驗(yàn)參數(shù)設(shè)計(jì)如表1所示。
表1 實(shí)驗(yàn)主要參數(shù)表
本文從最大誤差、平均誤差和檢測時(shí)間三個(gè)指標(biāo)對Hough 直線檢測方法、DBNet+CRNN 檢測方法與本文方法進(jìn)行對比,如表2 所示。
表2 儀表讀數(shù)算法性能評價(jià)
從表2 的測試結(jié)果可以看出,本文檢測精度最大誤差為1.05%,檢測時(shí)間為0.8 s,滿足常規(guī)工業(yè)需求,并在檢測精度方面較傳統(tǒng)的檢測方法有較大的提升。對誤差較大的圖像樣本進(jìn)行分析,發(fā)現(xiàn)該類數(shù)據(jù)多為拍攝角度過大或遮擋刻度值關(guān)鍵部位,使部分特征丟失造成算法無法擬合出一個(gè)較完美的圓,最終導(dǎo)致檢測結(jié)果誤差較大。
本文采用改進(jìn)的DBNet 實(shí)現(xiàn)了指針式儀表刻度值的定位,采用CRNN 實(shí)現(xiàn)了指針式儀表刻度值的識別,基于神經(jīng)網(wǎng)絡(luò)和機(jī)器視覺設(shè)計(jì)了一種基于刻度值的指針式儀表讀數(shù)算法,實(shí)現(xiàn)了指針式儀表的讀數(shù)。具體內(nèi)容包括:
1)針對刻度值檢測問題,在DBNet 的基礎(chǔ)上做出了適應(yīng)性改進(jìn),增加了主干網(wǎng)絡(luò)ResNet-18 各個(gè)卷積層的通道數(shù),重新設(shè)計(jì)了損失函數(shù),加強(qiáng)了其對指針式儀表刻度值的檢測能力,通過實(shí)驗(yàn)表明該方法有更好的準(zhǔn)確性與魯棒性。
2)針對指針式儀表讀數(shù)問題,采用了極坐標(biāo)展開的方法,將弧形的刻度值展開成一條直線,提高了讀數(shù)的準(zhǔn)確率。
本文提出的方法為指針式儀表讀數(shù)領(lǐng)域提供了新思路,但本文方法仍有不足,對拍攝角度過大以及遮擋刻度值部位的樣本無法提取足夠的特征導(dǎo)致檢測結(jié)果誤差較大,后續(xù)將對該類樣本進(jìn)一步分析和處理,克服遮擋和角度過大的問題。