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 deniedudev规则未配置执行sudo usermod -aG plugdev $USER重要提示烧录过程中会先后出现两次设备连接提示必须及时在虚拟机界面选择连接到虚拟机否则会导致烧录失败。2. CUDA环境配置版本匹配的玄学JetPack 5.1.1默认安装的是CUDA 11.4但PyTorch的版本兼容性却是个大坑。经过多次测试我总结出以下稳定组合推荐软件栈CUDA 11.4cuDNN 8.6.0TensorRT 8.5.2PyTorch 1.14.0Torchvision 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找不到的错误需要手动升级libstdc6sudo add-apt-repository ppa:ubuntu-toolchain-r/test sudo apt-get update sudo apt-get install libstdc64. OpenCV与GStreamer的恩怨情仇CSI摄像头必须通过GStreamer管道才能正常工作但pip安装的opencv-python默认不包含GStreamer支持。解决方案是手动编译关键编译选项cmake -D WITH_GSTREAMERON \ -D WITH_CUDAON \ -D CUDA_ARCH_BIN8.7 \ -D CUDA_ARCH_PTX8.7 \ -D OPENCV_ENABLE_NONFREEON \ -D BUILD_opencv_python3ON \ ..编译过程中常见内存不足问题可以通过创建交换分区解决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] enable1 custom-network-configyolov5n.cfg model-fileyolov5n.wts batch-size1当遇到模型加载失败时检查以下几点确保.wts文件路径正确检查TensorRT版本是否匹配验证CUDA计算能力设置Orin Nano是8.76. 性能优化榨干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提升幅度YOLOv5n284250%YOLOv5s152460%7. 摄像头配置的隐藏关卡CSI摄像头的分辨率设置是个暗坑。通过v4l2-utils检查可用分辨率v4l2-ctl --list-formats-ext --device0推荐配置[source0] type5 # CSI camera-width1280 camera-height720 camera-fps-n30 camera-csi-sensor-id0当图像出现绿色条纹时通常是像素格式不匹配导致的需要在DeepStream配置文件中添加video/x-raw, formatNV12部署过程中最耗时的往往是环境配置环节。建议在完成基础环境搭建后立即创建系统镜像备份sudo apt install clonezilla sudo systemback-sustart经过三天的不懈努力当YOLOv5终于在我的Jetson Orin Nano上流畅运行并准确识别出摄像头前的物体时那种成就感难以言表。记住每个错误提示都是通往成功的路标耐心排查终会柳暗花明。