Jetson Nano上YOLOv5实时检测避坑指南:从CUDA配置到TensorRT加速,保姆级排错
2026/6/8 21:02:03 网站建设 项目流程

Jetson Nano上YOLOv5实时检测避坑指南:从CUDA配置到TensorRT加速

当你在Jetson Nano上部署YOLOv5时,可能会遇到各种意想不到的问题。本文将带你避开这些"坑",从CUDA配置到TensorRT加速,一步步实现高效的实时目标检测。

1. 环境准备:避开基础配置的陷阱

Jetson Nano虽然小巧,但其NVIDIA Maxwell架构GPU和四核ARM Cortex-A57处理器使其成为边缘计算的理想选择。但在开始前,有几个关键点需要注意:

  • JetPack版本选择:推荐使用JetPack 4.6.1,它包含了CUDA 10.2、cuDNN 8.2和TensorRT 8.0,这些都是YOLOv5运行的基础。安装时确保选择"完整安装"选项。

  • 系统优化:默认配置下,Jetson Nano的交换空间(swap)只有2GB,这对于YOLOv5来说远远不够。通过以下命令可以扩展交换空间:

sudo sed -i 's/mem = $(("${totalmem}"/2/"${NRDEVICES}")*1024)/mem = $(("${totalmem}"*2/"${NRDEVICES}")*1024)/g' /etc/systemd/nvzramconfig.sh sudo reboot

注意:修改后需要重启才能生效,使用free -h命令验证交换空间是否已增加到约7.7GB。

  • 电源模式设置:Jetson Nano有两种电源模式:

    模式最大CPU频率GPU频率功耗
    5W1.2GHz640MHz5W
    10W1.9GHz921MHz10W

    对于YOLOv5实时检测,建议使用10W模式以获得更好性能:

sudo nvpmodel -m 0 sudo jetson_clocks

2. CUDA和PyTorch安装:解决兼容性问题

2.1 CUDA环境配置

虽然JetPack已经安装了CUDA,但环境变量需要正确设置。编辑~/.bashrc文件:

export CUDA_HOME=/usr/local/cuda-10.2 export LD_LIBRARY_PATH=/usr/local/cuda-10.2/lib64:$LD_LIBRARY_PATH export PATH=/usr/local/cuda-10.2/bin:$PATH

保存后执行source ~/.bashrc使配置生效。验证安装:

nvcc --version

常见问题:

  • nvcc命令未找到:通常是因为环境变量未正确设置,检查CUDA_HOME路径是否正确。
  • 版本不匹配:确保CUDA版本与PyTorch版本兼容。

2.2 PyTorch安装避坑指南

Jetson Nano需要安装ARM架构的PyTorch版本。以下是常见问题及解决方案:

  1. 下载正确的whl文件

    • 官方推荐:torch-1.8.0-cp36-cp36m-linux_aarch64.whl
    • 下载地址:NVIDIA官方提供的链接(注意需要科学上网)
  2. 依赖安装

    sudo apt-get update sudo apt-get install python3-pip libopenblas-base libopenmpi-dev
  3. 换源加速: 创建~/.pip/pip.conf文件,内容如下(推荐使用阿里源):

    [global] index-url=http://mirrors.aliyun.com/pypi/simple/ [install] trusted-host=mirrors.aliyun.com
  4. 安装PyTorch

    pip3 install numpy torch-1.8.0-cp36-cp36m-linux_aarch64.whl
  5. 验证安装

    import torch print(torch.__version__) # 应输出1.8.0 print(torch.cuda.is_available()) # 应输出True

常见错误:"Illegal instruction (core dumped)"通常是由于ARM架构不兼容导致,确保下载的是aarch64版本。

3. YOLOv5环境搭建:从源码到推理

3.1 克隆和安装YOLOv5

git clone https://github.com/ultralytics/yolov5 cd yolov5 pip3 install -r requirements.txt

常见问题及解决方案:

  1. matplotlib安装失败

    • 单独下载对应的whl文件安装
    • 或者使用sudo apt-get install python3-matplotlib
  2. OpenCV相关问题

    • 如果遇到"ImportError: libGL.so.1"错误,执行:
      sudo apt-get install libgl1-mesa-glx
  3. 测试YOLOv5

    python3 detect.py --weights yolov5n.pt --img 640 --source 0 # 摄像头测试

3.2 模型选择与优化

YOLOv5提供了多种预训练模型,在Jetson Nano上推荐使用:

模型参数量推理速度(FPS)准确率(mAP)
YOLOv5n1.9M~2528.0
YOLOv5s7.2M~1537.4
YOLOv5m21.2M~845.4

对于实时检测,YOLOv5n是最佳选择。可以通过以下方式进一步优化:

  1. 减小输入尺寸:将默认的640x640降低到320x320
  2. 使用半精度(FP16):减少内存占用并提高速度
  3. 批处理大小设为1:适应Jetson Nano的内存限制

4. TensorRT加速:实现25+FPS的关键

4.1 TensorRT基本流程

  1. 下载tensorrtx

    git clone https://github.com/wang-xinyu/tensorrtx.git
  2. 生成.wts文件

    cp tensorrtx/yolov5/gen_wts.py yolov5/ cd yolov5 python3 gen_wts.py -w yolov5n.pt -o yolov5n.wts
  3. 编译和转换

    cd ~/tensorrtx/yolov5 mkdir build cd build cmake .. make sudo ./yolov5 -s yolov5n.wts yolov5n.engine n

4.2 常见编译错误解决

  1. CMake错误

    • 确保安装了所有依赖:
      sudo apt-get install build-essential cmake
  2. CUDA相关错误

    • 检查CUDA路径是否正确
    • 确保环境变量已设置
  3. 内存不足

    • 增加交换空间(如第一部分所述)
    • 关闭不必要的程序释放内存

4.3 摄像头实时检测实现

修改yolov5.cpp以支持USB摄像头:

cv::VideoCapture capture(0); // 参数0表示使用第一个摄像头 if (!capture.isOpened()) { std::cout << "无法打开摄像头" << std::endl; return -1; }

编译并运行:

make -j4 # 使用4个核心编译 sudo ./yolov5 -d yolov5n.engine ../samples/ # 测试图片 sudo ./yolov5 -v yolov5n.engine # 使用摄像头

4.4 性能优化技巧

  1. FP16模式: 在yolov5.cpp中取消注释#define USE_FP16以启用半精度推理。

  2. 置信度阈值调整: 修改CONF_THRESH值(默认0.25)以平衡准确率和速度。

  3. NMS阈值调整: 修改NMS_THRESH值(默认0.4)以控制重叠检测框的合并程度。

  4. 显示优化: 添加FPS计数器:

    auto start = std::chrono::system_clock::now(); // 推理代码 auto end = std::chrono::system_clock::now(); int fps = 1000.0 / std::chrono::duration_cast<std::chrono::milliseconds>(end - start).count();

通过这些优化,在Jetson Nano上可以实现25+FPS的YOLOv5实时目标检测,满足大多数边缘计算场景的需求。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询