Jetson Nano 部署 YOLOv5 实战:从环境搭建到避坑指南

Jetson Nano 部署 YOLOv5 实战:从环境搭建到避坑指南 1. Jetson Nano与YOLOv5的奇妙组合第一次拿到Jetson Nano这个小家伙时我完全被它的性能震惊了——巴掌大的开发板居然能跑深度学习模型而YOLOv5作为目标检测领域的当红炸子鸡速度快、精度高特别适合在边缘设备上部署。不过要把这两个家伙撮合到一起可不是插上电就能搞定的事。我选择JetPack 4.5作为基础系统主要是看中它对CUDA 10.2的完美支持。这里有个小建议拿到新设备先别急着折腾建议先执行sudo apt update sudo apt upgrade把系统更新到最新状态。很多人遇到的奇怪问题其实都是因为系统组件版本不匹配导致的。YOLOv5官方推荐使用PyTorch 1.7版本但经过实测在Jetson Nano上1.8.0版本表现最稳定。这里有个坑要注意千万别直接用pip安装官方源的PyTorchJetson系列用的是ARM架构必须使用NVIDIA专门编译的版本。我第一次尝试时直接pip install torch结果不仅安装失败还把环境搞得一团糟。2. 环境搭建全流程详解2.1 系统基础配置首先确保你的JetPack 4.5已经正确安装。可以通过nvidia-smi命令检查CUDA是否可用。如果看到类似下面的输出说明基础环境OK----------------------------------------------------------------------------- | NVIDIA-SMI 455.23.05 Driver Version: 455.23.05 CUDA Version: 10.2 | |---------------------------------------------------------------------------接下来安装一些基础依赖sudo apt-get install libjpeg-dev zlib1g-dev libpython3-dev libavcodec-dev libavformat-dev libswscale-dev特别提醒Jetson Nano的存储空间有限建议使用--no-install-recommends参数避免安装不必要的软件包。我曾经因为没加这个参数导致系统空间被占满最后只能重装系统。2.2 PyTorch特殊安装PyTorch的安装是整个过程中最关键的环节。NVIDIA开发者论坛提供了预编译的wheel包直接下载安装即可wget https://nvidia.box.com/shared/static/p57jwntv436lfrd78inwl7iml6p13fzh.whl -O torch-1.8.0-cp36-cp36m-linux_aarch64.whl pip3 install numpy torch-1.8.0-cp36-cp36m-linux_aarch64.whl如果下载速度慢可以尝试用axel多线程下载sudo apt install axel axel -n 10 https://nvidia.box.com/shared/static/p57jwntv436lfrd78inwl7iml6p13fzh.whl安装完成后测试时可能会遇到非法指令核心已转储错误。这是ARM架构的特殊问题解决方法很简单export OPENBLAS_CORETYPEARMV8 python3 -c import torch; print(torch.__version__)2.3 Torchvision编译指南Torchvision需要从源码编译安装。首先确认版本匹配关系PyTorch 1.8.0 → Torchvision 0.9.0编译命令如下git clone --branch v0.9.0 https://github.com/pytorch/vision torchvision cd torchvision export BUILD_VERSION0.9.0 python3 setup.py install --user编译过程中最常见的错误是找不到CUDA头文件。解决方法是在~/.bashrc中添加export PATH/usr/local/cuda/bin:$PATH export LD_LIBRARY_PATH/usr/local/cuda/lib64:$LD_LIBRARY_PATH export CUDA_ROOT/usr/local/cuda保存后执行source ~/.bashrc使配置生效。如果还是报错可以尝试更精确的路径export PATH$PATH:/usr/local/cuda-10.2/bin export LD_LIBRARY_PATH$LD_LIBRARY_PATH:/usr/local/cuda-10.2/lib643. YOLOv5部署实战3.1 项目克隆与依赖安装建议使用国内镜像源加速克隆git clone https://gitee.com/mirrors/yolov5.git cd yolov5安装基础依赖时可以先跳过PyTorch相关项pip3 install -r requirements.txt --ignore-installed遇到matplotlib安装问题时可以直接安装系统版本sudo apt-get install python3-matplotlib3.2 模型测试与优化下载预训练权重wget https://github.com/ultralytics/yolov5/releases/download/v5.0/yolov5s.pt测试图片检测python detect.py --source data/images/ --weights yolov5s.pt为了提高在Jetson Nano上的运行效率可以添加以下参数python detect.py --source 0 --weights yolov5s.pt --img 320 --conf 0.5 --device 0其中--img 320将输入图像调整为320x320分辨率能显著提升帧率。4. 常见报错与解决方案4.1 CUDA相关错误错误现象fatal error: cuda.h: No such file or directory解决方法确认CUDA路径是否正确检查环境变量配置尝试重新安装CUDA工具包sudo apt-get install cuda-toolkit-10-24.2 内存不足问题Jetson Nano只有4GB内存运行YOLOv5时容易爆内存。解决方法启用swap空间sudo fallocate -l 4G /swapfile sudo chmod 600 /swapfile sudo mkswap /swapfile sudo swapon /swapfile在运行脚本前清理内存sudo sync sudo sysctl -w vm.drop_caches34.3 视频流处理异常使用USB摄像头时可能会遇到Unable to stop the stream: Invalid argument错误。解决方法降低视频分辨率python detect.py --source 0 --img 320 --weights yolov5s.pt使用v4l2控制v4l2-ctl --list-devices v4l2-ctl --set-fmt-videowidth640,height480,pixelformatYUYV经过这些优化我的Jetson Nano现在能稳定运行YOLOv5s模型处理320x320分辨率的视频流能达到8-10FPS。虽然比不上桌面级GPU但对于嵌入式设备来说已经相当不错了。