当前位置: 首页 > news >正文

模型导出为 ONNX/TensorRT 格式

将训练好的 YOLOv8 模型轻量化并导出为 ONNX/TensorRT 格式,最终部署到 Jetson Nano 这类嵌入式设备上加速推理,这是实际落地中非常关键的一步,能显著提升模型在边缘设备上的运行速度。

下面我会从模型导出TensorRT 优化Jetson Nano 部署三个核心环节,给出完整的可执行步骤和代码,确保你能一步步落地。

一、核心原理

  • ONNX:是一种跨框架的模型格式,作为中间桥梁,能实现 PyTorch/TensorFlow 等框架到 TensorRT 的转换。
  • TensorRT:NVIDIA 推出的高性能推理引擎,通过层融合、精度校准(FP16/INT8)、内核自动调优等方式优化模型,大幅提升 NVIDIA 设备(如 Jetson Nano)的推理速度。
  • 轻量化核心:除了格式转换,还包括精度降低(从 FP32 到 FP16/INT8)、模型裁剪等,在精度损失可控的前提下提升速度。

二、完整实现步骤

前置条件
  1. Jetson Nano 环境准备:
    • 刷入 JetPack 系统(推荐 JetPack 5.0+,自带 TensorRT、CUDA)。
    • 确认已安装ultralyticsonnxtensorrt

      bash

      运行

      # Jetson Nano 安装 ultralytics pip3 install ultralytics onnx # TensorRT 随 JetPack 自带,无需额外安装,验证是否安装成功 python3 -c "import tensorrt; print(tensorrt.__version__)"
  2. 准备好训练好的 YOLOv8 模型(best.pt)。

步骤 1:导出 YOLOv8 模型为 ONNX 格式

YOLOv8 内置了一键导出功能,无需手动编写转换代码,直接导出 ONNX 格式(兼容 TensorRT)。

python

运行

from ultralytics import YOLO # 加载训练好的 YOLOv8 模型 model = YOLO("best.pt") # 导出为 ONNX 格式(关键参数说明) # format: 导出格式,指定为 onnx # imgsz: 输入图像尺寸,需和训练时一致(如 640) # opset: ONNX 算子版本,推荐 12+(兼容 TensorRT) # dynamic: 动态输入尺寸(可选,嵌入式设备建议固定尺寸以提升速度) # half: 导出 FP16 精度(轻量化核心,减少显存占用) model.export( format="onnx", imgsz=640, opset=12, dynamic=False, half=True # 导出 FP16 精度,Jetson Nano 支持 )

执行后会在模型同目录生成best.onnx文件,这是中间格式模型。

步骤 2:将 ONNX 转为 TensorRT 引擎(核心加速)

TensorRT 引擎(.engine文件)是针对 NVIDIA 硬件优化后的模型,推理速度最快。有两种方式实现:

方式 1:使用 YOLOv8 内置的 TensorRT 导出(最简单)

python

运行

# 直接从 YOLOv8 模型导出 TensorRT 引擎 model.export( format="engine", imgsz=640, device=0, # Jetson Nano 的 GPU 设备号 half=True # FP16 精度 )

执行后生成best.engine文件,直接用于推理。

方式 2:手动用 TensorRT API 转换(更灵活,适合自定义优化)

python

运行

import tensorrt as trt import os # TensorRT 日志设置 TRT_LOGGER = trt.Logger(trt.Logger.INFO) EXPLICIT_BATCH = 1 << (int)(trt.NetworkDefinitionCreationFlag.EXPLICIT_BATCH) def build_engine(onnx_file_path, engine_file_path): # 构建 TensorRT 引擎 builder = trt.Builder(TRT_LOGGER) network = builder.create_network(EXPLICIT_BATCH) parser = trt.OnnxParser(network, TRT_LOGGER) config = builder.create_builder_config() # 设置最大工作空间(Jetson Nano 建议 1GB 以内) config.max_workspace_size = 1 << 30 # 1GB # 启用 FP16 精度(Jetson Nano 支持) config.set_flag(trt.BuilderFlag.FP16) # 解析 ONNX 文件 with open(onnx_file_path, "rb") as f: if not parser.parse(f.read()): for error in range(parser.num_errors): print(parser.get_error(error)) return None # 构建并保存引擎 serialized_engine = builder.build_serialized_network(network, config) with open(engine_file_path, "wb") as f: f.write(serialized_engine) return engine_file_path # 转换 ONNX 到 TensorRT 引擎 onnx_file = "best.onnx" engine_file = "best.engine" if not os.path.exists(engine_file): build_engine(onnx_file, engine_file) print(f"TensorRT 引擎已生成:{engine_file}") else: print(f"引擎文件已存在:{engine_file}")
步骤 3:在 Jetson Nano 上用 TensorRT 引擎推理

使用生成的.engine文件进行推理,速度远快于原始.pt模型:

python

运行

