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