hhzz头像
关注
【YOLO 入门到精通 10】模型导出与部署:ONNX、TensorRT 与边缘设备实战封面图

【YOLO 入门到精通 10】模型导出与部署:ONNX、TensorRT 与边缘设备实战

【YOLO 入门到精通 10】模型导出与部署:ONNX、TensorRT 与边缘设备实战

标签:ONNX TensorRT 模型部署 模型导出 边缘计算
难度:⭐⭐⭐⭐ | 阅读时长:约 65 分钟 | 系列:第 10/12 集
前置:09 目标跟踪 | 下一集:11 进阶任务


在这里插入图片描述

写在前面

.pt 文件适合训练调试,不适合直接上生产。上线需要 ONNX、TensorRT 等优化格式——速度可提升 2~5 倍,依赖也更轻。

本集手把手教你导出、推理、选型,覆盖服务器到树莓派的全链路部署。


本集学习目标

  • 导出 ONNX/TensorRT/OpenVINO 等格式
  • 理解各格式适用场景
  • 运行 benchmark 对比性能
  • 搭建 REST API 服务

目录


10.1 为什么需要导出

PyTorch .pt导出格式
依赖重(PyTorch)轻(ONNX Runtime 等)
速度基准优化后 2~5x
跨平台有限广泛
生产❌✅

格式选型

格式平台加速
ONNX跨平台1.5~2x
TensorRTNVIDIA GPU2~5x
OpenVINOIntel2~3x
CoreMLApple2~3x
TFLiteAndroid/嵌入式2~4x

10.2 基本导出操作

yolo export model=best.pt format=onnx
yolo export model=best.pt format=engine device=0 half=True
from ultralytics import YOLO

model = YOLO("runs/detect/train/weights/best.pt")

model.export(format="onnx", imgsz=640, simplify=True)
model.export(format="engine", device=0, half=True)   # TensorRT FP16
model.export(format="openvino")                       # Intel
model.export(format="coreml")                         # Apple
model.export(format="tflite", int8=True)            # 移动端

导出参数

参数说明
format目标格式
imgsz固定输入尺寸
halfFP16
int8INT8 量化
dynamic动态 batch/尺寸
simplify简化 ONNX 图
workspaceTensorRT 工作空间 GB

10.3 ONNX 导出与推理

model.export(format="onnx", dynamic=True, opset=17)

# 直接用 YOLO 加载 ONNX 推理
onnx_model = YOLO("best.onnx")
results = onnx_model("test.jpg")

ONNX Runtime 原生推理

import onnxruntime as ort
import numpy as np, cv2

session = ort.InferenceSession("best.onnx")
inp_name = session.get_inputs()[0].name

img = cv2.imread("test.jpg")
img = cv2.cvtColor(cv2.resize(img, (640,640)), cv2.COLOR_BGR2RGB)
img = img.transpose(2,0,1)[None].astype(np.float32) / 255.0

outputs = session.run(None, {inp_name: img})

10.4 TensorRT 加速

# FP16(推荐)
model.export(format="engine", device=0, half=True)

# INT8(最快,需校准数据)
model.export(format="engine", device=0, int8=True, data="calibration.yaml")

# 推理
trt_model = YOLO("best.engine")
results = trt_model("test.jpg")
print(results[0].speed)
精度速度精度损失
FP321x无
FP162~3x极小
INT83~5x小

10.5 边缘设备部署

是

Intel

Apple

Android

通用

部署平台

NVIDIA?

TensorRT FP16

OpenVINO

CoreML

TFLite INT8

ONNX

设备格式建议
JetsonTensorRT FP16imgsz=640, half=True
树莓派TFLite INT8yolo26n, imgsz=320
iOSCoreMLnms=True
服务器 GPUTensorRTbatch 推理

10.6 量化技术

# INT8 ONNX
model.export(format="onnx", int8=True, data="calibration.yaml")

# INT8 TensorRT
model.export(format="engine", int8=True, data="calibration.yaml", device=0)

10.7 基准测试

from ultralytics.utils.benchmarks import benchmark

benchmark(model="yolo26n.pt", data="coco8.yaml", imgsz=640, device=0)
yolo benchmark model=yolo26n.pt data=coco8.yaml
指标含义
Size文件大小
mAP50-95量化后精度
Inference推理耗时 ms

10.8 生产部署架构

FastAPI 服务

from fastapi import FastAPI, UploadFile
from ultralytics import YOLO
import cv2, numpy as np

app = FastAPI()
model = YOLO("best.engine")

@app.post("/detect")
async def detect(file: UploadFile):
    data = await file.read()
    img = cv2.imdecode(np.frombuffer(data, np.uint8), cv2.IMREAD_COLOR)
    results = model(img, conf=0.5)
    return {"detections": [
        {"class": model.names[int(b.cls[0])], "conf": float(b.conf[0]), "bbox": b.xyxy[0].tolist()}
        for b in results[0].boxes
    ]}

Docker

FROM ultralytics/ultralytics:latest-nvidia
WORKDIR /app
COPY best.engine api.py ./
RUN pip install fastapi uvicorn
EXPOSE 8000
CMD ["uvicorn", "api:app", "--host", "0.0.0.0", "--port", "8000"]

10.9 YOLO26 导出注意

YOLO26 默认端到端无 NMS:

model.export(format="onnx")                    # end2end=True,推荐
model.export(format="onnx", end2end=False)     # 需 NMS,精度略高

10.10 踩坑指南

坑解决
TensorRT 导出失败确认 CUDA/cuDNN 版本匹配
ONNX 推理尺寸不对导出时固定 imgsz
INT8 精度掉太多增加校准数据量
Mac 无法 TensorRT用 CoreML 或 ONNX
动态尺寸导出后慢生产用固定尺寸

10.11 本集小结

# 服务器 NVIDIA
yolo export model=best.pt format=engine device=0 half=True

# 跨平台
yolo export model=best.pt format=onnx

# 移动端
yolo export model=best.pt format=tflite int8=True

← 第09集第11集:进阶任务 →

转载自 CSDN-专业IT技术社区

原文链接:https://blog.csdn.net/weixin_43025151/article/details/167370523

文章来源转载

评论

赞0

评论列表

微信小程序
QQ小程序

关于作者

点赞数:0
关注数:0
粉丝:0
文章:0
关注标签:0
加入于:--