自己訓練的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

  • edited July 2022

    @呂則賢

    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 的部分)

  • edited June 2022

    @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 還有相關檔案,也讓我試試。

The discussion has been closed due to inactivity. To continue with the topic, please feel free to post a new discussion.