Yolov5 Convert onnx to NEF model error !!
yolov5之模型是在自己訓練的,並且利用yolov5官方之export.py將pt檔轉換成onnx檔
由於我在kneron的mmdetection文件中只找到yolox說明步驟,因此onnx轉nef我是參考這個網址的step5來操作https://github.com/kneron/kneron-mmdetection/blob/main/docs_kneron/yolox_step_by_step.md,
配合官方影片為: https://www.youtube.com/watch?v=6JOyNonmpfY ( 時間為 30:05 ~ 34:05 )
但在跑 python python_api_workflow.py 指令時,出現如下錯誤:
terminate called after throwing an instance of 'std::runtime_error'
what(): CSim only support CPU node in the end of model and write data to output buffer.
./compilerIpevaluator_720.sh: line 32: 38 Aborted (core dumped) $LIBS_FOLDER/compiler/compile 720 $model $TMP_FOLDER/config_compiler.json warning compile.log
Traceback (most recent call last):
File "python_api_workflow.py", line 14, in <module>
eval_result = km.evaluate()
File "/workspace/miniconda/lib/python3.7/site-packages/ktc/toolchain.py", line 134, in evaluate
subprocess.run(['./compilerIpevaluator_720.sh', input_model_path], check=True)
File "/workspace/miniconda/lib/python3.7/subprocess.py", line 512, in run
output=stdout, stderr=stderr)
subprocess.CalledProcessError: Command '['./compilerIpevaluator_720.sh', '/data1/input.onnx']' returned non-zero exit status 1.
下圖為 python_api_workflow.py :
我的onnx檔:
Comments
@Su
Hi Su,
您的 onnx model 內含有 KL720 不支援的 operators (eg. Reshape, Transpose),您可能可以先將不支援的 opertaors 去除 (如下圖)。
opertaors 支援列表您可以參考:
https://doc.kneron.com/docs/#toolchain/manual/#2-toolchain-docker-overview (2.3 Supported operators, Table 1.2)
onnx Editor您可以參考:
https://doc.kneron.com/docs/#toolchain/python_api/ (1.3 Editors) 或是
https://doc.kneron.com/docs/#toolchain/converters/#7-model-editor (7 Model Editor)
@Andy Hsieh
我將紅線以下的node皆刪掉了,跑的過程中前面看起來沒問題,也跑出了我放照片的名稱(圖一.圖二),但後面會出現如下圖錯誤KeyError: 'images'
(圖三),想請問如何解決?
另外紅線以上的resize我看沒有在列表裡,有需要刪掉嗎?
@Andy Hsieh
此項問題已解決
感謝您!! 另外想問一下,我將紅線以下的node全刪掉後可以跑了,不過想請問這樣做會影響到後面的結果嗎?
如果影響能夠怎麼做呢 ((有看到其它文說放到 post process 上在 Host 端執行
但有點不太能夠理解這部分的操作
@Su
Hi Su,
如同您在這邊看到的回答 (https://www.kneron.com/forum/discussion/comment/1183/#Comment_1183),您的 model 將紅線以下的 node 全刪掉後 是會影響到您後面輸出結果的。
原本您的 model 在尚未修改前,你的 model 輸出的結果只會有一個 shape 為 [1, 25200, 7 ] 的 inference output,但是您刪除後 model 的 inference output 應該會變成有三個 (output1 shape [1, 21, 80, 80], output2 shape [1, 21, 40, 40], output3 shape [1, 21, 20, 20]) (如果您是 KL720,您目前可以參考 kneron_plus_v2.0.1 內的 python/example/KL720DemoGenericImageInference.py 與python/example/KL720DemoGenericImageInferencePostYolo.py),簡單來說您必須將那三個 output 的 feature map 做 post-process 得到您要的結果(e.g. Reshape, Transpose, Sigmoid 紅箭頭依序操作),這邊應該可以多少幫助您理解這部分的操作:https://github.com/ultralytics/yolov5/issues/7144
@Andy Hsieh
好的了解,感謝您提供的資訊!!