Jetson Nano 边缘AI部署:YOLOv5 TensorRT加速调优
拿到 Jetson Nano 的第一天我把它插上电、接上屏幕等了十几分钟才看到桌面然后兴冲冲地去装 PyTorch进度条卡了四十分钟最后甩出一行 Illegal instruction (core dumped)。后来我才知道这不是板子坏了而是我拿 PC 上那套随便 pip 装的习惯硬套到了一台边缘 AI 设备上。Jetson Nano 这块信用卡大小的板子板载 128 核 Maxwell 架构 GPU、四核 ARM A57 CPU、4GB 内存由 CPU 和 GPU 共享跑的是完整 Ubuntu能直接调用 CUDA、cuDNN 和 TensorRT。它做的事情很朴素把训练好的模型搬到摄像头旁边、机器人身上、产线工位上在本地把推理跑完不用把视频流一路传回服务器。适合谁想入门人工智能但不想只停在 notebook 里跑 demo 的学生、要做毕业设计的同学、做边缘视觉产品的工程师、玩机器人的人。不适合谁想拿它训练大模型、想跑图像生成、想插上就用的人——它是一台要动手的机器不是一个家电。1. 先搞清楚定位别一上来就买错1.1 Jetson Nano 和树莓派、台式机显卡到底差在哪很多人第一次接触这块板子脑子里默认它是性能强一点的树莓派。这个认知会让你在选型和预期上连错三步。树莓派是通用计算平台强在接口丰富、生态热闹、社区教程多它的 GPU 主要是给图形显示和视频解码用的拿来跑神经网络基本靠 CPU 和 NEON 指令硬扛。Jetson 系列反过来了它是一台带通用 CPU 的 GPU 计算机整个板子的设计重心就压在并行计算上。四个平台的横向对照能帮你一眼看清自己站在哪个位置对比项树莓派 4BJetson Nano 4GBJetson Orin Nano 8GB台式机 RTX 显卡GPU 架构VideoCore VIMaxwell128 核Ampere1024 核 32 个 Tensor Core视型号而定算力量级约 0.03 TFLOPS 级472 GFLOPS FP1640 TOPS INT8稀疏数十至数百 TFLOPS内存形态2/4/8GBCPU 与 GPU 共享4GB LPDDR4共享8GB LPDDR5共享独立显存内存带宽约 10 GB/s 级25.6 GB/s约 100 GB/s 量级数百 GB/s是否支持 CUDA否是是是整板功耗58W5W / 10W 两档7W / 15W / 25W 三档100W 以上系统环境Raspberry Pi OS / UbuntuUbuntu 18.04JetPack 4.6Ubuntu 22.04JetPack 6任意YOLOv5s 640 帧率13 FPS15 FPS 上下60 FPS 以上100 FPS 以上表格里最值得盯住的是内存共享这一行。Jetson 系列用的统一内存架构CPU 和 GPU 看的是同一块物理内存不需要像独显那样把数据在主机内存和显存之间来回拷贝。这件事在小模型上几乎无感但在做多路视频解码、多模型串联的流水线时省下来的拷贝开销非常可观。代价是这块内存总量就是天花板模型、输入张量、中间激活值、系统进程全都在这 4GB 里挤。你在 PC 上习惯的那种显存不够就降 batch的思路在这里要换成从输入分辨率、批大小、模型宽度三个方向一起挤。另一个容易被忽略的点是内存带宽。25.6 GB/s 听起来不小但 GPU 做卷积的时候数据吞吐是贴着带宽跑的带宽一满算力再高也喂不饱。这就是为什么在 Nano 上把输入从 640 降到 416带来的帧率提升往往比换个更小的模型还明显——前者直接砍掉了数据搬运量。1.2 4GB 版、2GB 版和 Orin Nano怎么选市场上这几块板子经常被混着卖特征差别其实很清楚。Jetson Nano 4GB 开发套件是经典款128 核 Maxwell GPU、四核 A57、4GB LPDDR4、microSD 卡启动、HDMI 2.0 加 DP 1.2 双显示输出、一个 15 针 MIPI CSI 摄像头接口、40 针 GPIO 兼容树莓派排针。它的软件栈锁在 JetPack 4.6.x也就是 Ubuntu 18.04 CUDA 10.2 cuDNN 8.2 TensorRT 8.2 Python 3.6。官方早已停止大版本更新这一点必须提前知道否则你会在为什么装不上新版本 PyTorch上浪费一整周。Jetson Nano 2GB 版把内存砍半、去掉了 DP 接口、改用 USB-C 5V 3A 供电价格更友好。但 2GB 内存跑 YOLOv5 就已经很勉强桌面一开、浏览器一开基本没戏我个人不推荐新手拿它当主力学习板。Jetson Orin Nano 8GB 是现在更值得入手的选项Ampere 架构、1024 个 CUDA 核加 32 个 Tensor Core、8GB LPDDR5、支持 M.2 NVMe 固态、JetPack 6Ubuntu 22.04 CUDA 12 Python 3.10。算力量级比 Nano 4GB 高出两个数量级Tensor Core 对 FP16 和 INT8 的加速是实打实的硬件支持——这点在 Maxwell 上是不存在的后面第 5 章我会专门讲这个坑。选型上我的建议很直接如果是要正经做项目、做毕设、要长期用预算允许就上 Orin Nano 8GB别为了省一点钱在新手期被 Python 3.6 和缺少 Tensor Core 反复折磨。如果课程指定、手头已经有一块、或者就是想把边缘部署这条链路完整走一遍Nano 4GB 依然够用它跑 YOLOv5n 和 YOLOv5s 的推理是能出活的。至于 Nano 2GB除非预算真的卡得很死否则跳过。1.3 哪些人上手最划算哪些人建议绕道我见过太多人买了板子之后放在抽屉里吃灰原因基本都是需求错配。最适合上手的四类人一是正在学人工智能、已经会用 PyTorch 训练模型、但完全不知道模型怎么落地的人Nano 会逼着你理解前处理、后处理、量化、内存这些工程细节二是要做毕业设计的学生边缘视觉这种选题有实物、有演示、有数据答辩现场说服力强三是做工业检测、安防、农业、零售这类边缘场景的工程师需要一块低功耗、能长期挂在产线旁边的推理终端四是玩 ROS 或 ROS2 的机器人爱好者Nano 天生适合做视觉感知节点。建议绕道的三类人想用它在本地跑大语言模型对话的4GB 内存加上 Maxwell 架构跑 3B 参数都吃力这不是调参能解决的问题是硬件天花板想拿它训练模型的别想训练请回到 PC 或者租算力Nano 只负责推理期待开箱即用的Jetson 的学习曲线里有一半时间花在跟版本、依赖、供电、散热打交道如果不想碰这些用云端 API 更省事。2. 开箱到点亮硬件清单与系统烧录2.1 配件清单里最容易省错的三样东西板子本身只是半成品真正决定你体验好坏的是周边。这三样东西是新手最常省错的地方。电源。Nano 4GB 开发套件有一个 5V 4A 的桶形DC输入口官方推荐走这个口供电。micro-USB 口也能供电但只有 5V 2A 左右且线材压降大。供电不足的典型症状特别好认桌面能进去一插 USB 摄像头就黑屏重启或者跑推理跑到一半整板掉电。遇到这种随机重启第一反应不是怀疑系统坏了而是换一个 5V 4A 的电源适配器、换一根粗一点的线。Nano 2GB 版走 USB-C 5V 3A同样别用手机充电头凑合。microSD 卡。官方镜像解压后写进卡里大概占 14GB 左右加上后续装依赖、放数据集、存视频64GB 是起步128GB 更从容。速度等级看 A1/A2顺序写能到 30MB/s 以上。市面上那种标着 256GB 但几十块钱的卡大概率是扩容卡写进去的文件读出来全是坏块镜像烧一半写失败就是这么来的。散热。官方那块散热片在 5W 模式下勉强够一旦切到 10W 模式连续跑推理十几分钟就开始降频。加一个 5V 小风扇接到 40 针排针的 5V 和 GND 上成本很低效果立竿见影。其余配件HDMI 线注意 Nano 4GB 是标准 HDMI 口不是 micro HDMI2GB 版只有 HDMI 一个显示输出、一套 USB 键鼠、一根网线比 USB 无线网卡省心很多无线网卡在 L4T 上要自己编驱动、一个 CSI 摄像头或一个 UVC 免驱的 USB 摄像头。2.2 镜像烧录与首次开机镜像从官方的 JetPack 归档页面下载 SD Card ImageNano 4GB 对应的是 JetPack 4.6.x 系列。写卡用 balenaEtcher 或者 RufusRufus 记得选 DD 模式而不是 ISO 模式。这里有一个反复出现的新手错误把下载回来的压缩包解压用文件管理器把里面的文件拖到 SD 卡里。这样卡是启动不了的因为镜像写入是把裸数据按扇区写进卡不是复制文件。必须用专门的写盘工具。写完之后插卡、接 HDMI、接键鼠、上电。首次开机会自动跑一段初始化扩展根分区、生成 SSH 密钥、让你选语言、时区、用户名密码、设置 APP partition 大小。分区那一步直接选默认最大值就行它会占满整张卡。如果你打算无头使用不接显示器只用 SSH有两条路一是先用显示器走完初始化、配好 Wi-Fi 或插网线之后查路由器后台拿 IP 再 SSH二是接 USB-TTL 串口线到板子的 UART 排针通过串口登录改配置。我推荐第一条省事。2.3 第一次开机必做的五件事第一换国内软件源并更新。Ubuntu 18.04 的默认源在国内访问很慢换成国内镜像源之后sudo apt update sudo apt upgrade才跑得动。这一步别偷懒跳过很多后面装包时的诡异报错都是因为索引太旧。第二确认软件栈在位。检查 CUDA 用nvcc -V检查 TensorRT 用python3 -c import tensorrt; print(tensorrt.__version__)检查带 CUDA 的 OpenCV 用python3 -c import cv2; print(cv2.__version__); print(cv2.cuda.getCudaEnabledDeviceCount())。最后这条如果打印出 0 或者直接报错说明你后面用到的 OpenCV 是没有 CUDA 的版本这个坑我们第 3 章细说。第三装 jetson-stats。这是 Jetson 平台的任务管理器装完之后敲jtop能实时看到 CPU 各核占用、GPU 负载、内存、各档频率、功耗、温度。整个开发过程你都会开着它。sudo pip3 install -U jetson-stats sudo systemctl restart jetson_stats.service jtop第四把功耗模式拉满。Nano 4GB 支持两档sudo nvpmodel -m 0是 10W 高性能模式sudo nvpmodel -m 1是 5W 低功耗模式。做性能测试时用前者。第五锁频。sudo jetson_clocks会把 CPU、GPU、EMC 都拉到当前功耗模式允许的最高频避免系统在负载波动时来回调频导致帧率抖动。注意这个命令是临时的重启失效要开机自动执行得写进 systemd 或者 rc.local。3. 把 AI 框架跑起来环境搭建的深水区3.1 JetPack 版本与软件栈的对应关系Jetson 平台最让人头大的就是版本绑定。JetPack 不是一个可以随便升级的软件包它是一整套固件加系统加库的组合牵一发动全身。JetPackL4TUbuntuCUDATensorRTPython适用机型4.6.x32.7.x18.0410.28.23.6Nano 4GB / 2GB、Xavier 系列5.1.x35.x20.0411.48.53.8Xavier、Orin 系列6.x36.x22.0412.x8.6 / 10.x3.10Orin 系列看清楚这张表你就明白为什么 Nano 4GB 永远停在 JetPack 4.6.x——从 JetPack 5 开始官方就不再支持 Maxwell 架构了。这意味着你的 Python 版本被锁死在 3.6很多新版本的库你装不了pip 的版本也不能升太新新版 pip 对 Python 3.6 的支持是有问题的。我的做法是把 pip 固定在 21.3.1 附近pip3 install --upgrade pip21.3.1 setuptools wheel3.2 Python 环境为什么一定要 --system-site-packages这是 Nano 上最经典的坑没有之一。JetPack 预装了两样东西带 CUDA 支持的 OpenCV 4.1.1和 TensorRT 的 Python 绑定。它们都装在系统 Python 的 site-packages 目录里。你如果按 PC 上的习惯敲一句python3 -m venv myenv建虚拟环境这个环境是干净的默认看不到系统的包。结果就是你在虚拟环境里pip install opencv-python装来的是一个不带 CUDA 的通用版本能用但用不了 GPU 加速更糟的是import tensorrt直接报错因为 PyPI 上根本没有这个包的对应版本。正确姿势是建环境的时候带上参数python3 -m venv yolo_env --system-site-packages source yolo_env/bin/activate python3 -c import cv2, tensorrt; print(cv2.__version__, tensorrt.__version__)加上--system-site-packages之后虚拟环境会继承系统的 site-packages所有系统预装的库都能直接 import同时你又可以往里装自己的包而不污染全局。这是 Jetson 平台上唯一推荐的隔离方式。接下来是 PyTorch。不要用pip install torch官方源上根本没有适配 aarch64 JetPack 4.6 的轮子你会装失败或者装成一个纯 CPU 版本。要下载 NVIDIA 论坛提供的预编译轮子注意两个匹配点Python 版本是 cp36以及 JetPack 版本对应 torch 1.10.0 / torchvision 0.11.1 这一档。装完之后立刻验证python3 -c import torch; print(torch.__version__, torch.cuda.is_available())必须打印 True否则后面全是白费力气。还有一个隐藏地雷是 NumPy。新版本 NumPy 会用到 ARM 上不支持的指令集装上之后一 import 就Illegal instruction (core dumped)。在 Nano 上老老实实锁版本pip3 install numpy1.19.43.3 内存与交换空间的调优实操4GB 内存的分配大致是这样系统本身占 800MB 到 1.2GB如果开着图形桌面再吃掉 400MB 左右剩下给推理的不到 2.5GB。跑 YOLOv5s FP16 推理是够的训练就别想了。JetPack 4.6 默认已经启用了 zram 压缩交换free -h能看到大约 2GB 的 swap。zram 是把内存里的一块区域压缩后当交换用速度比 SD 卡上的 swapfile 快得多。如果你的内存实在紧张可以调大 zram 的大小配置文件在/etc/systemd/nvzramconfig里面有一个按内存百分比计算的地方改完重启nvzramconfig服务生效。我不建议在 SD 卡上再挂一个大 swapfile。SD 卡的随机写性能很差而且频繁写入会加速磨损跑起来还会让整机响应变得一顿一顿的。真要腾内存不如把图形界面关掉# 临时关闭桌面 sudo systemctl stop gdm3 # 永久切到多用户命令行模式 sudo systemctl set-default multi-user.target切到命令行模式之后内存能省出三四百兆跑推理时用 jtop 看内存曲线会舒服很多。等要看画面的时候用nvoverlaysink走 GStreamer 直接显示或者干脆把结果推到另一台机器上看。4. 第一个真项目YOLOv5 从训练到 TensorRT 部署4.1 一个最小闭环先跑通再谈优化我强烈建议的第一步不是直接上 YOLOv5而是先跑 NVIDIA 官方的 jetson-inference 项目。这个仓库自带预编译好的模型和 TensorRT 引擎克隆下来编译几分钟就能看到摄像头画面里框出人和物体。git clone --recursive https://github.com/dusty-nv/jetson-inference cd jetson-inference mkdir build cd build cmake ../ make -j4 sudo make install先跑通这个的意义在于你会亲眼看到 TensorRT 在 Nano 上的加速效果建立起这块板子确实能干活的信心同时把摄像头、显示、模型加载这条链路先验证一遍。如果这一步就走不通那问题在系统环境而不是你的模型排查范围一下就缩小了。跑通之后再上 YOLOv5。YOLOv5 的代码组织比它看起来要紧凑核心就三个部分前处理letterbox 缩放加填充、推理、后处理解码加 NMS。真正消耗时间的反而是前后处理——在 Nano 上如果你的前后处理用的是 Python 循环逐像素操作光这一步就能吃掉和推理相当的时间。所以优化顺序永远是先让推理跑在 TensorRT 上再回来用向量化或者 OpenCV 的 GPU 函数优化前后处理。4.2 模型导出与 TensorRT 引擎生成流程是在 PC 上训练好.pt权重拷到 Nano 上先导出 ONNX再用 trtexec 编译成 TensorRT 引擎。导出 ONNX 这一步在 PC 上做也行在 Nano 上做也行但要注意 opset 版本python3 export.py --weights best.pt --include onnx --img 640 --opset 11opset 别设太高。TensorRT 8.2 对 opset 11 和 12 的支持比较成熟设成 13 以上有概率遇到算子不支持的问题。另外注意 YOLOv5 各版本的网络结构有差异早期版本的 Focus 层做的是切片加拼接新版换成了 6x6 卷积导出 ONNX 时的行为不一样用老版本代码配新版本配置很容易出错建议直接用仓库里对应 tag 的代码。拿到 ONNX 之后在 Nano 上编译引擎sudo /usr/src/tensorrt/bin/trtexec \ --onnxbest.onnx \ --saveEnginebest.engine \ --fp16 \ --workspace2048三个参数重点说--fp16必须开。Maxwell 架构的 FP16 吞吐是 FP32 的两倍这一行几乎白送一倍速度精度损失一般在 0.1 到 0.5 mAP 这个量级绝大多数场景无感。--workspace单位是 MB。这个参数决定 TensorRT 在挑选最优 kernel 时能用的临时显存上限。给太小会导致某些层选不到最优实现给太大在 4GB 共享内存上又容易 OOM。1024 到 2048 是比较合适的区间。千万不要随手加--int8。这是我在 Nano 上踩过的一个典型误区。INT8 推理要靠硬件里的 DP4A 点积指令才能真正提速而 Maxwell 架构没有这个指令TensorRT 在 Maxwell 上做 INT8 是软件模拟实测不但不提速还可能因为额外的量化/反量化开销变得更慢。想省时间走 FP16 这条路。编译出来的.engine文件跟 GPU 架构、TensorRT 版本是强绑定的。把在 Nano 上编好的引擎拷到 Orin 上直接 load一定失败升级 JetPack 之后原来的引擎也大概率失效需要重新编译。所以工程上一般把引擎编译写成部署脚本里的一步而不是当成一个静态资源提交到代码库。4.3 摄像头实时推理与实测数据摄像头这块要区分 CSI 和 USB 两条路。CSI 摄像头走的是 NVIDIA 的 Argus 框架在 GStreamer 里用nvarguscamerasrc这个源配合nvvidconv做格式转换数据全程在 NVMMNVIDIA 内存映射里流转不进 CPU 内存效率高。USB 摄像头是标准 UVC 设备走 v4l2。先用命令行验证 CSI 摄像头通不通gst-launch-1.0 nvarguscamerasrc ! \ video/x-raw(memory:NVMM),width1280,height720,framerate30/1 ! \ nvvidconv ! nvoverlaysink能看到实时画面说明链路没问题。Python 里读的时候用 OpenCV 的 GStreamer 后端import cv2 pipeline ( nvarguscamerasrc ! video/x-raw(memory:NVMM),width1280,height720,framerate30/1 ! nvvidconv ! video/x-raw,formatBGRx ! videoconvert ! video/x-raw,formatBGR ! appsink drop1 ) cap cv2.VideoCapture(pipeline, cv2.CAP_GSTREAMER)appsink drop1这个参数很关键它表示缓冲区满了就丢帧而不是阻塞。做实时推理时推理速度跟不上摄像头帧率如果不丢帧队列会越积越长画面延迟越来越大最后看起来像卡死。下面这组数据是我在 Nano 4GB、10W 模式、开了 jetson_clocks、TensorRT FP16 环境下测的大致量级仅供参考你自己测出来的数会随散热、模型版本、后处理实现浮动模型输入尺寸精度单帧推理耗时端到端帧率YOLOv5n640FP16约 28 ms约 30 FPSYOLOv5s640FP16约 55 ms约 17 FPSYOLOv5s416FP16约 28 ms约 30 FPSYOLOv5m640FP16约 140 ms约 7 FPS表里的单帧推理耗时只是 TensorRT 那一部分端到端还要加上 letterbox 前处理和 NMS 后处理大概再多吃 10 到 20 毫秒。所以真实帧率会比1000 除以推理耗时算出来的低一截。从这组数里能读出一个很实用的结论想要 30 FPS 这种实时感你的选择是 YOLOv5n 640或者 YOLOv5s 降到 416。前者靠换模型后者靠砍输入。两种都可以看你的目标物体在画面里有多大——如果目标本身就小降分辨率会让小目标漏检这时候宁可换 n 模型也别降分辨率。顺带一提写前处理和后处理这种样板代码用 AI 编程助手确实能省不少时间尤其是 NMS 的坐标变换和类别过滤逻辑让助手生成一版再自己对着结果调比从头手写快得多。但别全信边界情况零宽度的框、置信度全低的帧一定要自己过一遍。5. 性能调优与故障排查实录5.1 常见问题速查表下面这张表是我自己踩过加上帮别人排查时积累的覆盖了绝大多数新手会撞上的问题。现象大概率原因处理办法开机黑屏、反复重启供电不足用了 micro-USB 或电源功率不够换 5V 4A 桶形电源检查线材烧录后无法启动用文件复制而不是写盘工具或 SD 卡是扩容卡用 Etcher / Rufus DD 模式重写换正品卡import numpy报 Illegal instructionNumPy 版本过新用到不支持的指令集降级到 1.19.4pip install torch失败或装上 CPU 版用了官方 PyPI 源改用 NVIDIA 论坛提供的 aarch64 轮子虚拟环境里 import tensorrt 报错建环境时漏了--system-site-packages删掉重建虚拟环境cv2 没有 CUDA 支持虚拟环境里装上了 PyPI 版 opencv-python卸载它用系统的 OpenCVCSI 摄像头打不开Argus 守护进程异常或 CSI 排线接触不良sudo systemctl restart nvargus-daemon重插排线跑到一半整板重启供电跌落或温度过高触发保护换电源加风扇jtop 观察温度帧率远低于预期忘了 jetson_clocks或功耗模式在 5Wnvpmodel -m 0加jetson_clocks引擎 load 失败engine 与当前 GPU 架构或 TensorRT 版本不符在目标板上重新编译引擎5.2 散热、功耗与长时间运行的注意点做性能测试和做产品部署对散热的要求完全不是一个量级。测试时你顶多跑十分钟产品是 7×24 小时挂着这两种场景下的温度曲线差别很大。先看温度阈值jtop 里的 TJ 是结温一般到 80 度以上 GPU 就开始降频你会看到频率曲线掉下来、帧率跟着掉。所以散热方案的目标是让满载时的结温压在 75 度以下。我的做法是三步换一块比官方散热片更大的铝制散热片加一个 5V 小风扇接 40 针排针的 5V 和 GND如果是装在机箱里保证风道不要把热风闷在板子周围。这些加起来成本不高但能让 10W 模式下的持续性能提升肉眼可见。功耗模式这块10W 模式nvpmodel -m 0和 5W 模式nvpmodel -m 1的实际差距在跑 YOLOv5s 的时候大概能让帧率差出三成。如果项目对功耗有硬性要求比如电池供电的移动设备切 5W 之后要重新测一遍帧率别拿 10W 的数据去做功耗预算。长时间运行还要处理几个工程问题。一是把推理程序写成 systemd 服务崩溃自动重启日志落到文件而不是只打到终端二是别把日志高频写进 SD 卡如果只是调试信息考虑挂一个内存文件系统放日志三是给系统加一个看门狗或者定时重启策略边缘设备长期无人值守内存泄漏这种问题拖几天就会把设备拖死。5.3 模型转换里最容易掉的三个坑第一个坑算子不支持。ONNX 里有些算子 TensorRT 认不出来编译的时候会看到类似 Unsupported operation 的报错。处理办法是先过一遍 onnx-simplifier它会把一些冗余的算子融合掉很多问题就消失了pip3 install onnx-simplifier python3 -m onnxsim best.onnx best_sim.onnx如果简化之后还不支持那就得看具体是哪一层要么改网络结构替换掉这个算子要么让它回落到 CPU 执行会明显拖慢速度。第二个坑精度掉点。FP16 通常掉 0.1 到 0.5 个 mAP这个范围是正常的。但如果你发现掉了好几个点问题往往不在量化本身而是在前后处理没对齐比如训练时的 letterbox 用的是固定灰度填充推理时改成了黑色或者 NMS 的 IoU 阈值跟训练验证时不一致又或者类别顺序映射错了。这类问题最有效的排查方式是拿同一张图分别用 PyTorch 和 TensorRT 跑一遍逐层对比输出看偏差从哪一层开始放大。第三个坑动态 shape。trtexec 默认按固定输入尺寸编译。如果你需要支持多种输入尺寸比如不同分辨率的摄像头要用--minShapes、--optShapes、--maxShapes三个参数声明范围。但要注意动态 shape 在 Nano 这种算力有限的设备上是有性能代价的TensorRT 要为每个可能的尺寸留余量kernel 选择也会更保守。如果实际场景里尺寸是固定的就别用动态 shape老老实实编译成固定尺寸。6. 从玩具到能落地的方向6.1 边缘视觉真正能变现的场景把 Jetson Nano 玩明白之后能做的项目比想象中多。核心逻辑只有一个数据在哪里产生就在哪里算完。产线上的缺陷检测是最典型的场景。摄像头装在工位上方Nano 挂在旁边实时判断零件有没有划痕、缺料、装配错位不合格的直接触发气阀剔除。这种场景用云端推理是不现实的产线节拍一两秒一个网络往返延迟和断网风险都受不了。Nano 跑一个轻量分类网络或者 YOLOv5n几毫秒出结果延迟可控。客流统计和零售分析也是一类。门口一个摄像头Nano 做人体检测加简单跟踪统计进店人数、停留时长、热区分布数据只在本地做聚合只上传统计结果不传原始视频隐私和带宽问题一起解决。农业和养殖方向也很有意思。果园里的虫情监测、鸡舍里的异常行为识别这类场景往往没有稳定的网络和市电Nano 的低功耗特性正好适配。有网络热词在提猫狗识别这类入门比赛其实那就是个很好的练手选题——数据集公开、类别清晰、指标明确用它把训练-导出-部署-测帧率这条链路完整走一遍比看十篇教程有用。这里我想强调一个工程习惯做边缘视觉项目一定要设计数据闭环。Nano 端跑推理的同时把置信度在某个区间内的、或者预测结果和实际不符的样本挑出来存下来定期回传到 PC人工标注后加入训练集重训模型再部署。这个循环跑起来你的模型精度会自己往上走而不是靠一次性调参。6.2 语音、机器人与轻量 Agent 的边界视觉之外Nano 还能做点别的但边界要清楚。语音方向做唤醒词加命令词识别是完全可行的。唤醒用一个轻量的关键词检测库识别用 Vosk 这类离线小型语音识别模型整条链路跑在本地不需要联网。但如果你想跑 Whisper 的中等以上模型Nano 4GB 就比较吃力了实时率会掉到 1 以下也就是处理一秒钟音频要花一秒钟以上做不了实时交互。机器人方向是 Nano 的传统强项。ROS 或 ROS2 里把 Nano 当作视觉感知节点负责跑目标检测、位姿估计把结果通过话题发给主控。40 针 GPIO、CSI 接口、低功耗这几样加在一起让它可以塞进小型移动平台。做这类项目时注意一点机器人上的振动和散热条件比桌面差得多SD 卡和排线是最容易出问题的两个地方可以考虑把系统跑在更可靠的存储上。大模型和 Agent 这块我建议把预期放现实一点。Nano 4GB 跑本地大模型是不现实的内存和算力都不够。Orin Nano 8GB 可以跑 3B 参数量级的量化模型但生成速度基本就是个位数 token 每秒做演示和原型验证可以做实际产品很勉强。比较务实的架构是边缘设备负责感知和决策的快速部分视觉检测、关键词触发需要语言理解的部分交给服务器或者更强的设备两边通过消息队列通信。别为了全本地这个执念把整个系统拖垮。如果你在关注具身智能这类方向会发现它们对数据质量的要求极高——同一批数据里如果标注标准不统一、光照和视角分布偏斜模型在真机上的表现会崩得很难看。Nano 在这类系统里扮演的通常是数据采集终端和低成本验证平台的角色用它先把数据流水线跑通等验证完再上更强的硬件这个路径很省钱。6.3 学习路径从 Nano 到 Orin 的阶梯最后聊聊学习路径这也是很多人问得最多的问题。第一阶段把 Linux 和 Python 的基础打牢。会用命令行、会看日志、会写简单的 Python 脚本、知道怎么用 pip 和 apt 装东西。这个阶段不用碰 AI但它是后面所有事情的地基跳过它你会在每个报错面前卡住。第二阶段跑通官方 demo。jetson-inference 跑图像分类、目标检测、语义分割三个 demo理解输入是什么、输出是什么、中间经过了哪些处理。这个阶段的目标是建立直觉。第三阶段理解推理链路。拿 YOLOv5 为例把前处理、推理、后处理三段拆开每一段单独计时找出瓶颈。学会用 TensorRT 编译引擎理解 FP16 和 INT8 的区别理解为什么引擎不能跨设备复用。第四阶段自己训一个模型并部署。在 PC 上训在 Nano 上部署中间走一遍 ONNX 转换和引擎编译遇到精度掉点就逐层对比。这一遍走完边缘部署这件事你就真的会了。第五阶段工程化。把程序写成服务、加日志、加异常恢复、加远程更新考虑设备长期无人值守的各种情况。关于证书人工智能训练师这类职业技能等级认证可以作为学习目标之一它的考纲确实覆盖了数据标注、模型训练、部署这些环节对建立知识框架有帮助。但别把拿证当成终点面试或者项目评审时一段我在 Nano 上把 YOLOv5s 的端到端帧率从 8 FPS 优化到 17 FPS具体做了输入尺寸调整、FP16 编译和前后处理向量化的描述比一张证书有说服力得多。我在实际项目里最大的体会是Jetson 这类边缘设备的价值不在于它能跑多大的模型而在于它能让你被迫把每一个环节都想清楚。你在 PC 上跑推理数据加载慢一点、前后处理低效一点都感觉不到到了 Nano 上这些开销全都会以帧率的形式还给你。这种被逼着优化的过程其实是入门人工智能工程最好的一段训练。等你从 Nano 换到 Orin同样的代码和思路搬过去帧率直接翻几倍那种感觉挺爽的。
上一篇/下一篇内容由系统自动关联
返回资讯列表 →