陳 征, 劉長龍, 張 樂, 張璽亮, 徐元德, 藍 飛, 蔣少玖
(1.中海石油(中國)有限公司天津分公司, 天津 300459;2.中海油能源發展股份有限公司工程技術分公司, 天津 300452)
目前海上平臺纜控注水井作業現場中指針式儀表的讀取工作大部分仍采用人工巡檢的方式, 識別過程枯燥、麻煩且容易受到主觀因素的影響[1-2]。另外現階段對指針式儀表的研究大多數都是對一種指針儀表的研究, 如何準確識別多種類型指針式儀表是目前一大挑戰。
隨著計算機視覺和目標檢測技術的不斷發展, 深度學習在指針式儀表識別中的應用越來越廣泛。徐發兵等[3]通過使用卷積神經網絡和改進的場景文本檢測器(EAST)算法對儀表進行檢測讀數。邢浩強等[4]利用卷積神經網絡模型檢測完成儀表讀數識別。周登科等[5]通過深度卷積神經網絡實現儀表圖像的傾斜校正和旋轉校正。盡管目前利用深度學習實現指針式儀表檢測算法越來越多, 但這些方法網絡規模大, 識別效果和準確性仍有待提高, 難以在算力有限的計算機上完成對指針式儀表的實時高效檢測[6]。
針對目前指針式儀表識別效率低、識別不準確等問題, 實現海上平臺纜控注水井中不同類型指針式儀表的識別工作, 本文提出了一種用于海上平臺纜控注水井的多類型指針式儀表識別方法, 改進的YOLOv5算法與基于圖像處理的模板匹配法相結合, 該方法能夠識別不同類型的指針式儀表, 識別效果顯著, 定位表盤位置準確, 對指針角度和讀數具有較高的識別率。
針對指針式儀表的多類型識別, 本文將YOLOv5算法與模板匹配法相結合, 實現儀表圖像讀數, 算法流程圖如圖1所示。

圖1 算法流程圖Fig.1 Algorithm flow chart
具體流程為首先將測試圖像轉換為灰度圖像, 用YOLOv5算法檢測測試圖像的儀表類型, 讀取出測試圖像對應的模板圖像及其先驗信息;其次通過模板匹配定位測試圖像的表盤, 在測試圖像的表盤上繪制矩形并截取矩形, 匹配并返回矩形的坐標信息;再次通過K-means二值化矩形圖像, 根據矩形圖像的坐標信息計算其中心點坐標;最后通過直線旋轉法獲取指針的角度, 將指針角度與模板圖像中每個刻度對應的角度進行對比, 并根據與刻度的關系計算出儀表的讀數。
本文使用YOLOv5作為檢測網絡來進行儀表類型識別, YOLOv5的整體結構中增加了Focus和SPP結構, YOLOv5網絡結構如圖2所示。

圖2 YOLOv5網絡結構圖Fig.2 YOLOv5 network structure diagram
YOLOv5在圖像輸入時對圖像進行了Mosaic數據增強操作, 并且在推理時采用了自適應縮放操作, 該方法可根據輸入圖像尺寸的不同進行自適應填充, 提升了37%的推理速度。其次, 還設計了位于網絡最前端的Focus結構, 該結構最主要的內容是對輸入數據進行切片操作, 可有效提升圖片特征提取質量。YOLOv5設計了2種與YOLOv4[7]結構中相同的CSP網絡結構, 并且將其用于Backbone層和Neck層。Neck層 采 用 了FPN+PAN(Perceptual Adversarial Network)結合的方式, 使用了新設計的CSP結構, 同時增強了網絡對特征的融合能力。
2.2.1 損失函數的改進
損失函數[8]是對深度神經網絡誤測樣本評判的重要基礎。損失函數的選取對模型收斂效果影響很大, 因此選用恰當的損失函數可以達到良好的識別效果。本文使用GIOU_Loss作為BBox損失函數, 并且在進行非最大值抑制時使用了加權非最大值抑制NMS方法, 在不增加計算資源的情況下對檢測圖像中一些有重疊的目標檢測效果較好, GIOU_Loss損失函數的計算, 如式(1)所示。

GIOU_Loss函數增加了相交尺寸的測量方法, 可以處理邊框有時并不重疊的問題, 并且有利于損失函數獲得進一步的收斂, 從而增強模型的識別效率。
2.2.2 DenseNet網絡替換Res unit殘差網絡
雖然YOLOv5有著良好的檢測效果, 但對一些目標特征不明顯或者小目標有著一定的檢測誤差, 為了進一步提高目標的特征提取能力, 本文使用DenseNet網絡[9]中的密集卷積塊(Dense block)代替YOLOv5中CSP1_3的Res unit殘差網絡。
在傳統的CNN中, 網絡有多少層就會對應多少個連接, 而Dense block的輸入是之前所有層的輸出, 即網絡有m層, 則會有m(m+1)/2個連接。
YOLOv5中原始殘差網絡的第m層輸出如式(2)所示。

