- 人工智能
- 计算机视觉
- 深度学习
- 微调
【免费下载链接】jetson-inference
Hello AI World guide to deploying deep-learning inference networks and deep vision primitives with TensorRT and NVIDIA Jetson.
本篇技术指南面向在NVIDIA Jetson平台上使用 jetson-inference 部署深度学习网络的开发者,系统讲解深度神经网络的两大核心阶段——训练(Training)与推理(Inference):训练阶段如何用带标签的数据集优化网络权重,推理阶段又如何借助 TensorRT 与 Jetson 集成 GPU 在嵌入式设备上实时运行。读完本文,你将掌握训练/推理的概念区分、DIGITS 交互式训练工作流的完整链路,以及 jetson-inference 库在 Jetson 上加载与运行推理网络(图像识别、目标检测、语义分割等)的基本方法与源码级原理。
深度神经网络的两大阶段:训练与推理
深度学习网络(DNN)的整个生命周期通常可以划分为两个主要阶段:训练(Training)和推理(Inference)。这是理解 jetson-inference 项目一切功能的前提,也是 docs/deep-learning.md 全篇的主线。
训练阶段:从标注数据中学习
在训练阶段,网络从大量带标签(labeled)的示例数据中学习。训练数据集中每一张图片都带有"ground-truth"标签,例如"这是一只猫""这是一辆车"。网络权重的取值在训练过程中不断被优化,直至能够识别出训练数据集中蕴含的各类模式。
深度神经网络由许多层相互连接的神经元组成。从架构上看:
- 网络越深(层数越多),训练和评估所需的时间越长;
- 但更深层的网络最终能够编码更多的"智能"——即更强的模式表达能力,这正是深度学习"深度"二字的含义。
在整个训练过程中,网络的推理性能会用一个**试验数据集(trial/validation dataset)**持续测试和调优。试验数据集与训练数据集一样带有 ground-truth 标签,因此可以客观评估网络当前的准确率,但它并不参与训练——网络没有"见过"这些样本。网络就这样反复迭代训练,直到达到用户设定的准确率阈值。
由于数据集规模庞大且推理网络很深,训练通常对计算资源要求极高,在传统 CPU 架构上可能要持续数周甚至数月。而使用 GPU 可以极大地加速这一过程,将其压缩到数天甚至数小时。
推理阶段:把学到的能力用于实时数据
推理(Inference)阶段利用训练好的权重,在运行时对实时数据进行评估:网络根据它学到的示例做出预测(prediction)并应用推理(reasoning)。由于深度网络层数深、计算量大,要在图像及其他传感器数据上做到实时处理,推理同样需要可观的算力。
jetson-inference 的解决方案是:使用NVIDIA GPU Inference Engine(即 TensorRT),它调用 Jetson 板载的集成 NVIDIA GPU,从而把深度推理部署到嵌入式平台上。TensorRT 的加速来自两个层面:
- 图优化(graph optimizations):对网络计算图进行层融合、冗余裁剪等优化;
- 半精度 FP16 支持:利用 Jetson GPU 的 FP16 硬件算力。
从源码看,c/tensorNet.h 中定义了precisionType枚举,明确支持TYPE_FASTEST(自动尝试 INT8 → FP16 → FP32)、TYPE_FP32、TYPE_FP16与TYPE_INT8四种精度模式,其中 FP16 正是 TensorRT 在 Jetson 上"超过双倍推理性能"的核心手段之一。
在嵌入式平台上部署深度推理,在机器人等领域有大量实际用途,包括:
- 图像识别(Image recognition)
- 目标检测(Object detection)
- 语义分割(Segmentation)
- 图像配准(Image registration,如单应性矩阵估计 homography estimation)
- 原始立体图像的深度估计(Depth from raw stereo)
- 信号分析(Signal analytics)
这些能力在 jetson-inference 中分别对应imageNet、detectNet、segNet、poseNet、actionNet、backgroundNet、depthNet等 DNN 视觉原语(vision primitives),详见 README.md 的 API 参考与各网络的独立教程(如 图像分类、目标检测、语义分割)。
DIGITS:让任何人都能交互式地训练网络
对于训练阶段,本教程推荐使用 NVIDIA 开源的DIGITS工具。DIGITS 是一个基于 Web 的交互式训练服务,任何人都可以借助 GPU 加速轻松上手并交互式训练自己的网络——无需编写训练脚本,通过浏览器界面即可完成数据集导入、模型创建、训练监控与准确率评估。
在本文所属的教程体系中,推荐的部署方式是:
- 训练:在宿主机 PC(或云端实例)上,使用 DIGITS + 独立 GPU(如 NVIDIA 数据中心级 GPU)训练 DNN;
- 推理:在 Jetson 设备上,使用 TensorRT 加载训练好的模型进行实时推理。
这一分工称为DIGITS Workflow,完整流程可参考 docs/digits-workflow.md。在 docs/digits-workflow.md 中给出的工作流示意图描述了这条链路:DIGITS 在云端/PC 上对标注数据集交互式训练模型 → 训练好的模型被部署到 Jetson → TensorRT 在嵌入式平台执行运行时推理。两者结合,构成了开发与部署具备先进 AI 与感知能力深度神经网络的完整、高效工作流。
训练端环境搭建:NGC 容器(推荐)
由于训练依赖众多(CUDA、cuDNN、NVcaffe、Python 框架等),文档 docs/digits-setup.md 建议初学者使用NVIDIA GPU Cloud(NGC)或 nvidia-docker 来搭建宿主机训练环境,这些方案会自动安装驱动与机器学习框架。核心步骤如下:
- 安装 NVIDIA 驱动:添加 NVIDIA Developer 仓库并安装
cuda-drivers,重启后用nvidia-smi验证 GPU 可见; - 安装 Docker 与 nvidia-docker2:安装 Docker CE 与
nvidia-docker2,将当前用户加入docker组; - 注册 NGC 并生成 API Key:在 NGC 网站注册后生成 API Key 备用;
- 登录容器仓库并验证 GPU:
$ docker login nvcr.io Username: $oauthtoken Password: <Your NGC API Key> # 用 CUDA 容器验证 GPU 透传是否生效 $ docker run --runtime=nvidia --rm nvcr.io/nvidia/cuda:9.0-cudnn7-devel-ubuntu16.04 nvidia-smi - 创建数据与任务目录并启动 DIGITS 容器:
$ mkdir /home/username/data $ mkdir /home/username/digits-jobs $ nvidia-docker run --name digits -d -p 8888:5000 \ -v /home/username/data:/data:ro \ -v /home/username/digits-jobs:/workspace/jobs nvcr.io/nvidia/digits:18.05随后浏览器访问
http://localhost:8888即可进入 DIGITS 交互界面。
提示:如果想在宿主机上原生安装 DIGITS(高级用法),可参考 docs/digits-native.md——手动安装 NVIDIA 驱动、cuDNN、编译 NVcaffe(caffe-0.15 分支),然后以
./digits-devserver启动服务(默认端口 5000,可用--port参数修改)。注意 NVcaffe 仅用于宿主机端训练,Jetson 端推理使用 TensorRT,不依赖 Caffe。
推理端:Jetson 与 TensorRT
推理端则是 jetson-inference 库的主场。训练完成后,把模型快照从宿主机复制到 Jetson,即可用 jetson-inference 中的推理网络类加载运行。以图像分类为例,docs/imagenet-console.md 展示了完整用法:
imageNet对象接收输入图像,输出每个类别的概率;默认模型 GoogleNet 与 ResNet-18 在构建时自动下载,均基于 ImageNet ILSVRC 的1000 类训练(类别清单见 data/networks/ilsvrc12_synset_words.txt);- 命令行工具 examples/imagenet-console/imagenet-console.cpp(C++)与
python/examples/imagenet-console.py(Python)在构建后位于jetson-inference/build/aarch64/bin目录。
运行示例(--network为可选参数,默认加载 GoogleNet):
$ ./imagenet-console --network=googlenet orange_0.jpg output_0.jpg $ ./imagenet-console granny_smith_1.jpg output_1.jpg注意:首次运行程序时,TensorRT 可能需要数分钟对网络做优化,优化后的网络文件会缓存到磁盘,后续运行将直接加载缓存,速度大幅提升。
除默认模型外,tools/download-models.sh 还可以下载 AlexNet、ResNet-50/101/152、VGG-16/19、Inception-v4 等更多分类网络(完整清单见 README.md)。通常网络越复杂分类准确率越高,但运行耗时也越长——这正是"训练-推理"权衡在模型选型上的直接体现。
从源码理解 Jetson 上的推理引擎
要深入理解"DIGITS 训练 + TensorRT 推理"这条链路在 Jetson 上的落地,可以看 c/tensorNet.h 这个所有推理网络类的基类。它从源码层面印证了文档中的关键论断:
- 精度模式:
precisionType枚举(c/tensorNet.h)支持TYPE_FASTEST、TYPE_FP32、TYPE_FP16、TYPE_INT8,并配套precisionTypeToStr()/precisionTypeFromStr()做字符串与枚举互转——对应命令行--precision参数,直接复用文档强调的 FP16 加速能力; - 计算设备:
deviceType枚举(c/tensorNet.h)支持DEVICE_GPU、DEVICE_DLA(Jetson Xavier 及更新的 DLA 深度学习加速器核心 0/1),说明推理可以灵活调度到 GPU 或 DLA; - 版本适配:文件开头用
NV_TENSORRT_MAJOR做条件编译(c/tensorNet.h),适配 TensorRT 1.x~8.x 的维度接口差异,并提供TENSORRT_VERSION_CHECK宏(c/tensorNet.h)做最小版本检查。
推理网络类的公共继承关系是:imageNet、detectNet、segNet、poseNet、actionNet等都派生于tensorNet。因此训练好的模型(无论是 DIGITS/Caffe 时代产出的模型,还是 README 中推荐的 PyTorch 迁移学习模型)都能通过统一的tensorNet接口加载、优化并运行——模型文件在首次加载时经 TensorRT 优化并缓存,后续即可实时推理。
需要说明的是:README 已明确指出,本文所述DIGITS/Caffe 教程已被弃用(deprecated),官方推荐改用 PyTorch 迁移学习 教程(见 README.md)。不过"训练在 GPU 主机/云端、推理用 TensorRT 部署到 Jetson"这一核心分工思想,在新旧工作流中完全一致:PyTorch 训练出的模型同样通过 TensorRT 优化后在 Jetson 上获得接近实时的推理性能。
小结与下一步
一句话总结本文的核心链路:训练阶段用 GPU(DIGITS 或 PyTorch)从标注数据集优化网络权重,推理阶段用 TensorRT 在 Jetson 上实时运行网络——训练决定网络"能学什么",推理决定网络"跑多快"。
上手实操的推荐路径是:
- 按 docs/jetpack-setup-2.md 完成 Jetson 的 JetPack 环境准备;
- 按 docs/building-repo-2.md 构建 jetson-inference(构建时会自动下载默认预训练模型);
- 从推理开始熟悉网络:先跑 图像分类、目标检测 的命令行示例,再尝试自己编写 C++/Python 推理程序;
- 如需定制模型,转用 PyTorch 迁移学习 训练自有数据集,再回到 Jetson 上用 TensorRT 部署。
- 人工智能
- 计算机视觉
- 深度学习
- 微调
【免费下载链接】jetson-inference
Hello AI World guide to deploying deep-learning inference networks and deep vision primitives with TensorRT and NVIDIA Jetson.
相关推荐
d3-delaunay 完全指南:Voronoi 图与德劳内三角剖分究竟能做什么?
d3 delaunay 完全指南:Voronoi 图与德劳内三角剖分究竟能做什么? d3 delaunay 是 D3 生态中一个专注于 几何计算 的快速库,它的
人工智能计算机视觉深度学习微调长文本处理新标杆:NVIDIA-Nemotron-3.5-Lightning 1M上下文窗口的实际应用案例
长文本处理新标杆:NVIDIA Nemotron 3.5 Lightning 1M上下文窗口的实际应用案例 NVIDIA Nemotron 3.5 Lightn
GoLobby Container vs dig vs funcy:Go IoC容器选型终极对比
GoLobby Container vs dig vs funcy:Go IoC容器选型终极对比 GoLobby Container 是一款轻量而强大的 Go
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考