在边缘计算和嵌入式AI领域,NVIDIA Jetson Orin Nano以其强大的AI算力和相对友好的价格受到了广泛关注。本文将详细介绍如何在Jetson Orin Nano上搭建YOLOv11物体识别环境,并分享实际部署过程中遇到的问题及解决方案。
📋 环境概述
本教程适用于以下环境:
- 硬件平台: Jetson Orin Nano 8GB
- 系统版本: JetPack 6.0 / JetPack 5.x
- 深度学习框架: PyTorch + ONNX Runtime
- 目标模型: YOLOv11
🔧 基础环境准备
1. 远程连接工具安装
为了方便开发调试,首先安装NoMachine远程桌面工具:
1 2 3 4 5
| sudo dpkg -i nomachine_8.16.1_1_arm64.deb
sudo apt-get install -f
|
2. 系统性能优化配置
Jetson设备默认运行在节能模式,为了获得最佳性能,需要开启最大功率模式:
1 2 3 4 5 6 7 8 9 10 11
| sudo nvpmodel -m 0
sudo jetson_clocks
sudo pip install jetson-stats
jtop
|
💡 小贴士: jtop
工具可以实时监控GPU、CPU使用率、温度和功耗,是调试性能问题的利器。
🔥 JetPack 6.0 环境配置(推荐)
JetPack 6.0是最新版本,对YOLOv11的支持更加完善。
1. 深度学习框架安装
1 2 3 4 5 6 7 8 9 10 11
| pip install https://github.com/ultralytics/assets/releases/download/v0.0.0/torch-2.5.0a0+872d972e41.nv24.08-cp310-cp310-linux_aarch64.whl
pip install https://github.com/ultralytics/assets/releases/download/v0.0.0/torchvision-0.20.0a0+afc54f7-cp310-cp310-linux_aarch64.whl
pip install https://github.com/ultralytics/assets/releases/download/v0.0.0/onnxruntime_gpu-1.20.0-cp310-cp310-linux_aarch64.whl
pip install ultralytics[export]
|
2. OpenCV CUDA版本安装
OpenCV的CUDA支持对于视频处理性能至关重要:
1 2
| bash install_opencv_for_jetson.sh
|
3. Anaconda环境配置
建议使用Anaconda管理Python环境,避免依赖冲突:
1 2 3 4 5 6 7 8 9 10 11 12
| wget https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/Anaconda3-2024.10-1-Linux-aarch64.sh
bash Anaconda3-2024.10-1-Linux-aarch64.sh
conda init
conda create -n yolo11 python=3.10 conda activate yolo11
|
4. 环境变量配置
编辑系统环境变量,确保CUDA和相关库能够正确加载:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| vim ~/.bashrc
export PATH=$PATH:/home/nvidia/anaconda3/bin export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda/lib64 export PATH=$PATH:/usr/local/cuda/bin export CUDA_HOME=/usr/local/cuda export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH export PYTHONPATH=/usr/local/lib/python3.8/site-packages/:$PYTHONPATH export LD_LIBRARY_PATH=/home/nvidia/monitor/lib:$LD_LIBRARY_PATH export DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus
source ~/.bashrc
|
🔧 JetPack 5.x 环境配置(兼容旧版本)
如果你使用的是JetPack 5.x版本,可以参考以下配置流程:
1. 系统优化和Swap分区
由于内存限制,建议创建Swap分区来避免编译时内存不足:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| sudo mkdir -p /var/cache/swap/
sudo dd if=/dev/zero of=/var/cache/swap/swap0 bs=64M count=64
sudo chmod 0600 /var/cache/swap/swap0
sudo mkswap /var/cache/swap/swap0
sudo swapon /var/cache/swap/swap0
sudo swapon -s
|
2. 包管理器配置
配置国内镜像源,加快下载速度:
1 2 3 4 5
| pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple package_name
|
3. OpenCV安装(重要)
1 2
| bash install_opencv_for_jetson.sh
|
4. cuDNN配置
JetPack 5.x需要手动配置cuDNN动态链接库:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| sudo apt-get install libfreeimage3 libfreeimage-dev
cd /usr/include && sudo cp cudnn* /usr/local/cuda/include
cd /usr/lib/aarch64-linux-gnu && sudo cp libcudnn* /usr/local/cuda/lib64
sudo chmod 777 /usr/local/cuda/include/cudnn.h sudo chmod 777 /usr/local/cuda/lib64/libcudnn*
cd /usr/local/cuda/lib64 sudo ln -sf libcudnn.so.8.6.0 libcudnn.so.8 sudo ln -sf libcudnn_ops_train.so.8.6.0 libcudnn_ops_train.so.8 sudo ln -sf libcudnn_ops_infer.so.8.6.0 libcudnn_ops_infer.so.8 sudo ln -sf libcudnn_adv_train.so.8.6.0 libcudnn_adv_train.so.8 sudo ln -sf libcudnn_adv_infer.so.8.6.0 libcudnn_adv_infer.so.8 sudo ln -sf libcudnn_cnn_train.so.8.6.0 libcudnn_cnn_train.so.8 sudo ln -sf libcudnn_cnn_infer.so.8.6.0 libcudnn_cnn_infer.so.8
sudo ldconfig
|
5. cuDNN测试
验证cuDNN安装是否成功:
1 2 3 4 5 6 7 8 9 10
| sudo cp -r /usr/src/cudnn_samples_v8/ ~/ cd ~/cudnn_samples_v8/mnistCUDNN
sudo chmod 777 ~/cudnn_samples_v8 sudo make clean && sudo make
./mnistCUDNN
|
6. Anaconda和PyTorch环境
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| bash Anaconda3-2024.10-1-Linux-aarch64.sh conda init
conda create -n yolo11 python=3.8 conda activate yolo11
sudo apt-get install libjpeg-dev zlib1g-dev libpython3-dev libopenblas-dev \ libavcodec-dev libavformat-dev libswscale-dev
pip install torch-2.1.0a0+41361538.nv23.06-cp38-cp38-linux_aarch64.whl
git clone --branch v0.16.1 https://github.com/pytorch/vision torchvision cd torchvision export BUILD_VERSION=0.16.1 python3 setup.py install --user cd ../
pip install numpy requests 'pillow<7'
|
7. ONNX Runtime GPU版本
1 2 3 4 5
| pip install onnxruntime_gpu-1.18.0-cp38-cp38-linux_aarch64.whl
pip install pyside6 opencv-python
|
🛠️ 常见问题解决方案
1. CUDA_HOME环境变量问题
1 2 3 4 5 6 7 8
| vi ~/.bashrc
export CUDA_HOME=/usr/local/cuda
source ~/.bashrc
|
2. 动态链接库冲突问题
libffi.so版本冲突
1 2 3 4 5 6 7
| cd /home/nvidia/anaconda3/envs/yolo11/lib cp libffi.so.7 libffi_bak.so.7
sudo ln -sf /usr/lib/aarch64-linux-gnu/libffi.so.7.1.0 libffi.so.7 sudo ldconfig
|
libstdc++版本冲突
1 2 3 4 5 6 7 8 9 10
| strings /usr/lib/aarch64-linux-gnu/libstdc++.so.6 | grep GLIBCXX
sudo cp /home/nvidia/anaconda3/envs/yolo11/lib/libstdc++.so.6.0.29 /usr/lib/aarch64-linux-gnu/ sudo rm /usr/lib/aarch64-linux-gnu/libstdc++.so.6 sudo ln -s /usr/lib/aarch64-linux-gnu/libstdc++.so.6.0.29 /usr/lib/aarch64-linux-gnu/libstdc++.so.6
ll /usr/lib/aarch64-linux-gnu/libstd*
|
3. 脚本格式问题
1 2
| sed -i 's/\r$//' script_name.sh
|
🚀 验证安装结果
完成所有安装后,可以通过以下Python代码验证环境:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| import torch import torchvision import cv2 import onnxruntime as ort from ultralytics import YOLO
print(f"PyTorch版本: {torch.__version__}") print(f"CUDA可用: {torch.cuda.is_available()}") print(f"CUDA设备数量: {torch.cuda.device_count()}") print(f"当前CUDA设备: {torch.cuda.current_device()}")
print(f"OpenCV版本: {cv2.__version__}") print(f"OpenCV CUDA支持: {cv2.cuda.getCudaEnabledDeviceCount() > 0}")
providers = ort.get_available_providers() print(f"ONNX Runtime可用提供商: {providers}") print(f"支持CUDA: {'CUDAExecutionProvider' in providers}")
model = YOLO('yolo11n.pt') print("YOLOv11模型加载成功!")
|
📊 性能优化建议
- 模型量化: 使用INT8量化可以显著提升推理速度
- TensorRT优化: 将模型转换为TensorRT格式获得最佳性能
- 批处理: 合理设置batch size,平衡延迟和吞吐量
- 内存管理: 及时释放不用的模型和数据,避免OOM
🎯 总结
本文详细介绍了在Jetson Orin Nano上部署YOLOv11的完整流程,涵盖了JetPack 6.0和5.x两个版本的配置方法。通过本教程,你应该能够:
- ✅ 正确配置Jetson开发环境
- ✅ 安装适配的深度学习框架
- ✅ 解决常见的依赖和链接问题
- ✅ 验证环境配置的正确性
在实际部署过程中,建议根据具体的应用场景选择合适的模型大小和优化策略。