4.7 模型导出与边缘部署
为什么这很重要
在上一章中,我们介绍了如何训练一个自定义的 YOLO 模型,并成功在 Jetson 上运行推理。在那个阶段,模型仍然以 .pt 格式存储,这是 PyTorch 生态中常用的原生格式。这是一个良好的起点,因为它证明了训练结果是正确的,并且模型已经能够在目标设备上完成目标检测。
在上一章中,我们介绍了如何训练一个自定义的 YOLO 模型,并成功在 Jetson 上运行推理。在那个阶段,模型仍然以 .pt 格式存储,这是 PyTorch 生态中常用的原生格式。这是一个良好的起点,因为它证明了训练结果是正确的,并且模型已经能够在目标设备上完成目标检测。
然而,模型能够在 Jetson 上运行,并不意味着它已经处于最佳的部署形态。.pt 文件主要为训练、验证和开发而设计,在那种场景下,灵活性比执行效率更重要。而对于真正的边缘部署,尤其是在 Jetson 这样的嵌入式平台上,我们关心的远不只是模型能否运行。我们还关心它的运行速度、内存消耗、吞吐量是否稳定,以及它能否适应设备的功耗与散热限制。
换句话说,训练好的检查点只是部署流水线的一部分。要让 YOLO 模型真正适用于实际的 Jetson 应用,通常需要将其转换为更适合部署的格式,并针对嵌入式推理进一步优化。这是连接计算机视觉开发与边缘工程的关键一步。
因此,训练完模型之后,下一个重要问题不只是"它能跑吗?",而是 "它能在 Jetson 上高效运行吗?" 要回答这个问题,我们需要先理解为什么模型优化是必要的。
为什么需要模型优化?
模型优化是必要的,因为最初训练得到的模型通常并未针对嵌入式硬件的约束进行设计。在训练过程中,主要目标是获得良好的精度和收敛性。然而在部署阶段,目标发生了变化。我们需要模型提供快速推理、低延迟、高吞吐、低内存占用以及良好的功耗效率。

这一点对 Jetson 设备尤为重要。与桌面 GPU 或云端服务器相比,Jetson 平台的计算资源、内存带宽和功耗预算更加有限。在许多边缘 AI 场景中,例如机器人、智能摄像头、工业检测或自动驾驶系统,模型必须能够实时处理数据。如果推理太慢,系统可能会丢帧、响应过迟,或无法满足应用的需求。
直接以 .pt 格式运行 YOLO 模型,通常会引入 PyTorch 运行时带来的不必要开销。虽然这种方式便于测试和原型开发,但并不适合从 Jetson 硬件中榨取出最高性能。模型也许能够正确运行,但可能未能尽可能高效地利用 GPU。结果是延迟可能仍然较高、吞吐受限,资源占用也可能高于必要水平。
模型优化有助于解决这些问题。通过将模型导出并针对推理进行优化,我们可以改进网络在目标硬件上的执行方式。这可能包括减少冗余操作、融合层、选择更高效的内核、将精度从 FP32 降为 FP16 或 INT8,以及优化内存使用。这些优化能在不改变模型整体任务的前提下,显著提升部署性能。
对于 Jetson 部署,优化带来了若干切实的好处:
1. 更低的延迟
模型更快意味着每一帧输入可以被更快地处理。这对于目标检测和跟踪等实时任务至关重要。
2. 更高的吞吐量
优化使系统能够处理更多每秒帧数,这对于视频分析和多路流应用非常重要。
3. 更低的内存占用
嵌入式设备的内存资源有限。经过优化的模型可以减少内存占用,提升系统稳定性。
4. 更好的功耗效率
Jetson 设备常用于关注功耗的边缘环境。更高效的模型可以让系统运行得更久、更可靠。
5. 更好地利用硬件
优化使模型能够更充分地利用 NVIDIA GPU 加速,而不是过度依赖通用框架的执行方式。
出于这些原因,模型优化不仅是一个可选的改进,它是将训练好的 YOLO 模型转化为可在真实部署环境中高效运行的实用边缘 AI 解决方案的必要步骤。
什么是 TensorRT?

TensorRT 是 NVIDIA 推出的高性能深度学习推理框架与运行时。它专门用于优化训练好的神经网络,并在包括 Jetson 设备在内的 NVIDIA 硬件上高效执行它们。
简单来说,TensorRT 是一个工具,可以帮助将训练好的模型转换为更适合部署的形式。TensorRT 不是通过通用的深度学习框架来运行模型,而是构建一个针对目标 NVIDIA GPU 量身定制的优化推理引擎。这使得模型能够运行得更快、更高效。

