ONNX 转换并部署说明
1. ONNX特性
-
框架无关性: 仅在ONNX Runtime上运行分割推理,无需导入PyTorch。
-
高效推理: 支持ONNX模型的FP32和FP16精度,满足不同的计算需求。
-
易于使用: 使用简单的命令行参数执行模型。
-
广泛兼容: 利用Numpy和OpenCV进行图像处理,确保与各种环境的广泛兼容性。
2. 安装
使用pip安装所需的包。你需要用于导出YOLOv8-seg ONNX模型和使用一些实用功能,用于GPU加速推理,以及用于图像处理的ultralytics、onnxruntime-gpu、opencv-python。
pip install ultralytics
pip install onnxruntime-gpu # 用于支持GPU
# pip install onnxruntime # 如果你没有NVIDIA GPU,请使用这个
pip install numpy
pip install opencv-python
注意一点,onnxruntime-gpu对应自己的cuda版本,如下:
使用nvcc -v查看自己cuda版本:
我的cuda11.4对应的ONNX Runtime版本为1.9-1.12:
pip install onnxruntime-gpu==1.12 -i https://pypi.tuna.tsinghua.edu.cn/simple
3. 导出模型
1.使用提供的ultralytics包将YOLOv8分割模型导出为ONNX格式:
yolo export model=yolov8s-seg.pt imgsz=640 format=onnx opset=12 simplify
2.转换还需要安装以下几个库:
pip install onnx>=1.12.0 onnxslim>=0.1.31 onnxruntime
3.转换后版本为10,并且无法在opset=12上修改为自己的版本,如下:
4.根据上面的onnx版本对应,我的ONNX Runtime最多为1.12,也就是支持ONNX IR version 8,使用下述代码查看转换后的onnx版本:
import onnx
# 加载指定的 ONNX 模型文件
model_path = r"I:\onnx\best4.onnx"
model = onnx.load(model_path)
# 获取模型的版本信息
ir_version = model.ir_version
print(f"ONNX IR version of the model: {ir_version}")
5.使用如下代码转换版本为8:
import onnx
from onnx import version_converter, helper
model = onnx.load(r"I:\onnx\best4.onnx")
model.ir_version = 8
onnx.save_model(model, "best4_01.onnx")
并使用上述代码检查转换后版本:
6.使用onnx测试推理图片如下:
4. 部署ONNX-Runtime
ONNX推理需要很多后处理步骤,具体操作及代码如下:
1.模型推理输出的处理,代码如下:
2.后处理函数,代码如下:
3.掩码处理,代码如下:
4.缩放掩码,代码如下: