- 人工智能
- 计算机视觉
- 深度学习
- 微调
【免费下载链接】jetson-inference
Hello AI World guide to deploying deep-learning inference networks and deep vision primitives with TensorRT and NVIDIA Jetson.
本指南聚焦 jetson-inference 项目 "Hello AI World" 系列中的关键一环:把在 DIGITS 服务器上训练完成的 GoogleNet-12 等自定义分类网络,以模型快照(snapshot)的形式下载、解压到 Jetson 设备,再通过imagenet示例程序的扩展命令行参数将其加载进 TensorRT 进行推理。读完本文,你将掌握快照下载/传输的标准流程、快照包的文件结构,以及如何用--prototxt/--model/--labels等参数把自定义网络跑在 Jetson 上,并看到对应的源码级依据。
1. 前置脉络:快照从哪来
模型快照是整个 "Training → Snapshot → TensorRT" 流程的中间产物。在此之前,你需要在 DIGITS 服务器上完成两件事:
- 准备数据集:用 tools/imagenet-download.py 这类爬虫下载 ILSVRC12 的 1000 类图片(约 100GB),或用 tools/imagenet-subset.sh 把其中 230 个细分类软链接合并成
ball、bear、bike、bird、bottle、cat、dog、fish、fruit、turtle、vehicle、sign共 12 个大类; - 在 DIGITS 中训练:创建
GoogleNet-ILSVRC12-subset分类模型,通常跑满 30 个 epoch。
完整的重训练步骤见 docs/imagenet-training.md。当 DIGITS 训练任务完成、并在界面上用单张图片(如/ilsvrc12/n02127052/n02127052_1203.jpg)验证过推理结果(例如把原 GoogleNet-1000 判为Lynx的图片,被新模型正确判为cat)之后,就可以进入本指南的快照下载环节。
2. 从 DIGITS 服务器下载模型快照
2.1 浏览器下载(同一网络)
在 Jetson 的浏览器中打开 DIGITS 服务器页面,进入GoogleNet-ILSVRC12-subset模型。操作要点:
- 在Trained Models(已训练模型)区域,从下拉框中选择想要的快照——通常选择 epoch 数最高的那个,因为训练收敛更充分、分类精度通常更好;
- 点击Download Model按钮,浏览器即开始下载该快照的压缩包。
DIGITS 生成的快照文件名形如20170524-140310-8c0b_epoch_30.0.tar.gz,其中20170524-140310-8c0b是训练任务的唯一 ID,epoch_30.0表明这是第 30 个 epoch 保存的权重。
2.2 跨网络传输(SCP / U 盘)
如果 Jetson 与 DIGITS 服务器不在同一个网络、无法直接访问,可以按上述步骤把快照先下载到一台中间机器,再通过以下任一方式拷贝到 Jetson:
- SCP:在中间机器上执行
scp 20170524-140310-8c0b_epoch_30.0.tar.gz <jetson用户>@<jetson-ip>:<目标目录>; - USB 存储:把压缩包拷入 U 盘,再插到 Jetson 上复制。
这一方式与直接下载的唯一区别是文件传输通道不同,快照内容本身没有差异,后续解压与加载步骤完全一致。
3. 解压快照
把压缩包放到 Jetson 的合适目录(教程惯例放在仓库的networks/目录下,例如networks/GoogleNet-ILSVRC12-subset),然后在下载目录中执行解压:
cd <directory where you downloaded the snapshot> tar -xzvf 20170524-140310-8c0b_epoch_30.0.tar.gztar -xzvf会解压并显示文件清单(z表示 gzip 压缩、v表示 verbose、x解压、f指定归档文件)。解压后得到的是 DIGITS 导出的一套 Caffe 格式部署文件,通常包含:
| 文件 | 作用 |
|---|---|
deploy.prototxt | 部署用网络结构描述(去掉了训练层的推理版 prototxt) |
snapshot_iter_184080.caffemodel | 训练好的权重文件(文件名随迭代数变化) |
labels.txt | 每行一个类别名的标签文件(对应 12 个重训练类别) |
mean.binaryproto(可选) | 训练时使用的像素均值文件 |
注:DIGITS 导出的文件名中的迭代数(如
184080)与任务训练步数相关,实际以你下载的快照为准。后续加载时--model参数要指向这个.caffemodel文件。
4. 将自定义快照加载进 TensorRT
解压完成后,即可用仓库中的imagenet示例程序把该快照编译进 TensorRT 并跑推理。仓库中对应的示例源码是 examples/imagenet/imagenet.cpp,它同时支持静态图片/视频流输入(imagenet程序可同时充当教程旧版imagenet-console/imagenet-camera的角色,通过输入/输出 URI 区分)。
先设置环境变量指向快照目录,再执行加载命令:
$ NET=networks/GoogleNet-ILSVRC12-subset $ ./imagenet bird_0.jpg output_0.jpg \ --prototxt=$NET/deploy.prototxt \ --model=$NET/snapshot_iter_184080.caffemodel \ --labels=$NET/labels.txt \ --input_blob=data \ --output_blob=softmax其中bird_0.jpg位于仓库的 data/images/bird_0.jpg。各参数含义如下:
| 参数 | 含义 | 默认值 |
|---|---|---|
--prototxt | 自定义网络的 deploy prototxt 路径(仅 Caffe.caffemodel需要) | 无 |
--model | 自定义模型路径,支持 caffemodel / uff / onnx | 无(未指定时回退到googlenet等预训练模型) |
--labels | 类别标签文本文件路径(每行一类) | 无 |
--input_blob | 输入层 blob 名称 | data |
--output_blob | 输出层 blob 名称 | prob |
--threshold | 分类最低置信度阈值 | 0.01 |
--topK | 返回的 Top-K 预测数量(imagenet程序参数) | 1 |
这些参数的解析逻辑在 c/imageNet.cpp 中可以看到:imageNet::Create(const commandLine&)先读取--network,若找不到预训练模型(FindModel失败),则读取--prototxt、--labels、--input_blob、--output_blob,并默认input="data"、output="prob",再调用imageNet::Create(prototxt, model, ...)走自定义模型加载路径。完整的参数帮助串定义在 c/imageNet.h 的IMAGENET_USAGE_STRING中。
注意:原教程此处输出 blob 写为
softmax,而代码中的默认值是prob。如果你的 DIGITS 导出 prototxt 的最终层名不同,请以deploy.prototxt里的实际层名为准——这就是为什么--output_blob需要显式指定。
5. 验证推理结果与参数生效
加载成功后,程序进入与预训练模型一致的推理循环(examples/imagenet/imagenet.cpp):从输入流Capture一帧,调用net->Classify(image, width, height, classifications, topK)得到(classID, confidence)列表,再通过cudaFont把"95.00% bird"这样的结果叠加到输出图像上,并实时显示 TensorRT 版本与网络 FPS。
与原始 GoogleNet-1000 相比,重训练后的 GoogleNet-12 对同样的图片会输出元类别(meta-class):例如把猫科动物统一判为cat、把 122 种犬种统一判为dog。这正验证了快照内容正确加载、TensorRT 引擎构建成功。
imagenet程序同样支持视频流/摄像头输入(把输入 URI 换成摄像头或视频文件即可,见 examples/imagenet/imagenet.cpp 中videoSource::Create的用法),因此自定义快照也能直接用于 imagenet-camera 场景 的实时识别。
6. 流程闭环与下一步
至此,一条完整的自定义识别链路已经打通:
imagenet-subset.sh构建 12 类数据集 → DIGITS 训练GoogleNet-ILSVRC12-subset;- 从 DIGITSTrained Models下载最高 epoch 快照(跨网络用 SCP/USB);
tar -xzvf解压得到deploy.prototxt+.caffemodel+labels.txt;imagenet加--prototxt/--model/--labels/--input_blob/--output_blob参数编译进 TensorRT 并推理验证。
下一步可以阅读 docs/imagenet-custom.md 深入了解自定义模型的更多加载细节,或转向 docs/detectnet-training.md 学习目标检测网络的训练与快照部署。若希望回看训练环节,可参考 docs/imagenet-training.md。
- 人工智能
- 计算机视觉
- 深度学习
- 微调
【免费下载链接】jetson-inference
Hello AI World guide to deploying deep-learning inference networks and deep vision primitives with TensorRT and NVIDIA Jetson.
相关推荐
如何快速上手SocketIoClientDotNet?3分钟实现实时通信功能
如何快速上手SocketIoClientDotNet?3分钟实现实时通信功能 SocketIoClientDotNet是一个强大的Socket.IO客户端库,专
人工智能计算机视觉深度学习微调告别路径困扰:jetson-inference自定义模型加载全攻略
告别路径困扰:jetson inference自定义模型加载全攻略 jetson inference是NVIDIA Jetson设备的深度学习推理和实时视觉DN
人工智能计算机视觉深度学习微调d3-delaunay 完全指南:Voronoi 图与德劳内三角剖分究竟能做什么?
d3 delaunay 完全指南:Voronoi 图与德劳内三角剖分究竟能做什么? d3 delaunay 是 D3 生态中一个专注于 几何计算 的快速库,它的
人工智能计算机视觉深度学习微调
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考