其中fm(Xm-1)表示第m層對第m-1層的輸出的非線性變換, Xm-1表示第m-1層的輸出。
本文采用密集卷積塊的方式, 第m層通過對前m-1層的特征輸出圖做網絡融合, 增強特征獲取的能力, 其輸出如式(3)所示, 即

2.3.1 識別前操作
讀取測試圖像, 通過透視變換消除表面角度傾斜造成的儀表圖像畸變, 然后根據儀表豎直中軸線對稱的關鍵點, 計算儀表水平方向的旋轉角度并進行旋轉校正。在識別測試圖像儀表類型之前先將其轉換為灰度圖像, 使用加權平均法將測試圖像轉換為灰度圖像以便提高運算速度, 也為后面圖像處理工作做準備。
2.3.2 儀表類型識別
在構建模板圖像數據庫時, 記錄下每個模板對應的先驗信息, 其先驗信息包括刻度及其像素坐標、中心點像素坐標。對模板圖像數據庫進行類型標注, 然后用改進的YOLOv5模型進行訓練, 設置斷點續訓, 在訓練的前幾個周期內預熱學習率, 在小的學習率下使模型慢慢趨于穩定后, 使用預先設置的學習率進行訓練, 初始學習率為0.01, 最終的學習率為0.002, 用余弦退火算法計算衰減學習率。設置標稱batch size為8, 即當設置的batch size=4時, 模型梯度累計2次之后再進行模型的更新, 擴大批處理的大小, 緩解由于設施配置有限而導致梯度頻繁更新的問題。訓練完成之后即可讀取測試圖像進行測試, 識別出對應儀表類型, 并讀取對應模板圖像和先驗信息, 用于定位儀表表盤。
使用改進的YOLOv5模型識別測試圖像儀表類型時, 會讀取對應模板圖像和模板圖像對應的先驗信息, 然后將模板圖像在測試圖像上進行模板匹配, 定位儀表表盤。
模板匹配的基本原理是在一幅圖像中尋找與另一幅模板圖像相似部分[10], 通過相似性計算找到模板在被搜索圖像的坐標位置
假設模板A的尺寸為W×H, 待搜索圖像B的尺寸為M×N, 令模板A在圖像B上平移, 搜索區域所覆蓋的子圖像記為Bi, j, 其中i、j為子圖像左上角頂點在圖像B中的坐標。i、j的搜索范圍為1≤i≤M-m, 1≤j≤N-n, 通過比較A和Bi, j的相似性, 完成模板匹配過程[11]。計算如公式(4)所示。

根據I(i, j)得到被搜索圖像中與模板圖像相似度最高的區域位置, 并根據實際模板大小計算得到該區域中心所在坐標位置。模板匹配結果如圖3所示。

圖3 模板匹配結果圖Fig.3 Template matching results
根據模板匹配和模板圖像的先驗信息可以得到儀表表盤的坐標信息, 根據儀表表盤的左上角坐標和右下角坐標可以計算出表盤中心坐標。
3.2.1 K-means二值化圖像
使用K-means方法對圖像進行二值化處理, Kmeans二值化處理的步驟如下所示。
(1)隨機選擇k個初始的聚類中心, 因為要二值化圖像, 所以本文選取k=2。
(2)計算每個樣本到各聚類中心的距離, 將每個樣本歸到其距離最近的聚類中心。
(3)以簇內樣本均值作為該簇新的聚類中心。
(4)判斷聚類中心是否發生變化, 若有變化則重新回到步驟(2), 若無變化則輸出最終聚類中心及每個樣本所屬類別。
令聚類中心為cj, 計算每個樣本到聚類中心的距離, 如式(5)所示, 即

通過K-means二值化, 把圖像分成兩類, 在圖像中隨機選擇中心點像素值, 計算各像素點到2個中心聚類的距離, 并根據最小距離重新對相應對象進行劃分, 重新計算每個有變化聚類的均值, 循環直到每個聚類不再發生變化為止, 在此過程中建立壓縮調色板, 將圖像中的每個像素分配到調色板的一種顏色中, 將K-means分類結果通過壓縮調色板分類創建壓縮后的新圖像, 將所有像素重新著色成黑色和白色即可得到二值化后的圖像。
3.2.2 指針擬合
將K-means二值化后的圖像使用直線旋轉法按一定的角度擬合指針。首先在圖像的二維空間中以確定的表盤中心為原點建立笛卡爾坐標系, 以原點為起點畫一條直線, 長度為確定的表盤半徑, 并且以原點為圓心在表盤上進行旋轉, 起始位置在笛卡爾坐標系的x軸處。計算直線在旋轉過程中與表盤黑色像素的重合率, 重合率最高處就是指針所在位置。
指針擬合的目的是獲取指針對應的角度, 首先獲取角度集θ, 如式(6)所示, 即

