Jetson Orin Nano 新手避坑:从零部署YoloV5,我踩过的那些环境配置的坑
Jetson Orin Nano 实战避坑指南:YOLOv5部署全流程解析
第一次拿到Jetson Orin Nano开发板时,我天真地以为按照官方文档就能轻松完成YOLOv5的部署。然而现实给了我当头一棒——从系统烧录到环境配置,几乎每一步都暗藏玄机。本文将分享我在这个过程中踩过的坑和总结的解决方案,希望能帮助后来者少走弯路。
1. 系统烧录:那些官方文档没告诉你的细节
Jetson Orin Nano与传统开发板最大的不同在于其采用了NVMe固态硬盘而非SD卡存储方案。这意味着常规的SD卡烧录方式不再适用。
关键准备工具:
- 一台运行Ubuntu 18.04的主机(实测20.04及以上版本会出现兼容性问题)
- 至少50GB可用磁盘空间
- USB Type-C数据线(建议使用原厂配件)
烧录过程中最易出错的环节是USB设备识别。当执行以下命令时:
sudo ./tools/kernel_flash/l4t_initrd_flash.sh --external-device nvme0n1p1 \ -c tools/kernel_flash/flash_l4t_external.xml -p "-c bootloader/t186ref/cfg/flash_t234_qspi.xml" \ --showlogs --network usb0 jetson-orin-nano-devkit internal常见问题排查表:
| 现象 | 可能原因 | 解决方案 |
|---|---|---|
| 找不到APX设备 | 虚拟机USB控制器配置错误 | 在VMware设置中将USB兼容性改为3.0 |
| 烧录中途卡住 | 主机USB端口供电不足 | 更换到主板原生USB接口 |
| 出现"Permission denied" | udev规则未配置 | 执行sudo usermod -aG plugdev $USER |
重要提示:烧录过程中会先后出现两次设备连接提示,必须及时在虚拟机界面选择"连接到虚拟机",否则会导致烧录失败。
2. CUDA环境配置:版本匹配的玄学
JetPack 5.1.1默认安装的是CUDA 11.4,但PyTorch的版本兼容性却是个大坑。经过多次测试,我总结出以下稳定组合:
推荐软件栈:
- CUDA 11.4
- cuDNN 8.6.0
- TensorRT 8.5.2
- PyTorch 1.14.0
- Torchvision 0.15.1
配置环境变量时,务必检查~/.bashrc中的路径是否正确:
export CUDA_HOME=/usr/local/cuda-11.4 export LD_LIBRARY_PATH=/usr/local/cuda-11.4/lib64:$LD_LIBRARY_PATH export PATH=/usr/local/cuda-11.4/bin:$PATH验证安装时,如果nvcc -V显示正确但PyTorch无法调用CUDA,很可能是gcc版本冲突。解决方法:
sudo apt install gcc-8 g++-8 sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-8 8 sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-8 83. PyTorch与Torchvision的定制安装
官方提供的PyTorch wheel包往往不是最优解。我推荐从源码构建:
# 安装编译依赖 sudo apt-get -y install autoconf bc build-essential libopenblas-dev libblas-dev libjpeg-dev zlib1g-dev # 下载特定版本 wget https://nvidia.box.com/shared/static/ssf2v7pf5i245fk4i0q926hy4imzs2ph.whl -O torch-1.14.0-cp38-cp38-linux_aarch64.whl pip3 install torch-1.14.0-cp38-cp38-linux_aarch64.whl # Torchvision编译安装 git clone -b v0.15.1 https://github.com/pytorch/vision.git cd vision python3 setup.py install --user验证安装时,如果遇到GLIBCXX_3.4.29找不到的错误,需要手动升级libstdc++6:
sudo add-apt-repository ppa:ubuntu-toolchain-r/test sudo apt-get update sudo apt-get install libstdc++64. OpenCV与GStreamer的恩怨情仇
CSI摄像头必须通过GStreamer管道才能正常工作,但pip安装的opencv-python默认不包含GStreamer支持。解决方案是手动编译:
关键编译选项:
cmake -D WITH_GSTREAMER=ON \ -D WITH_CUDA=ON \ -D CUDA_ARCH_BIN=8.7 \ -D CUDA_ARCH_PTX=8.7 \ -D OPENCV_ENABLE_NONFREE=ON \ -D BUILD_opencv_python3=ON \ ..编译过程中常见内存不足问题,可以通过创建交换分区解决:
sudo fallocate -l 8G /swapfile sudo chmod 600 /swapfile sudo mkswap /swapfile sudo swapon /swapfile经验之谈:编译完成后务必检查
cv2.getBuildInformation()的输出,确认GStreamer显示为YES。如果还是NO,很可能是缺少gstreamer1.0-plugins-base开发包。
5. YOLOv5与DeepStream的集成之道
单纯使用原生YOLOv5无法直接调用CSI摄像头,需要通过DeepStream桥接。推荐使用marcoslucianops的DeepStream-Yolo项目:
git clone https://github.com/marcoslucianops/DeepStream-Yolo.git cd DeepStream-Yolo/utils python3 gen_wts_yoloV5.py -w yolov5n.pt配置文件关键参数:
[primary-gie] enable=1 custom-network-config=yolov5n.cfg model-file=yolov5n.wts batch-size=1当遇到模型加载失败时,检查以下几点:
- 确保.wts文件路径正确
- 检查TensorRT版本是否匹配
- 验证CUDA计算能力设置(Orin Nano是8.7)
6. 性能优化:榨干Orin Nano的每一分算力
显存配置: 修改/etc/systemd/nvzramconfig.sh,将:
mem=$((("${totalmem}"/2/"${NRDEVICES}")*1024))改为:
mem=$((("${totalmem}"*2/"${NRDEVICES}")*1024))电源管理模式:
sudo nvpmodel -m 0 # 最大性能模式 sudo jetson_clocks # 解锁所有CPU核心实测性能对比:
| 模型 | 原始FPS | 优化后FPS | 提升幅度 |
|---|---|---|---|
| YOLOv5n | 28 | 42 | 50% |
| YOLOv5s | 15 | 24 | 60% |
7. 摄像头配置的隐藏关卡
CSI摄像头的分辨率设置是个暗坑。通过v4l2-utils检查可用分辨率:
v4l2-ctl --list-formats-ext --device=0推荐配置:
[source0] type=5 # CSI camera-width=1280 camera-height=720 camera-fps-n=30 camera-csi-sensor-id=0当图像出现绿色条纹时,通常是像素格式不匹配导致的,需要在DeepStream配置文件中添加:
video/x-raw, format=NV12部署过程中最耗时的往往是环境配置环节。建议在完成基础环境搭建后立即创建系统镜像备份:
sudo apt install clonezilla sudo systemback-sustart经过三天的不懈努力,当YOLOv5终于在我的Jetson Orin Nano上流畅运行,并准确识别出摄像头前的物体时,那种成就感难以言表。记住,每个错误提示都是通往成功的路标,耐心排查终会柳暗花明。
