導(dǎo)讀
本文為ECV2023大賽儀表盤讀數(shù)識別德國冠軍方案解讀,包含了對賽題的分析和模型選取構(gòu)建的思考過程。
賽題任務(wù)
1、儀表識別
對于預(yù)測儀表框與真實儀表框,計算f1-score,IoU使用0.7,此部分成績記為score1
2、刻度點識別
對于預(yù)測關(guān)鍵點與真實關(guān)鍵點,計算RMSE,此部分成績記為score2
3、OCR識別
對于預(yù)測的數(shù)值框,計算f1-score,IoU使用0.5,此部分成績記為score3
4、讀數(shù)識別
計算每個儀表的讀數(shù)得分,并對所有儀表的得分求平均值,此部分成績記為 score4
將上述4點得到4項成績進行加權(quán),最終得分:
加權(quán)的權(quán)重為配置參數(shù),默認(rèn)值為:
weight_1 = 0.1
weight_2 = 0.25
weight_3 = 0.25
weight_4 = 0.4
賽題分析
本次任務(wù)的儀表數(shù)據(jù)集存在以下難點:
1、儀表刻度存在遮擋、模糊等問題,影響OCR識別
2、儀表圖像存在旋轉(zhuǎn)、傾斜問題,影響讀數(shù)測量
算法設(shè)計
算法分為4個流程,首先用yolov5s模型從原圖中識別出儀,接著用yolov8x-pose模型檢測出儀表中的刻度線、指針的關(guān)鍵點,再用DBNetpp模型檢測出數(shù)值框并用SATRN模型進行文本識別,最后后處理得到讀數(shù)結(jié)果。
(1)基于YOLOv5s的儀表檢測
選型理由
Yolov5s網(wǎng)絡(luò)小,速度快。雖然AP精度低,但檢測的是儀表這種大目標(biāo)是完全夠用的。我們采用極市官方提供的yolov5s訓(xùn)練套件進行訓(xùn)練,上手簡單,且儀表識別準(zhǔn)確率達到了99.7%,效果滿足實際需求。
(2)基于YOLOv8x-pose的指針和刻度關(guān)鍵點檢測
選型理由
YOLOv8是YOLOv5團隊ultralytics在今年開源的SOTA模型,引入了新的改進,進一步提升了性能和靈活性。YOLOv8 設(shè)計快速、準(zhǔn)確且易于使用,使其成為目標(biāo)檢測、實例分割、圖像分類和姿態(tài)估計任務(wù)的絕佳選擇。
yolo-pose是估計人體姿態(tài)的一個模型,它將人體姿態(tài)分為17個關(guān)鍵點。
為了盡可能地提高關(guān)鍵點檢測精度,我們使用了規(guī)模最大的YOLOv8x-pose模型。
指針關(guān)鍵點數(shù)據(jù)集制作
我們將指針的兩個點作為其關(guān)鍵點,由這兩個點組成的矩形框作為目標(biāo)檢測框,如果兩個點組成的矩形框太窄,進行適當(dāng)延伸。
刻度關(guān)鍵點數(shù)據(jù)集制作
由于每個儀表的數(shù)值框個數(shù)不同,我們將每個數(shù)值框視為同一個類別進行目標(biāo)檢測,每個數(shù)值框攜帶對應(yīng)的刻度點作為其關(guān)鍵點。
我們采用從官網(wǎng)下載的預(yù)訓(xùn)練模型在儀表數(shù)據(jù)集上微調(diào),將關(guān)鍵點權(quán)重從12提高到20。
(3)基于DBNetpp的文本檢測
選型理由
由于儀表尺寸大小不一,我們選用DBNetpp模型,它在DBNet模型基礎(chǔ)上引入了多級特征聚合模塊(Adaptive Scale Fusion, ASF),ASF模塊由階段注意力和空間注意力子模塊構(gòu)成,加強了不同尺度特征的融合,提高了處理不同尺寸圖像的魯棒性。
(4)基于SATRN模型的文本識別
選型理由
SATRN模型利用self-attention機制對字符的2D空間關(guān)系進行建模,并且在FFN模塊中引入卷積層,增強了模型對全局和局部特征的捕捉能力。
SATRN模型對于大曲率彎曲、大角度旋轉(zhuǎn)文本依然具備足夠的識別能力,在多個不規(guī)則文本數(shù)據(jù)集上達到SOTA。
(5)讀數(shù)識別
將上述模型的輸出采用opencv進行后處理得到讀數(shù)結(jié)果,具體流程如下:
區(qū)分內(nèi)外徑
根據(jù)刻度點和數(shù)值框距離指針原點的距離區(qū)分內(nèi)徑和外徑,分別進行后續(xù)處理。
確定刻度點的順序
起點到終點的角度差值是相鄰兩點間角度差值中最大的,我們只需要找到這個最大的角度差值,就可以確定起始點。
先將刻度點坐標(biāo)轉(zhuǎn)成以指針原點為中心的極坐標(biāo),根據(jù)角度從小到大排序 [16,0,4,8,12]
然后計算相鄰刻度點兩兩間的角度差值,選擇最大差值的下一個刻度點作為起點,調(diào)整順序后 [0,4,8,12,16]
修正OCR識別結(jié)果
上圖中由于指針遮擋,1500識別成500,通過等差數(shù)列對其進行修正。
透視變換
步驟:
1、確定最后一個點的坐標(biāo):已知最后一個點在透視變換后的極坐標(biāo)角度為45°,假設(shè)所有刻度點距離圓心距離為R,則最后一個點的坐標(biāo)可以表示為(45°,R)可以根據(jù)該極坐標(biāo)得出笛卡爾坐標(biāo)系下的坐標(biāo)。
2、確定其他三個點的坐標(biāo):這里一共有6個間隔平分整個270°量程,所以每個刻度夾角為270/6=45°,據(jù)此可以依次計算出其他三個點在變換后的坐標(biāo)。
通過這種方式,可以確定四個刻度點在透視變換后圖像中的坐標(biāo),并用這些坐標(biāo)來進行透視變換。
補充被指針遮擋的點
步驟:
1、首先,確定缺失點的前后點,以及它們與圓心的平均距離。這些信息將用于推算缺失點的極坐標(biāo)。
2、根據(jù)前后點的角度和平均距離,計算出缺失點的極坐標(biāo)。極坐標(biāo)由極徑和極角組成,極徑表示點到圓心的距離,極角表示點在極坐標(biāo)系中的角度。將缺失點的極坐標(biāo)轉(zhuǎn)換為笛卡爾坐標(biāo)。
3、如果進行了透視變換,需要將轉(zhuǎn)換后的坐標(biāo)應(yīng)用于透視矩陣,以獲得原圖中的坐標(biāo)。
計算讀數(shù)
確定指針的前后刻度點位置,并記錄它們在極坐標(biāo)系中的角度值。假設(shè)前刻度點角度為 , 后刻度點角度為 。指針角度為 。
假設(shè)指針前刻度點的讀數(shù)為 , 后刻度點讀數(shù)為 , 指針讀數(shù)為 * 。
其中Δr=r2-r1, Δθ=
θ
θ
θ
θ
算法優(yōu)化
存在問題
邊框遮擋導(dǎo)致的刻度數(shù)字無法識別,上述算法不能很好的處理。
改進方法
根據(jù)數(shù)據(jù)集分布,為內(nèi)外徑各建立一個list,以外徑舉例:
outer_list = [
[32, 50, 100, 150, 200],
[0, 4, 8, 12, 16],
[0, 2, 4, 6, 8, 10],
[0, 1, 2, 3, 4, 5, 6],
[0, 0.2, 0.4, 0.6, 0.8, 1],
[0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6],
[0, 2, 4, 6, 8, 10, 12, 14],
[0, 10, 20, 30, 40, 50, 60],
[0, 1000, 2000, 3000, 4000, 5000, 6000],
[0, 100, 200, 300, 400, 500, 600, 700, 800, 860]
]
將左圖中識別的外徑[0,100,200,300,400,500,600]與該outer_list進行匹配,得到最接近的[0,100,200,300,400,500,600,700,800,860]。即可對照模板將遺漏的刻度點補全。
總結(jié)
最終,我們方案的成績?nèi)缦隆?/p>
優(yōu)點:
1、目標(biāo)檢測算法和ocr識別算法均源自開源算法庫中SOTA模型,實現(xiàn)簡單高效,且具備豐富的工業(yè)部署落地支持。
2、沒有采用傳統(tǒng)直線檢測的方式檢測關(guān)鍵點,通過類似姿態(tài)估計的方式提高了關(guān)鍵點檢測精度。
3、提出了一種基于查表的魯棒儀表讀數(shù)方法,對于遮擋嚴(yán)重的情況也能較好地處理。
4、通過透視變換,將形變的儀表圖像修正,使得讀數(shù)更加準(zhǔn)確。
可提升點:
1、將模型文件轉(zhuǎn)換為TensorRT格式,加速推理。
2、更改ocr識別模型,提升效率。