from ultralytics import YOLO # 加载 TensorRT 引擎模型 model = YOLO("best.engine") # 推理单张图像(Jetson Nano 上实测速度比 PT 模型快 2-5 倍) results = model("test.jpg", imgsz=640) # 解析位置结果(和之前 PT 模型推理代码完全兼容) for r in results: boxes = r.boxes for box in boxes: x1, y1, x2, y2 = box.xyxy[0].tolist() cls_name = model.names[box.cls[0].item()] conf = box.conf[0].item() print(f"类别:{cls_name}, 置信度:{conf:.2f}, 位置:({x1:.1f},{y1:.1f})-({x2:.1f},{y2:.1f})") # 可视化结果 results[0].save("result_trt.jpg")
步骤 4:进阶优化(INT8 精度,极致轻量化)

如果追求更快速度,可将模型转为 INT8 精度(需准备校准数据集):

python

运行

# YOLOv8 导出 INT8 精度的 TensorRT 引擎 model.export( format="engine", imgsz=640, device=0, int8=True, # 启用 INT8 精度 data="data.yaml" # 校准数据集配置文件,用于 INT8 量化 )

注意:INT8 精度会有轻微精度损失,但速度比 FP16 再提升 30%-50%,适合对精度要求不极致的场景。

三、Jetson Nano 部署注意事项

  1. 显存限制:Jetson Nano 只有 4GB 显存,建议使用 YOLOv8n(轻量版)、imgsz=640 或更小(如 480)。
  2. 电源供电:必须用 5V/3A 电源,否则会因供电不足导致推理卡顿或设备重启。
  3. 散热:Jetson Nano 推理时发热明显,需加装散热风扇,避免因过热降频。
  4. 推理速度参考
    • YOLOv8n + FP32(PT 模型):~5 FPS
    • YOLOv8n + FP16(TensorRT):~15 FPS
    • YOLOv8n + INT8(TensorRT):~20 FPS

总结

  1. 模型轻量化到 Jetson Nano 部署的核心流程:YOLOv8 PT 模型 → ONNX 中间格式 → TensorRT 引擎,其中 TensorRT 是嵌入式设备加速的关键。
  2. 优先选择FP16 精度导出 TensorRT 引擎,在精度损失可控的前提下,能让推理速度提升 2-5 倍。
  3. Jetson Nano 部署需注意显存、供电和散热,建议使用轻量版模型(YOLOv8n)和固定输入尺寸。
http://www.jsqmd.com/news/304972/

相关文章:

  • 北京首个AI教育实训基地!摩尔线程联合北京市十一学校赋能创新人才培养
  • 浅谈 OpenAI Agents SDK
  • AI Agent成“权限刺客“?企业安全团队集体破防!程序员必看风险管控指南
  • 震惊!AI终于会“摸鱼“了!Skills架构让大模型秒变职场老油条,代码即一切!
  • 震惊!工程师总说需求做不了?揭秘AI Agent内部循环,小白也能看懂!
  • AI开发新风向!高效智能体技术揭秘,让你的大模型从“吃内存大户“变身“效率王者“,2026年必学技术!
  • 震惊!中国电信AI新神作TeleMem让大模型“开挂“,记忆暴涨38%!小白程序员也能轻松上手!
  • 震惊!普通程序员也能手搓AI视频agent?2026年AI视频奇点已来,小白也能弯道超车!
  • 工业金属3d打印机厂家
  • AI界的“灵魂与肉体“:LLM负责思考,Agent负责行动,程序员必看!
  • 家禽商城销售系统开发开题报告
  • 详细介绍:Java-173 Neo4j + Spring Boot 实战:从 Driver 到 Repository 的整合与踩坑
  • 影评情感分析可视化及推荐系统的设计与实现开题报告
  • 人类测试员的反击:AI无法替代的5项核心技能
  • 【程序员必看】AI Agent开发“躺平指南“:不做重复劳动,代码库也能实现“复利增长“!告别炮火犁过的代码库,漏斗方法论让新项目速度提升60%!
  • 20260126_222059_AI_Agent_重构产业逻辑___《AI_Agent_智能
  • “改Prompt靠猜,上线靠反馈“终结者!AI Agent评估全攻略,让迭代效率翻倍
  • 大模型应用监控不内卷!Java Agent带你躺平实现无侵入监控
  • 救命!我的AI助手正在偷偷访问不该看的数据,大模型安全警报拉响!
  • 2025智能工作流AI优化引擎培训课程推荐:架构师快速入门的5门课
  • 【程序员必看】AI开发10大硬核技术:RAG、Agent、LoRA...一篇全搞定,附源码
  • 一文分析:软件测试的底层逻辑是什么?
  • 软件测试面试必问的几个问题
  • 别再只玩ChatGPT了!2025年最火的AI Agent技术,一行代码带你入门,小白也能逆袭成大模型开发者!
  • 纯干货分享 ~ 银行测试面试题大揭秘!
  • 百万量产之后,轻舟智航又盯上了L4无人车 | 对话于骞
  • 【手写Easy-Spring|1】
  • 【Hot100|13-LeetCode 56. 合并区间】
  • 鼠标手势(Cursor)演示
  • CSS 学习笔记 (1) 基础语法