自己訓練的YOLOX模型在轉換為ONNX後有問題
為了要參加今年的大專校院資訊應用服務創新競賽
我參考了此篇教學來實踐KL720 USB Dongle的物件偵測推論
並參考了這篇文章來訓練自己的YOLOX模型
我採用的是YOLOX-s預訓練權重
而class種類有2種
我有修改/kneron-mmdetection/configs/yolox/yolox_s_8x8_300e_coco_img_norm.py中
num_classes=2
samples_per_gpu和workers_per_gpu也有改成符合自己裝置的GPU數量
且修改/kneron-mmdetection/mmdet/datasets/coco.py中
CLASSES和PALETTE調整為符合我class的數目
不過在進行物件偵測推論教學中的Step 2: Test trained pytorch model時
除了一直都有跳
/workspace/miniconda/lib/python3.7/site-packages/numpy/__init__.py:156: UserWarning: mkl-service package failed to import, therefore Intel(R) MKL initialization ensuring its correct out-of-the box operation under condition when Gnu OpenMP had already been loaded by Python process is not assured. Please install mkl-service package, see http://github.com/IntelPython/mkl-service
但應該不影響(??
沒有跳其他的錯誤訊息
但測試出來的結果就有問題了
mAP全部都沒有出現正確數值
可是直接在YOLOX那邊有測試出如下圖符合預期的結果
因此可以確保訓練出來的.pth檔案是沒問題的
故我推測是在kneron-mmdetection這邊與我使用以下的這個YOLOX訓練出來的模型有串接上之問題
就算我繼續把後續Step 3: Export onnx和Step 4: Test exported onnx model流程跑完
在測試轉出的onnx一樣有相同的問題
若是把最後一步Step 5: Convert onnx to NEF model for Kneron platform也執行完後
最終在KL720上做推理的結果理所當然也是會不符合預期哈哈
不過為什麼在過程中都沒跳其他錯誤訊息可以順利產出呢?
(除了上面提到的UserWarning: mkl-service package failed to import)
這是讓我比較疑惑的點
也不知道該從何下手是好
還是要直接從kneron-mmdetection裡面來執行python tools/train.py configs/yolox/yolox_s_8x8_300e_coco_img_norm.py
要在kneron-mmdetection裡面重新做訓練才不會有串接上的問題呢🤔
謝謝!!
Comments
@呂則賢
Hi 呂則賢,
/workspace/miniconda/lib/python3.7/site-packages/numpy/__init__.py:156: UserWarning: mkl-service package failed to import, therefore Intel(R) MKL initialization ensuring its correct out-of-the box operation under condition when Gnu OpenMP had already been loaded by Python process is not assured. Please install mkl-service package, see http://github.com/IntelPython/mkl-service
這個 UserWarning 是正常的,這只是我們使用公開 library 時內部顯示的警告,不會影響正常使用。
對於您的問題,的確不建議使用其他 Repo 內的 model 串接 Kneron mmlab 上的 onnx export 與 inference,不然可能就會有推論結果不符合預期的問題。
如果需要使用不是 Kneron-mmdetection 內的 Repo 建議自己去修改原本其他 repo 的 code,自己將 onnx export 出來並進行 inference 的驗證,驗證後,接著在進行 Kneron Tool Chain 的流程。
您也可以參考:
(1) http://doc.kneron.com/docs/#model_training/object_detection_yolov5/
(2)http://doc.kneron.com/docs/#toolchain/manual/ (Tool Chain docker 的部分)
@Andy Hsieh
Hi Andy,
感謝您抽空解答~
我在後續有用kneron-mmdetection裡面的python tools/train.py configs/yolox/yolox_s_8x8_300e_coco_img_norm.py來重新訓練模型
以下是該模型的評估結果
在做model quantization的時候
我有嘗試使用100張和200張資料
但最後讓KL720推論的時候
卻都偵測不出目標
但在轉檔優化過程中都沒出現什麼錯誤訊息
不知道這部分是不是可能在訓練模型上有問題呢?
謝謝!!
@呂則賢
Hi 呂則賢,
我這邊初步推測偵測不出目標的原因是你有修改到 class 種類並設定 2 種,因為 yolox_plus_demo 內的 inference scripts (KL720DemoGenericInferenceYoloX_BypassHwPreProc.py) 是針對預設 class 80,您可以試著修改看看。
或是您是否可以提供您的 onnx、KL720 nef 與 推論的 Scripts 還有相關檔案,也讓我試試。