1.onnx介绍(Open Neural Network Exchange)
为什么导出成ONNX?
- 导出成 ONNX 后,你就可以用 TensorRT、OpenVINO、ONNX Runtime 等工具加速推理。
个人理解:
(1)专为推理优化,去除非必要计算节点,更加轻量级, 移除训练相关参数,模型体积通常减小30-50%,更加**标准化,**统一的模型表示,避免框架依赖。
(2)以yolo为例,训练出来的best.pt文件,(它主要进行训练和推理,需要完整的pytorch环境,模型相对于onnx也较大,相对于onnx也较慢,跨平台有限,主要是依赖gpu)。
对于.pt转换之后的onnx文件,(它主要进行推理,仅仅依赖ONNX Runtime,相对于.pt文件优化后更快(10-30%))
1.需要按照必要的库文件,这里采用了镜像源加速。
# 安装必要库
pip install onnx onnxruntime onnxslim -i https://pypi.tuna.tsinghua.edu.cn/simple

2.基础转换(单行命令代码)
# 使用YOLOv8 CLI直接转换(CLI 是 Command-Line Interface(命令行界面))
#(与图形用户界面(GUI)不同,CLI 不依赖鼠标点击,而是靠键盘输入指令)
yolo export model=yolov8n.pt format=onnx
2.高级转换脚本(带详细配置)ptToOnnx.py
from ultralytics import YOLO
model = YOLO("yolov8n1.pt")
model.export(
format="onnx",
imgsz=640, # 固定输入尺寸
opset=13,
#YOLOv8 官方推荐使用 opset=12 或 13。指定 ONNX 的 算子集版本(Operator Set Version) 为 13
simplify=True,#在导出 ONNX 后,自动对模型进行图优化简化
dynamic=False # ← 关键!禁用动态输入(即动态的输入图片尺寸)
)
运行这段代码后,会在 best.pt 所在目录下生成一个新文件:
yolov8n1.onnx

3.验证onnx模型是否正确,创建verifyOnnx.py
import onnxruntime as ort
model_path = "yolov8n1.onnx"
session = ort.InferenceSession(model_path)
input_name = session.get_inputs()[0].name
input_shape = session.get_inputs()[0].shape
print("Input shape:", input_shape)

验证无误
4.编写yaml文件,定义模型属性,yaml文件放置位置不限,c_coco128_detection.yaml
type: yolov8
name: c_coco128-yolov8-r20251226
display_name: c_coco128 Detection (YOLOv8)
provider: cfk
model_path: C:/Users/liupei/Desktop/ultralytics-v8.2.82/yolov8n1.onnx
conf_threshold: 0.3
iou_threshold: 0.5
max_det: 100
classes:
- person
- bicycle
- car
- motorcycle
- airplane
- bus
- train
- truck
- boat
- traffic light
- fire hydrant
- stop sign
- parking meter
- bench
- bird
- cat
- dog
- horse
- sheep
- cow
- elephant
- bear
- zebra
- giraffe
- backpack
- umbrella
- handbag
- tie
- suitcase
- frisbee
- skis
- snowboard
- sports ball
- kite
- baseball bat
- baseball glove
- skateboard
- surfboard
- tennis racket
- bottle
- wine glass
- cup
- fork
- knife
- spoon
- bowl
- banana
- apple
- sandwich
- orange
- broccoli
- carrot
- hot dog
- pizza
- donut
- cake
- chair
- couch
- potted plant
- bed
- dining table
- toilet
- tv
- laptop
- mouse
- remote
- keyboard
- cell phone
- microwave
- oven
- toaster
- sink
- refrigerator
- book
- clock
- vase
- scissors
- teddy bear
- hair drier
- toothbrush
5.在x-anylabeling中加载自定义模型
-
打开 X-AnyLabeling;
-
点击顶部菜单栏的 AI 按钮(或按
Ctrl+A); -
在模型下拉列表底部,选择 "...加载自定义模型";
-
选择你刚创建的 c_coco128_detection.yaml文件;
-
成功加载后,模型名称 "c_coco128 Detection (YOLOv8)" 会出现在下拉列表中;
-
选择"c_coco128 Detection (YOLOv8)"后,点击开始按钮,即可全部标注所有图片。
-
如下图

点击运行

ps:遇到问题
ModuleNotFoundError: No module named 'cv2'
解决方法,下载对应opencv的依赖包,采用清华源加速
pip install opencv-python -i https://pypi.tuna.tsinghua.edu.cn/simple