計算直線在旋轉過程中與表盤黑色像素的重合率vi, 令pi為角度是θi的直線上所采樣的像素點個數, gray(xij,yij)為角度是θi的直線上第j個像素點的灰度值, 選取重合率最大的vi所對應的角度, 即為指針擬合的角度。重合率的計算, 如式(7)所示, 即

將模板圖像的先驗信息通過余弦絕對值公式和反余弦公式計算, 可以得到每個刻度對應的角度, 將每個刻度及對應角度放入一個集合S中。
余弦絕對值的計算, 如式(8)所示, 即

反余弦的計算, 如式(9)所示, 即

式(8)、(9)中, (x, y)為模板圖像的中心點坐標, (xc, yc)為刻度坐標,V為余弦坐標值,θ為刻度對應的角度。
對集合S中的刻度進行遞增排序, 通過比較測試圖像指針擬合獲取的角度θi和集合S中的角度大小關系, 可以得到測試圖像指針所在的刻度范圍(n≤t≤m), 并通過角度之間的比例關系計算出測試圖像的刻度值。
為保證改進的YOLOv5模型的訓練效率, 本文實驗需要配置較好的硬件進行整個模型的訓練和測試, 其中操作系統為Ubuntu 21.10, 顯卡為GeForce RTX 2060 Max-Q, 內存為16G。為了提高實驗的運算速度, 實驗中使用了GPU(Graphic Processing Unit)進行加速運算。實驗中模型的搭建、訓練和測試均是在Pytorch框架下完成, 編程語言為Python。使用CUDA(Compute Unified Device Architecture)并行計算架構, 并且將用于深層神經網絡的GPU加速庫cuDNN(CUDA Deep Neural Network library)集成到Pytorch框架下, 用來提高計算機的計算能力。
本文數據集中的圖像主要來源于海上平臺纜控注水井作業現場中的實際儀表圖像, 包含了10種不同類型的指針儀表, 共計800幅, 使用Albumentations框架對數據集進行數據增強, 數據增強的目的是增加數據集的多樣性, 以此來增強模型的泛化能力。數據增強的方式包括旋轉、彈性變化和HSV偏移, 經過數據增強[12], 原指針儀表圖像數據集從原來的800幅擴充到2400幅, 將數據集按照8∶2的比例劃分為訓練集和測試集, 即訓練集的數量為1920幅, 測試集的數量為480幅, 經過標注后將數據集輸入到神經網絡中進行訓練。
本文通過對YOLOv5中損失函數的改進, 同時將DenseNet網絡中的密集卷積塊(Dense block)代替YOLOv5中CSP1_3中的Res unit殘差網 絡, 改 進了YOLOv5模型, 極大地提高了目標檢測的能力, 增強了模型的識別效率。改進之后的YOLOv5模型在準確率上達到了95.20%, 相比原始的YOLOv5模型提升了7.97%, 相比YOLOv4模型提升了15.16%, 準確率對比情況如表1所示。

表1 準確率對比表Tab.1 Accuracy comparison table
經過改進的YOLOv5模型的實驗驗證表明, 超過95.20%的圖像都能準確識別所對應的模板類型, 再經過模板匹配后能準確定位到儀表表盤, 最終的儀表讀數達到了較高的準確度, 識別速度也比較快。表2為隨機選取10組測試圖像的識別結果示例, 每組測試圖像分別來源于10種類型圖像測試集的隨機抽取。

表2 儀表識別結果示例Tab.2 Example of instrument identification results
從表2的實驗結果來看, 10組測試圖像的識別結果精確度很高, 符合人工讀數的誤差范圍。針對實際情況中儀表圖像質量低的問題, 解決辦法是在測試圖像轉化為灰度圖像之前進行伽馬變換操作, 而后測試圖像的亮度值得到有效提升, 再經過模板匹配等得到了準確的識別結果。
為了能夠更好地實現海上平臺纜控注水井中指針式儀表的識別效果, 本文提出了一種用于海上平臺纜控注水井的多類型指針式儀表識別方法, 首先對YOLOv5模型中的損失函數進行了改進, 增強了模型的識別效率。使用DenseNet網絡中的密集卷積塊(Dense block)代替YOLOv5 CSP1_3中的Res unit殘差網絡, 進一步提高了目標的特征提取能力, 將其與基于圖像處理的模板匹配法相結合, 再經過K-means二值化和指針擬合等操作得到儀表讀數。該方法對于指針式儀表識別效果顯著, 表盤位置定位準確, 識別速度快, 在復雜環境下也能完成識別工作。