对于 Jetson,TensorRT 在部署中扮演着核心角色,因为它能够充分利用 NVIDIA 嵌入式 GPU 的能力。它可以执行多种优化,例如:
- 层融合,将多个操作合并为更高效的执行路径
- 内核自动选择,为硬件挑选最佳实现
- 精度优化,例如 FP16 或 INT8 加速
- 内存优化,减少不必要的内存搬运并提升运行时效率
因此,与直接运行原始 .pt 模型相比,TensorRT 可以显著提升 YOLO 模型的推理性能。

一种常见的 Jetson 部署工作流如下所示:
PyTorch .pt 模型 -> ONNX 模型 -> TensorRT 引擎 -> Jetson 推理
在这个流程中:
.pt模型 是训练得到的结果- ONNX 模型 是一种中间交换格式
- TensorRT 引擎 是用于在 Jetson 上推理的、经过优化的部署产物
这一过程表明,TensorRT 不仅仅是一个转换器,更是嵌入式 AI 部署中关键的优化与执行层。
从工程角度看,TensorRT 之所以重要,是因为它可以把一个仅仅是可训练、可测试的模型,转变为一个真正可部署且高效的模型。对 Jetson 用户来说,TensorRT 通常是实现实用级实时性能最重要的一步。
换句话说,训练好的检查点只是部署流水线的一部分。要让 YOLO 模型真正适用于实际的 Jetson 应用,通常需要将其转换为更适合部署的格式,并针对嵌入式推理进一步优化。这是连接计算机视觉开发与边缘工程的关键一步。
常见模型格式
| 格式 | 主要作用 |
|---|---|
| PyTorch checkpoint | 灵活,适合训练与实验 |
| ONNX | 可移植的中间格式 |
| TensorRT engine | 针对 NVIDIA 硬件优化的运行时格式 |
精度 vs 速度 vs 功耗
更精确的模型通常更大、更慢、消耗更多功率,而更快的模型通常更轻量但精度较低。因此在实际部署中,我们必须找到适合设备和任务的平衡点。边缘部署始终关乎权衡。
你常常需要在以下方面做平衡:
- 模型精度
- 推理速度
- 内存占用
- 散热与功耗限制
精度模式
模型精度指的是模型内部用多少比特来存储数值,例如权重和激活值。更高的精度,如 FP32,保留更多的数值细节;而较低的精度,如 FP16 或 INT8,使用的比特更少。较低的精度可以让推理更快,占用更少内存,这在 Jetson 等边缘设备上非常有帮助。但如果精度降得太低,模型可能会损失一些准确性,因此我们需要在速度与可靠性之间取得平衡。
代码示例
导出为 ONNX
yolo export model=yolo26s.pt format=onnx imgsz=640在 Jetson 上导出为 TensorRT
yolo export model=yolo26s.pt format=engine imgsz=640 half=True device=0实用的 Jetson 运行时命令
#turn on max mode
sudo nvpmodel -m 0
#turn on jetson clocks
sudo jetson_clocks动手试试
cd 4.7-Model-Export-and-Edge-Deployment/code
python compare_yolo26_pt_vs_engine.py --video ./cat.mp4🚀 观察经过优化后的模型在推理延迟上的变化

常见误解
- "如果模型成功导出了,部署就解决了。"
- 导出只是其中一步,运行时验证依然重要。
- "最快的模型一定是最好的模型。"
- 如果一个更快的模型遗漏了重要场景,它就没有意义。
- "INT8 总是优于 FP16。"
INT8可能很强,但前提是精度仍然可接受。
练习 / 思考
- 将一个训练好的模型导出为
ONNX,并记录命令。 - 用文字比较
checkpoint、ONNX和TensorRT engine各自最适合的用途。 - 设想一个模型很准确但太慢的情况,列出三种让部署更实用的方法。
- 解释为什么功耗模式在边缘设备上很重要。
总结
模型导出和边缘部署不是事后才考虑的事情,它们是完整的计算机视觉工作流的一部分。学习者在掌握了数据、训练和评估之后,下一个挑战就是将该模型转换为适合真实硬件的实用形态。
建议的下一步
继续阅读 4.8 实时视觉流水线框架。