虞 健,陳凱迪,施 展,孔 明
(1.中國(guó)計(jì)量大學(xué) 計(jì)量測(cè)試工程學(xué)院,杭州 310000;2.芋頭科技(杭州)有限公司,杭州 310000)
已有的指針式儀表的讀數(shù)檢測(cè)方法一般是先通過儀表的結(jié)構(gòu)化特征,使用特征提取及匹配的方式進(jìn)行儀表檢測(cè)和定位[1],例如包括使用Hough圓形檢測(cè)[2]、模板匹配[3]、特征點(diǎn)匹配[4]等方法來(lái)檢測(cè)圖像中的儀表位置,隨后通過旋轉(zhuǎn)角度法[5]、Hough直線檢測(cè)[6]、幀差剪影法[7]等方法檢測(cè)儀表中的指針位置,最后通過角度法或距離法[8],計(jì)算指針在兩個(gè)已知刻度位置之間的角度之比或距離之比來(lái)獲得指針式儀表的讀數(shù)。這些方法中,通常需要對(duì)圖像進(jìn)行預(yù)處理,例如需要考慮待測(cè)儀表的傾斜角度[5]進(jìn)行透視變換。如果通過深度學(xué)習(xí)模型獲得替換上述的步驟[9-11],由于指針式儀表結(jié)構(gòu)不標(biāo)準(zhǔn),對(duì)于訓(xùn)練模型所需的數(shù)據(jù)量要求較高。另外,通過角度法或距離法計(jì)算指針式儀表的讀數(shù)是通過儀表圖像中的角度或距離信息來(lái)計(jì)算讀數(shù),會(huì)受到儀表圖像拍攝角度而引起的圓形儀表盤變形以及因?yàn)橹羔樛队暗奖肀P上的位置差異而導(dǎo)致的讀數(shù)偏差。
因此,本文提出了一種新的算法框架,通過將指針式儀表讀數(shù)檢測(cè)拆分為儀表檢測(cè)、語(yǔ)義分割、讀數(shù)回歸3 個(gè)基于深度學(xué)習(xí)的步驟,利用小規(guī)模的標(biāo)注數(shù)據(jù)量,快速、準(zhǔn)確地實(shí)現(xiàn)對(duì)不同拍攝角度下對(duì)指針式儀表圖像進(jìn)行讀數(shù)檢測(cè)。
本文算法框架的流程如圖1 所示。首先對(duì)儀表的圖像進(jìn)行目標(biāo)檢測(cè),并對(duì)檢測(cè)后的圖像進(jìn)行語(yǔ)義分割,從而得到僅包含刻度和指針信息的分割圖像,最后基于分割圖像進(jìn)行指針讀數(shù)的回歸,得到儀表讀數(shù)。在儀表檢測(cè)和語(yǔ)義分割過程中,采用YOLOv5-s 網(wǎng)絡(luò)模型和Unet 網(wǎng)絡(luò)模型對(duì)實(shí)驗(yàn)數(shù)據(jù)進(jìn)行訓(xùn)練。
圖1 算法流程Fig.1 Flow chart of algorithm
對(duì)于讀數(shù)回歸模型結(jié)構(gòu)根據(jù)指針式儀表識(shí)別任務(wù)的特點(diǎn)進(jìn)行了優(yōu)化。具體地,由于需要輸出范圍為0~100 之間的儀表讀數(shù),因此讀數(shù)回歸過程中,基于儀表讀數(shù)回歸任務(wù)對(duì)標(biāo)準(zhǔn)的Resnet18 模型進(jìn)行了調(diào)整。在輸出層上,將標(biāo)準(zhǔn)的Resnet18 最后的全連接層的輸出結(jié)果修改為一維數(shù)據(jù),并采用Sigmoid 函數(shù)將輸出的數(shù)據(jù)的值范圍約束在0~100 之間,以對(duì)應(yīng)儀表讀數(shù)的區(qū)間。在模型訓(xùn)練使用的損失函數(shù)上,將用于多分類任務(wù)的CrossEntropyLoss 修改為MSELoss,以適應(yīng)儀表讀數(shù)的線性輸出結(jié)果;使用Adam 優(yōu)化器,以動(dòng)態(tài)調(diào)整訓(xùn)練過程中的學(xué)習(xí)率。在本文中,將調(diào)整后的Resnet18 稱為Resnet18-CNN 模型。
訓(xùn)練神經(jīng)網(wǎng)絡(luò)的服務(wù)器的硬件配置包括Intel(R)Xeon(R)Gold 6342 處理器、內(nèi)存256 GB、Nvidia A100 顯卡,操作系統(tǒng)為Ubuntu 18.04,深度學(xué)習(xí)框架為Pytorch 1.12。
實(shí)驗(yàn)用的指針式儀表主要選擇敞夢(mèng)儀表有限公司生產(chǎn)的0~100 ℃的指針式的溫度計(jì)儀表,可以通過溫度控制方便的獲得不同指針位置的儀表圖像。
實(shí)驗(yàn)用的圖像數(shù)據(jù)使用紅米K30 Pro 5G 手機(jī)的攝像模式拍攝,視頻分辨率為1920×1080。采用幀提取的方式從視頻圖像中提取圖像。
2.2.1 儀表檢測(cè)數(shù)據(jù)集
儀表檢測(cè)的訓(xùn)練數(shù)據(jù)集采用百度飛漿的開源項(xiàng)目提供的數(shù)據(jù)集(以下簡(jiǎn)稱數(shù)據(jù)集1),其中共有標(biāo)記好的訓(xùn)練集儀表圖片725 張,驗(yàn)證集儀表圖片58 張,其中包括單儀表、多儀表以及無(wú)儀表的干擾圖像場(chǎng)景。將其標(biāo)注方式轉(zhuǎn)換為適合YOLOv5 模型的數(shù)據(jù)結(jié)構(gòu)。
2.2.2 儀表語(yǔ)義分割數(shù)據(jù)集
通過控制溫度計(jì)儀表下端探頭的接觸溫度,手工采集了不同指針位置的儀表圖像,其中包括每間隔1 單位、0~100 單位范圍的101 張?jiān)紨?shù)據(jù),并使用數(shù)據(jù)增強(qiáng)的方式擴(kuò)大到2424 張(以下簡(jiǎn)稱數(shù)據(jù)集2)。數(shù)據(jù)增強(qiáng)的方法使用了Python 的第三方庫(kù)imgaug 提供的方法,包括:像素點(diǎn)丟失(Dropout)、縮放、仿射變換、對(duì)比度調(diào)整、銳化、扭曲平滑方式中的隨機(jī)一種或多種。如圖2 所示,在對(duì)數(shù)據(jù)的標(biāo)簽進(jìn)行標(biāo)注時(shí),將整個(gè)指針作為一個(gè)類別進(jìn)行標(biāo)注,將所有刻度條所圍成了的環(huán)狀區(qū)域作為一個(gè)類別標(biāo)注。
圖2 儀表語(yǔ)義分割數(shù)據(jù)集示例Fig.2 Examples of data for meter segmentation
2.2.3 儀表讀數(shù)回歸數(shù)據(jù)集
儀表讀數(shù)回歸數(shù)據(jù)集采用的是將數(shù)據(jù)集2 中的原始數(shù)據(jù)通過語(yǔ)義分割模型生成的灰度的分割圖像作為回歸數(shù)據(jù)集里面的圖像數(shù)據(jù),并將圖像所對(duì)應(yīng)的實(shí)際讀數(shù)作為數(shù)據(jù)標(biāo)簽,并處理為Pytorch框架中Dataset 數(shù)據(jù)類型。
由于讀數(shù)回歸是從儀表的結(jié)構(gòu)特征中獲取指針式儀表的讀數(shù)值,為了避免對(duì)數(shù)據(jù)預(yù)處理過程中的分辨率調(diào)整導(dǎo)致儀表圖像產(chǎn)生畸變,影響最終結(jié)果,在對(duì)數(shù)據(jù)集的預(yù)處理中,加入了對(duì)圖像數(shù)據(jù)進(jìn)行了Padding(填充)處理以獲得正方形的圖片,隨后再對(duì)Padding 后的正方形圖像進(jìn)行縮放,以得到適合神經(jīng)網(wǎng)絡(luò)處理的圖片尺寸大小。在本文使用的Resnet18-CNN 模型中,采用224×224 分辨率的圖片作為模型的輸入。
訓(xùn)練過程中,將Batch Size(批數(shù)量)設(shè)定為4,Epoch(迭代次數(shù))設(shè)定為50,圖像的分辨率設(shè)定為640。在判斷網(wǎng)絡(luò)的訓(xùn)練結(jié)果的時(shí)候,采用mAP 對(duì)模型進(jìn)行評(píng)估,mAP 為平均精度的簡(jiǎn)稱,其主要代表是在不同的IOU(交疊率)閾值下,物體檢測(cè)的準(zhǔn)確率。例如mAP_0.5-0.95 指在IOU 從0.5~0.95 之間的平均精度;如果mAP_0.5-0.95 越大,則代表該模型訓(xùn)練結(jié)果的準(zhǔn)確率越高。
基于數(shù)據(jù)集1 的訓(xùn)練結(jié)果如圖3 所示,可以看到訓(xùn)練集的訓(xùn)練損失函數(shù)隨著Epoch 增加而不斷下降,證明模型成功收斂。同時(shí)mAP_0.5:0.95 隨著訓(xùn)練的Epoch 增加也提升,證明模型的識(shí)別準(zhǔn)確率不斷提升。而mAP_0.5:0.95 則在40 個(gè)Epoch 時(shí)候穩(wěn)定在0.995,說明40 個(gè)Epoch 之后模型已經(jīng)達(dá)到最優(yōu)狀態(tài)。
圖3 YOLOv5 訓(xùn)練結(jié)果Fig.3 Training result of YOLOv5
在進(jìn)行Unet 模型的訓(xùn)練過程中,將Batch Size設(shè)置為1,Epoch 設(shè)定為20。在判斷Unet 網(wǎng)絡(luò)的訓(xùn)練結(jié)果的時(shí)候,采用Validation Dice(驗(yàn)證骰)對(duì)模型進(jìn)行評(píng)估,Validation Dice 是用來(lái)評(píng)價(jià)語(yǔ)義分割任務(wù)的常用參數(shù),其意義是分割區(qū)域和真值區(qū)域之間重合面積的2 倍和這兩個(gè)區(qū)域的面積之和的比值,如果Validation Dice 越大,則模型對(duì)圖像的語(yǔ)義分割的準(zhǔn)確性約高,當(dāng)Validation Dice 為1 的時(shí)候,則表示是分割后的圖像和真值完全重合。
針對(duì)數(shù)據(jù)集2 的訓(xùn)練結(jié)果如圖4 所示,從圖4(a)可以看到,當(dāng)訓(xùn)練開始之后,Validation Dice 迅速上升,當(dāng)?shù)? 個(gè)Epoch 后,整個(gè)模型的Validation Dice 數(shù)值為0.97,已經(jīng)接近1;從圖4(b)訓(xùn)練的損失函數(shù)也可以看到在第5 個(gè)Epoch 后,Loss 已經(jīng)接近于0,證明模型已經(jīng)收斂且分割的效果較好。
圖4 Unet 訓(xùn)練結(jié)果Fig.4 Training result of Unet
在使用Resnet18-CNN 進(jìn)行訓(xùn)練的時(shí)候,將Batch Size 設(shè)定為8,Epoch 設(shè)定為100,將數(shù)據(jù)集的80%作為訓(xùn)練集,20%作為測(cè)試集。在每個(gè)Epoch 結(jié)束之后對(duì)測(cè)試集進(jìn)行一次推理計(jì)算,并將測(cè)試集中所有圖像數(shù)據(jù)的推理結(jié)果和真值之間差做平均,得到均值偏差。以均值偏差來(lái)判斷模型的識(shí)別準(zhǔn)確率,即均值偏差越低,認(rèn)為模型的準(zhǔn)確性越高。
訓(xùn)練集的訓(xùn)練結(jié)果如圖5 所示。從圖5(a)可以看到隨著Epoch 增加,損失函數(shù)呈現(xiàn)出下降的趨勢(shì),在達(dá)到80 個(gè)Epoch 時(shí),損失函數(shù)的波動(dòng)趨于穩(wěn)定,并在1 附近跳動(dòng),證明模型已經(jīng)收斂;從圖5(b)可以看到均值偏差也隨著訓(xùn)練的過程逐漸降低,盡管在訓(xùn)練初期,均值偏差偶爾有較大的波動(dòng),但是在80 個(gè)Epoch 之后,其主要在0.6 左右波動(dòng),選取了均值偏差最低的點(diǎn)0.48 作為最佳模型參數(shù),來(lái)進(jìn)行結(jié)果驗(yàn)證。
圖5 Resnet18-CNN 模型的訓(xùn)練結(jié)果Fig.5 Training result of Resnet18-CNN model
另行拍攝了不同角度的儀表的數(shù)據(jù)對(duì)上述方法訓(xùn)練的模型進(jìn)行驗(yàn)證。如圖6 所示,其中包括通過YOLOv5 模型檢測(cè)出來(lái)的指針式儀表的正面拍攝圖片、左側(cè)拍攝圖片和右側(cè)拍攝圖片。將通過YOLOv5 模型檢測(cè)到的儀表圖像送入訓(xùn)練好的Unet模型之后,獲得儀表的分割圖像如圖6 第2 行所示,可以看到正面拍攝圖片的分割結(jié)果基本完美,指針和刻度都得到了準(zhǔn)確的分割,而左側(cè)拍攝圖片和右側(cè)拍攝圖片的指針中心位置有一些信息丟失,但是刻度線基本做到了準(zhǔn)確的分割。將分割后的圖片送入ResNet18-CNN 模型后,即可得到相應(yīng)的儀表讀數(shù)。
圖6 對(duì)于Unet 的驗(yàn)證結(jié)果Fig.6 Demonstration result of Unet
作為對(duì)比,在使用Unet 分割后的圖像的基礎(chǔ)上,模擬了文獻(xiàn)[11]上的距離法來(lái)獲得儀表讀數(shù),使用指針附近的2 個(gè)已知標(biāo)記刻度的位置和使用Hough 直線法檢測(cè)出來(lái)的指針位置,使用2 個(gè)刻度點(diǎn)到指針直線的距離之比來(lái)計(jì)算讀數(shù)。選取了2 個(gè)讀數(shù)值在不同角度拍攝的7 個(gè)儀表圖像樣本,將Resnet18-CNN 模型輸出結(jié)果、距離法輸出的結(jié)果和肉眼人工讀數(shù)結(jié)果進(jìn)行比較,如表1 所示??梢钥闯觯捎趫D片拍攝角度的不同,因?yàn)橹羔樛队霸诳潭绕矫嫔系奈恢卯a(chǎn)生偏差,導(dǎo)致人工讀數(shù)會(huì)產(chǎn)生約1 個(gè)刻度左右的讀數(shù)偏差。相比于人工讀數(shù)和距離法讀數(shù)的結(jié)果,通過本文的ResNet18-CNN 回歸模型的讀數(shù)結(jié)果的讀數(shù)偏差更小。
表1 本方法讀數(shù)和距離法讀數(shù)、人工讀數(shù)的結(jié)果比較Tab.1 Comparison of results of this method with the distance method reading and manual reading
由于分割后的圖形僅保留了指針讀數(shù)相關(guān)的結(jié)構(gòu)特征,使用深度神經(jīng)網(wǎng)絡(luò)從分割好的儀表圖像中直接進(jìn)行讀數(shù)回歸,因此相比于直接從原始圖像回歸出讀數(shù)[9-10],本方法讀數(shù)回歸模型訓(xùn)練的模型復(fù)雜度降低、且訓(xùn)練所需要的人工標(biāo)注的數(shù)據(jù)量可以大大減少。由于攝像機(jī)拍攝角度、指針式儀表安裝位置的影響,采集到的表盤圖像通常具有一定的傾斜角度,這會(huì)影響讀數(shù)的精確度,因此傳統(tǒng)的方法需要對(duì)圖像中的表盤先進(jìn)行旋轉(zhuǎn)校正,以提高讀數(shù)的精確度。通過本方法的Resnet18-CNN 模型,無(wú)需對(duì)于圖像進(jìn)行預(yù)先旋轉(zhuǎn)矯正,即可以得到比較準(zhǔn)確的結(jié)果。對(duì)此,認(rèn)為可能的原因是在Resnet18-CNN 的訓(xùn)練過程中,對(duì)訓(xùn)練數(shù)據(jù)的數(shù)據(jù)增強(qiáng)包括隨機(jī)的仿射變換,因此模型在訓(xùn)練過程中已經(jīng)對(duì)于不同仿射變換的圖像進(jìn)行了學(xué)習(xí)。
本文設(shè)計(jì)了一種基于深度學(xué)習(xí)的指針式儀表識(shí)別方法。該方法的優(yōu)勢(shì)在于,圖像無(wú)需額外預(yù)處理的情況下,可以在較少數(shù)據(jù)量的情況下,通過3個(gè)神經(jīng)網(wǎng)絡(luò)處理步驟可以獲得準(zhǔn)確的指針式儀表讀數(shù)結(jié)果,特別是針對(duì)語(yǔ)義分割和讀數(shù)回歸的模塊,僅使用了101 張人工標(biāo)注的數(shù)據(jù)。針對(duì)測(cè)試數(shù)據(jù),通過本方法得到的指針儀表讀數(shù)結(jié)果和人工讀數(shù)以及距離法讀數(shù)相比,對(duì)于不同角度拍攝的儀表獨(dú)享的讀數(shù)偏差更低。進(jìn)一步,由于本方法通過語(yǔ)義分割后的儀表圖像進(jìn)行讀數(shù)回歸,而無(wú)需具體檢測(cè)儀表中的指針位置和刻度信息,如果在模型訓(xùn)練中增加不同的儀表數(shù)據(jù),本方法將可適用于不同種類儀表的讀數(shù)檢測(cè)。