重现步骤
使用yolo v8训练视觉检测模型,使用yolov8版本为8.3.159,训练完后在windows使用ultralytics中的函数导出.pt文件为.onnx文件,然后在WSL Ubuntu22.04中使用nncase工具链转换onnx为kmodel
期待结果和实际结果
正常结果应该会生成.kmodel文件并提示转换成功,但实际提示报错如下:
ImportError: /home/silence/miniconda3/envs/yolo2kmodel/lib/python3.9/site-packages/onnx/../../../libprotobuf.so.29.3.0: undefined symbol: _ZN4absl12lts_202501275MutexD1Ev
软硬件版本信息
训练时的相关版本信息:
yolo v8版本:v8.3.159,使用yolov8n模型
Linux中的主要软件包版本如下:
nncase:2.9.0
nncase-kpu:2.9.0
onnx:1.18.0
onnxruntime:1.19.2
onnxsim:0.4.36
错误日志
Traceback (most recent call last):
File "/home/silence/models/to_kmodel.py", line 5, in <module>
import onnxsim
File "/home/silence/miniconda3/envs/yolo2kmodel/lib/python3.9/site-packages/onnxsim/__init__.py", line 1, in <module>
from onnxsim.onnx_simplifier import simplify, main
File "/home/silence/miniconda3/envs/yolo2kmodel/lib/python3.9/site-packages/onnxsim/onnx_simplifier.py", line 13, in <module>
import onnx # type: ignore
File "/home/silence/miniconda3/envs/yolo2kmodel/lib/python3.9/site-packages/onnx/__init__.py", line 84, in <module>
from onnx.onnx_cpp2py_export import ONNX_ML
ImportError: /home/silence/miniconda3/envs/yolo2kmodel/lib/python3.9/site-packages/onnx/../../../libprotobuf.so.29.3.0: undefined symbol: _ZN4absl12lts_202501275MutexD1Ev
尝试解决过程
1.重新生成onnx文件,生成onnx文件代码如下:
from ultralytics import YOLO
model = YOLO('E:/yolov8/ultralytics-v8.3.159/ultralytics-main/runs\detect/train/weights/best.pt')
model.export(format='onnx')
代码生成过程中出现了警告如下:
PyTorch: starting from 'E:\yolov8\ultralytics-v8.3.159\ultralytics-main\runs\detect\train\weights\best.pt' with input shape (1, 3, 640, 640) BCHW and output shape(s) (1, 14, 8400) (17.6 MB)
requirements: Ultralytics requirements ['onnxslim>=0.1.56', 'onnxruntime'] not found, attempting AutoUpdate...
WARNING requirements: AutoUpdate skipped (offline)
ONNX: starting export with onnx 1.17.0 opset 19...
WARNING ONNX: simplifier failure: No module named 'onnxslim'
ONNX: export success 1.3s, saved as 'E:\yolov8\ultralytics-v8.3.159\ultralytics-main\runs\detect\train\weights\best.onnx' (11.7 MB)
但onnx文件仍然生成成功了,再次转换仍出现undefined symbol错误
2.升级onnx
使用conda upgrade指令升级onnx,conda提示已经安装了相关包(应该已经是当前状态下最新)仍出现该报错
3.升级 Protobuf
使用sudo apt install重新安装libprotobuf-dev protobuf-compiler,安装程序正常完成,但报错仍在,使用ldd libprotobuf.so提示 No such file or directory(不太清楚为什么)
补充材料
使用的转换代码程序为
https://kendryte-download.canaan-creative.com/developer/k230/yolo_files/test_yolov8.zip
中的to_kmodel.py