
模型导出实战:PT转ONNX、ONNX精简、模型固化作者:黒漂技术佬 | 系列:嵌入式端目标检测部署实战一、.pt文件为什么不能直接部署?很多新手训练完YOLOv8后会得到一个best.pt文件,然后兴冲冲地把它拷到嵌入式设备上,结果发现根本跑不起来。这就好比你在Windows上写了一个.exe,直接拷到ARM Linux上执行——体系结构、依赖库全对不上。具体来说,.pt文件存在以下问题:框架绑定:.pt是 PyTorch 的私有序列化格式,反序列化需要完整的 PyTorch 运行时。嵌入式设备上有几G的内存给你装 PyTorch?Python依赖:PyTorch模型加载需要Python环境,而很多嵌入式设备跑的是裸C/C++程序,根本没有Python运行时。动态性:PyTorch计算图默认是动态的(Eager Mode),推理引擎无法预先知道计算图结构,也就没法做图优化。所以,第一步就是把模型从框架的牢笼里解放出来,导出为一个通用的、静态的、平台无关的格式。这个格式就是ONNX。二、ONNX是什么?ONNX(Open Neural Network Exchange,开放神经网络交换格式)是由微软和Facebook联合发起的开放标准。你可以把它理解为深度学习界的"PDF"——各家框架(PyTorch、TensorFlow、PaddlePaddle)都能导出ONNX,各家推���引擎(TensorRT、RKNN、OpenVINO、ONNX Runtime)也都能读取ONNX。ONNX的核心概念:计算图(Graph):ONNX用一个有向无环图(DAG)来描述模型的计算流程,节点是算子(Operator),边是张量(Tensor)的流动。算子集(OpSet):ONNX定义了一套标准算子(如 Conv、BatchNorm、Reshape 等),每个版本(opset version)有固定的算子列表。通用性:一份ONNX模型文件,可以在Windows/Linux/Mac/Jetson/RK等各种平台上运行,只要有对应的推理引擎。三、YOLOv5/v8导出ONNX实战以YOLOv8为例,导出ONNX只需要几行代码:fromultralyticsimportYOLO# 加载训练好的模型model=YOLO("yolov8n.pt")# 导出为ONNX格式model.export(format="onnx",# 目标格式imgsz=640,# 固定输入尺寸 640x640batch=1,# 固定 batch size=1opset=12,# ONNX算子集版本simplify=False,# 是否使用onnx-simplifier简化dynamic=False,# 是否保持动态维度)如果你用的是YOLOv5,用它自带的export.py:# YOLOv5 导出命令python export