飛槳助力動車3C車載智慧識別,為動車組執行保駕護航
專案背景
動車組車載接觸網執行狀態檢測裝置(3C)是指在運營動車組上安裝的車載接觸網執行狀態檢測裝置。其隨動車組執行,全天候等速線上檢測監測接觸網、弓網匹配執行狀態,檢測監測接觸網⼏何引數、紅外影象、可見光影象等結果,並將結果用於指導接觸網維修。
受到接觸網張力、機械震動、天氣、裝置執行壽命等因素影響,接觸網運營過程中易出現典型缺陷,如有鳥害、接觸網吊絃斷裂、接觸網吊弦脫落、接觸網吊弦鬆弛、異物纏繞等,雖然該類缺陷在短時間內不能直接造成嚴重病害結果,但積累後可能引發接觸網塌網等重大事故,從而造成列車停運。同時列車執行過程中,由於受到接觸網引數改變、異物等因素影響,可造成擊打、擊毀受電弓的重大事故,使用常規方法很難短時間定位事故詳情。該類事故的監測雖不能預防當前事故發生,但捕捉事故後,能對後續列車的執行提供準確的運營指導,大幅度降低事故影響面及經濟損失。
本專案基於3C可見光影象,研究如何落地一套車載實時智慧識別系統,能夠監控接觸網檢測、受電弓監測中的部分高危缺陷。
為了觀測並捕捉接觸網部件缺失、鬆脫、異物及受電弓異常等影響行車安全事件的情況,3C裝置需要具有全天候、開放環境、實時性的執行特點,因此需要邊雲一體化的車地協同方案,以解決戶外場景複雜、資料量龐大、實時分析的困難。但因車載硬體資源有限、車載裝置功率限定等因素,均不利於車載實時分析。因此本專案通過⼈⼯智慧手段,依託有限車載運算資源進一步在保持檢測指標的基礎上壓榨計算時間、增加檢測內容,實現邊採集影象資料,邊實時分析影象缺陷的邊緣智慧感知功能,彌補了3C資料分析量大、分析及時性不足問題,使得接觸網相關重要缺陷能夠在運營車執行過程中被及時發現與上報,為供電檢測的智慧化提供有效手段。
專案介紹
接觸網檢測
資料準備及預處理:資料類別:包含鳥害、吊絃斷、吊弦脫、異物四類。資料數量:共計約1萬張影象。資料劃分:採用分層取樣分割資料集,每個類別在訓練集、驗證集、測試集中的比例儘可能接近6:2:2。預處理注意事項:1. 資料集目標較細,而戶外環境經常出現逆光情況,因此對資料增強中的亮度調節要把握尺度;2. 針對部分影象resize後失真導致目標物件歧義的缺陷,需要保持影象的原始比例;3. 若伺服器產生CPU瓶頸,可以在reader.yml中使用DecodeCache代替Decode,以釋放部分CPU壓力。
模型訓練及評估
針對車載邊緣檢測場景,本專案選用了基於飛槳目標檢測套件PaddleDetection 的PP-PicoDet系列模型進行實驗。
1.調整超引數後,執行命令進行多卡訓練,同時開啟VisualDL及訓練時評價。
1. export CUDA_VISIBLE_DEVICES=0,1,2,3
2. python -m paddle.distributed.launch --gpus 0,1,2,3 tools/train.py
3. -c /xsw/train/model/C3/picodet/picodet_s_416.yml
4. --use_vdl=true
5. --vdl_log_dir=/xsw/train/model/C3/picodet/vdl_dir_picodet_s_416/scalar
6. --eval
2.觀測VisualDL訓練狀態。
1. visualdl --logdir \\10.2.3.25\shareXSW\train\model\C3\picodet\vdl_dir_picodet_s_416\scalar --port=8041
3.基於最佳模型,計算驗證集、測試集單類AP。
1. python tools/eval.py -c /xsw/train/model/C3/picodet/picodet_s_416.yml
2. -o weights=/xsw/train/model/C3/picodet/output/picodet_s_416/picodet_s_416/best_model
3. --classwise
4.驗證集評價結果,如下表所示。
5.測試集評價結果如下表所示。
模型部署
因既有裝置還需承擔資料採集、幾何引數測量計算等任務,可利用CPU資源有限。根據經濟因素、運維因素及功率限定的考量,我們利用了空閒的整合顯示卡,採用基於OpenVINO的部署方式。該方式具備較低的推理時長及較低的CPU佔用,為剩餘業務留出空間。
模型匯出可參照:PaddleDetection
模型匯出為ONNX格式教程:https://github.com/PaddlePaddle/PaddleDetection/blob/release/2.3/deploy/EXPORT_ONNX_MODEL.md
1. 匯出飛槳部署模型:
1. python tools/export_model.py -c /xsw/train/model/C3/picodet/picodet_s_416.yml
2. -o weights=/xsw/train/model/C3/picodet/output/picodet_s_416/picodet_s_416/best_model.params
3. TestReader.inputs_def.image_shape=[3,416,416]
4. --output_dir /xsw/train/model/C3/picodet/inference_model
2.匯出PaddleDetection模型為ONNX:
1paddle2onnx --model_dir /xsw/train/model/C3/picodet/inference_model/picodet_s_416
2--model_filename model.pdmodel
3--params_filename model.pdiparams
4--opset_version 11
5--save_file /xsw/train/model/C3/picodet/picodet_s_416.onnx
3. 基於OpencvDNN模組使用ONNX模型:這裡需要說明,OpenCV的DNN模組針對整合顯示卡推理具備基於OpenCV和基於IntelNGRAPH的兩種後端,相應的使用方法不同可能造成巨幅的推理時長變化。
1)基於OpenCV後端該模組可直接讀取ONNX模型,但網路中的OperationsSets支援有限,更多OperationsSets需要自定義。
既有OperationsSets支援參考:Thesupportedlayershttps://github.com/opencv/opencv/wiki/Deep-Learning-in-OpenCV自定義Operations Sets參考: tutorial_dnn_custom_layershttps://docs.opencv.org/4.x/dc/db1/tutorial_dnn_custom_layers.html
2)基於IntelNGRAPH後端該模組可直接讀取ONNX模型及IR模型。a、讀取ONNX模型將線上通過NGRAPH優化後執行,支援OperationsSets相對較多,使用簡便;b、讀取IR模型是最佳的方式,經實驗其能最大化減少推理時長,但其需要優先安裝OpenVINO,並利用其將ONNX模型優化為IR模型,但因整合顯示卡驅動因素影響其儘量適用於Intel四代CPU之後的硬體裝置;
既有OperationsSets支援參考:AvailableOperationsSetshttps://docs.openvino.ai/latest/openvino_docs_ops_opset7.html#doxid-openvino-docs-ops-opset7
IR模型轉換參考: ConvertaPaddlePaddleModeltoONNXandOpenVINOIRhttps://docs.openvino.ai/latest/notebooks/103-paddle-onnx-to-openvino-classification-with-output.html2. 資料後處理參考:PicoDetPostProcesshttps://github.com/PaddlePaddle/PaddleDetection/blob/develop/deploy/cpp/src/picodet_postprocess.cc3. 推理時間如下表所示。GPU:Intel HD Graphics 530CPU:Intel(R) Core(TM) i7-6700 CPU @3.40GHz 3.41GHzVPU:Movidius MyriadX
專案選用picodet_lcnet_416模型,指標較原有自定義模型提升2%,推理速度加速53%,為進⼀步業務演算法實施提供了可能性。
受電弓監測
針對車載邊緣檢測場景,本專案選用了基於PaddleDetection的keypoint模型實驗。
資料準備及預處理
資料類別:內部資料集設計包含10個受電弓關鍵點;資料數量:共計約2千張影象;
資料劃分:採用分層取樣分割資料集,使得每個類別訓練集:驗證集儘可能接近8:2。
模型訓練及評估
不同於通用的行人姿態檢測,本專案姿態檢測為受電弓,資料集目標物件將發生遷移。基於關鍵點的自定義資料集訓練,因目標關鍵點數量和關鍵點含義的變化,需要修改幾處內容:
1.因關鍵點數量及目標物件的變化,需要修改部分原始碼及配置:
1. # *.yml 訓練配置,僅列舉因目標物件和關鍵點數量變化的關鍵引數
2. num_joints: &num_joints 10
3. train_height: &train_height 288
4. train_width: &train_width 384
5. #輸出熱⼒圖尺⼨(寬,高)
6. hmsize: &hmsize [96, 72]
7. #左右關鍵點經影象翻轉時對應關係
8. flip_perm: &flip_perm [[0, 1], [2, 3], [4, 5], [6, 7], [8, 9]]
2.當前PaddleDetection中的關鍵的檢測評價指標是基於coco OKS的,其OKS中的kpt_oks_sigmas引數來源於coco關鍵點資料集。因自定義關鍵點資料集的關鍵點數量、標註內容變化,需要修改相應的kpt_oks_sigmas適配自定義資料集。(kpt_oks_sigmas含義為每個關鍵點各自的資料集標準差,COCO上是對同⼀個目標的5000次不同標註產生的標準差。其值越大,說明在整個資料集中對這個點的標註一致性越差; 值越小,說明整個資料集中對這個點的標註一致性越好。如coco資料集中:{鼻子:0.026,眼睛:0.025,耳朵:0.035,肩膀:0.079,手肘:0.072,手腕:0.062,臀部:0.107,膝蓋:0.087,腳踝:0.089})
1#ppdet/metrics/metrics.py
2COCO_SIGMAS = ...
3#ppdet/modeling/keypoint_utils.py def oks_iou(...):
4...
5sigmas = ...
6...
7
8# 庫中pycocotools的cocoeval.py class Params:
9...
10def setKpParams(self):
11...
12self.kpt_oks_sigmas = ...
13...
3.如果希望視覺化關鍵點骨架結果,也需要修改相應原始碼:
1. #ppdet/utils/visualizer.py
2. EDGES= ...
4. 調整超引數後,執行訓練並開啟visualDL及訓練時評價。
1#訓練
2python tools/train.py -c /xsw/train/model/C3_BowPt/hrnet/dark_hrnet.yml
3--use_vdl=true
4--vdl_log_dir=/xsw/train/model/C3_BowPt/hrnet/vdl_dir_hrnet_dark_hrnet/scalar
5--eval
6
7#觀測
8visualdl --logdir \\10.2.3.25\shareXSW\train\model\C3_BowPt\hrnet\vdl_dir_hrnet_dark_hrnet\scalar --port
9=8041
10
11#評價
12python tools/eval.py -c /xsw/train/model/C3_BowPt/hrnet/dark_hrnet.yml
13-o Global.checkpoints=/xsw/train/model/C3_BowPt/hrnet/output/dark_hrnet_w32/best_model.pdparams
5.使用模型推理未標註資料測試。
1. python tools/infer.py -c /xsw/train/model/C3_BowPt/hrnet/dark_hrnet.yml
2. -o weights=/xsw/train/model/C3_BowPt/hrnet/output/dark_hrnet/best_model.pdparams
3. --infer_dir=/xsw/train/data/C3_BowPt_cut/poc/val/images
4. --draw_threshold=0.2
5. --save_txt=True
6. --output_dir=/xsw/train/model/C3_BowPt/hrnet/output/infer_dark_hrnet
6.驗證集評價結果。
模型部署
1.匯出飛槳部署模型。
1. python tools/export_model.py -c /xsw/train/model/C3_BowPt/hrnet/dark_hrnet.yml
2. -o weights=/xsw/train/model/C3_BowPt/hrnet/output/dark_hrnet/best_model.pdparams
3. --output_dir /xsw/train/model/C3_BowPt/hrnet/inference_model
2.匯出PaddleDetection模型為ONNX。
1. paddle2onnx --model_dir /xsw/train/model/C3_BowPt/hrnet/inference_model/dark_hrnet
2. --model_filename model.pdmodel
3. --params_filename model.pdiparams
4. --opset_version 11
5. --save_file /xsw/train/model/C3_BowPt/hrnet/dark_hrnet.onnx
3. 推理時間如下表所示。GPU:IntelHDGraphics530CPU:Intel(R)Core(TM)[email protected]
專案效果
接觸網檢測結果視覺化
鳥害
吊弦脫
吊絃斷
異物
受電弓監測結果視覺化
總體效果
截止目前新版演算法已擴充套件部署動車30輛、機車16輛,單月累積巡線超過170萬KM,檢出上述型別缺陷超過3000個。
歡迎關注PaddleDetection:https://github.com/PaddlePaddle