kneo-pi 要如何同時載入多個NEF 來進行推論?
請問下,
目前使用 kneo-pi(SDK使用kneron_plus C ),使用yolov5s 來訓練
數據種類 依情境應用需求有A/B 二組數據,分別產生A.nef/B.nef
A.nef/B.nef 各別佈署到kneo-pi皆可以進行推論,
但因情境應用,完整推論過程有需要先使用A.nef 進行推論,再依A.nef 推論的結果,進行B.nef推論
想了解kneo-pi 要如何同時載入多個NEF 來進行推論,
===============================================
目前有使用合併多個NEF(kneron_nef_utils,REF:https://doc.kneron.com/docs/#toolchain/appendix/nef_utils_guide/#2-generated-nef),搭配kl730_demo_customize_inf_multiple_models 無法進行推論
A.nef(kneopi 可推論,約為7.5M)/B.nef(kneopi可推論,約為7.5M) 合併成 models_730.nef(約為7.5M) ,依 models_730.nef 合併後為7.5M,應該是合併失敗
Comments
您好,
之前在Kneron Toolchain上有combine_nef的模型跑失敗,會遇到KP_FW_INFERENCE_ERROR_101的bug,kneron_nef_utils可能也有相同的bug。這個在Toolchain的最新版本(v0.31.0)有修好,可以請您更新Toolchain版本再來試一次。
也可以請您說明一下"無法進行推論"具體來說是指什麼,或是遇到什麼錯誤嗎? 謝謝!
您好,
請問kneo-pi 若同時載入多個NEF 來進行推論,是使用合併NEF 方式?
成功的合併NEF,是會有什麼變化(如NEF空間會變大),或者是如何驗証合併NEF成功,使用kl730_demo_customize_inf_multiple_models ?
===================================================
您所需資訊如下,會再試新版toolchain
kneron_plus version v3.1.2
kneron/toolchain:v0.30.0(使用 docker pull kneron/toolchain:latest)
kl730_demo_customize_inf_multiple_models 執行畫面如下:
./kl730_demo_customize_inf_multiple_models
connect device ... OK
upload firmware ... OK
upload model ... OK
read image ... OK
starting inference loop 10 times:
inference failed send, error = 21 (The loading model is invalid)
詳情如下:
=========================
kneron_plus_v3.1.2.zip
(onnx1.13) root@6bf948097497:/workspace# cat /workspace/version.txt
kneron/toolchain:v0.30.0
(onnx1.13) root@6bf948097497:/workspace#
(onnx1.13) root@6bf948097497:/data1/oga_plate_nef_file# ls -alh
total 57M
drwxrwxr-x 2 1000 1000 4.0K Sep 23 06:51 .
drwxrwxr-x 11 1000 1000 4.0K Sep 23 02:54 ..
-rw-r--r-- 1 root root 7.5M Sep 23 06:49 A.nef
-rw-r--r-- 1 root root 7.6M Sep 23 06:49 B.nef
-rwxr-xr-x 1 root root 42M Sep 23 02:52 kneron_nef_utils
(onnx1.13) root@6bf948097497:/data1/oga_plate_nef_file# ./kneron_nef_utils --combine_nef A.nef B.nef
Extract_Status: 0
/data1/oga_plate_nef_file/output/NEF_0x71143422_models_730.kne
output/models_730.kne
Combine multiple NEF file into new one in:
/data1/oga_plate_nef_file/output/models_730.nef
(onnx1.13) root@6bf948097497:/data1/oga_plate_nef_file# ls -alh output/models_730.nef
-rw-r--r-- 1 root root 7.5M Sep 23 06:52 output/models_730.nef
./kl730_demo_customize_inf_multiple_models
connect device ... OK
upload firmware ... OK
upload model ... OK
read image ... OK
starting inference loop 10 times:
inference failed send, error = 21 (The loading model is invalid)
您好,
成功合併的NEF檔案是會變大的,如需要測試NEF是否成功,可以先使用generic_data_inference來測試看看,如果有問題還需再請您提供一下 error message。 感謝!
您好,
目前己使用新版的Toolchain( v0.31) 的kneron_nef_utils 來進行A.nef / B.nef (A.nef/B.nef 皆可以在kneo pi上進行推論) 合併
提供各別空間大小資訊,讓您參考,以models_730.nef 大小看來,合併應該是無成功
不知道是否有什麼步驟問題,造成此結果?
額外想了解,若要KNEO PI 可以在A.NEF 推論後,再依A.NEF 推論結果,進行B.nef 推論,是否只有這種方式?
感謝
您好,
關於models_730.nef大小問題,只看檔案大小其實是看不太出來是否有成功的,因為檔案大小有這幾種可能性:
所以如果想要知道是否成功可以用generic_data_inference來測試看看是否跑得動。
關於推論問題,是的,一次只能進行一個推論,A.NEF推論完才會進行B.NEF的推論。
您好,
這裡提供另一個方法來得知combine是否成功,可以使用我們kneron_nef_utils裡的 ./kneron_nef_utils --info path/to/file.nef
來Dump NEF Information https://doc.kneron.com/docs/#toolchain/appendix/nef_utils_guide/#4-dump-nef-information
裡面會顯示有被combine的model ID,可以用這個來對照您的A.NEF跟B.NEF是否有合併到models_730.nef裡。
您好,
A.nef(model:yolov5s , kneo-pi 使用 kl730_demo_generic_image_inference_post_yolo 可推論)
B.nef(model:yolov5s, kneo-pi 使用 kl730_demo_generic_image_inference_post_yolo 可推論)
合併出來Models_730.nef(kneo-pi 可推論A.nef 內的物件,但似乎無法推論B.nef)
使用kneron_nef_utils來查看models_730.nef,不知道是否是520 VS 730 平台差異
從訊息看無multi models 的情況如下,
您好,
感謝提供的截圖,現在看來combine是沒有成功,失敗的原因可能是因為您兩個NEF都使用了相同的model_id,這可能會導致合併的失敗,建議您可以把其中一個的model_id改成不一樣的 ( 32769, 32770),然後再combine一次看是否能成功。感謝!
您好,
修改 A.nef/B.nef (A.nef B.nef kneopi 皆可正常推論) model_id 後,情況一樣還是無法合併成功
提供結果和詳情截圖
==================================================
結果截圖如下:
==========
詳情截圖如下:
您好,
這樣就有可能是其他問題所造成的,可以麻煩您提供以下的檔案嗎?
-A.nef和B.nef (兩個model ID相同)
-A.nef和B.nef (兩個model ID不同)
-A和B模型分別轉換成nef時產生的model_fx_report.html
謝謝!
您好,
所需的資料
A.nef和B.nef (兩個model ID相同) 和model_fx_report.html ==> A.nef/B.nef (id 40000)
A.nef和B.nef (兩個model ID不相同) 和model_fx_report.html ==> A.nef(id 40001)/B.nef (id 40002)
感謝
您好,
在測試過您的檔案後我們這邊是可以combine成功的,後來發現是您的指令用錯了,正確的指令是需要用引號包住A.nef和B.nef的,像這樣: ./kneron_nef_utils -c "A.nef B.nef",然後models ID不能一樣。感謝!
下面附上一張測試的圖: