1. Jetson Orin Nano环境准备与基础配置
Jetson Orin Nano作为NVIDIA推出的边缘计算设备,其ARM架构和CUDA核心为计算机视觉任务提供了强大的硬件支持。在开始安装OpenCV和YOLOv8之前,我们需要先完成系统的基础配置。
1.1 系统更新与依赖安装
首先通过SSH或直接连接显示器登录系统后,建议执行以下操作:
bash复制sudo apt update
sudo apt full-upgrade -y
sudo apt install -y build-essential cmake git unzip pkg-config
sudo apt install -y libjpeg-dev libpng-dev libtiff-dev
sudo apt install -y libavcodec-dev libavformat-dev libswscale-dev
sudo apt install -y libgtk-3-dev libcanberra-gtk3-dev
sudo apt install -y python3-dev python3-pip python3-numpy
重要提示:Jetson Orin Nano默认使用JetPack系统,其中已包含CUDA和cuDNN,但版本可能与最新OpenCV或YOLOv8的要求存在差异。建议先通过
nvcc --version和cat /usr/include/cudnn_version.h | grep CUDNN_MAJOR -A 2确认当前版本。
1.2 交换空间配置
由于编译OpenCV需要大量内存,而Jetson Orin Nano的物理内存可能不足,建议设置交换空间:
bash复制sudo fallocate -l 8G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
echo '/swapfile swap swap defaults 0 0' | sudo tee -a /etc/fstab
2. OpenCV在Jetson Orin Nano上的编译安装
2.1 源码下载与配置
推荐使用OpenCV 4.5.0及以上版本以获得更好的ARM架构支持:
bash复制wget -O opencv.zip https://github.com/opencv/opencv/archive/4.8.0.zip
wget -O opencv_contrib.zip https://github.com/opencv/opencv_contrib/archive/4.8.0.zip
unzip opencv.zip
unzip opencv_contrib.zip
创建编译目录并配置CMake:
bash复制cd opencv-4.8.0
mkdir build && cd build
cmake -D CMAKE_BUILD_TYPE=RELEASE \
-D CMAKE_INSTALL_PREFIX=/usr/local \
-D OPENCV_EXTRA_MODULES_PATH=../../opencv_contrib-4.8.0/modules \
-D WITH_CUDA=ON \
-D CUDA_ARCH_BIN=8.7 \
-D CUDA_ARCH_PTX=8.7 \
-D WITH_CUDNN=ON \
-D WITH_CUBLAS=ON \
-D ENABLE_FAST_MATH=ON \
-D CUDA_FAST_MATH=ON \
-D OPENCV_DNN_CUDA=ON \
-D WITH_OPENMP=ON \
-D WITH_GSTREAMER=ON \
-D WITH_LIBV4L=ON \
-D BUILD_opencv_python3=ON \
-D BUILD_TESTS=OFF \
-D BUILD_PERF_TESTS=OFF \
-D BUILD_EXAMPLES=OFF ..
关键参数说明:
- CUDA_ARCH_BIN=8.7:针对Orin Nano的GPU架构设置
- OPENCV_DNN_CUDA=ON:启用CUDA加速的DNN模块
- 其他参数优化了CUDA计算性能和编译速度
2.2 编译与安装
使用以下命令开始编译(建议使用tmux或screen保持会话):
bash复制make -j$(nproc)
sudo make install
sudo ldconfig
编译完成后验证安装:
python复制python3 -c "import cv2; print(cv2.__version__); print(cv2.cuda.getCudaEnabledDeviceCount())"
3. YOLOv8环境配置与模型部署
3.1 Python环境准备
建议使用conda创建独立环境:
bash复制wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-aarch64.sh
bash Miniconda3-latest-Linux-aarch64.sh
conda create -n yolov8 python=3.8
conda activate yolov8
pip install --upgrade pip
3.2 安装Ultralytics YOLOv8
安装基础依赖和YOLOv8:
bash复制pip install ultralytics
pip install onnx onnxruntime-gpu
pip install torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/rocm5.4.2
注意:PyTorch的ARM版本需要通过ROCm支持,上述命令中的rocm5.4.2是针对Jetson平台的特定版本
3.3 验证YOLOv8运行
下载预训练模型并测试:
python复制from ultralytics import YOLO
model = YOLO('yolov8n.pt')
results = model('https://ultralytics.com/images/bus.jpg', save=True)
print(results)
4. 性能优化与实际问题解决
4.1 OpenCV与YOLOv8的CUDA加速
确保OpenCV和YOLOv8都正确使用了CUDA加速:
python复制import cv2
print(cv2.cuda.getCudaEnabledDeviceCount()) # 应返回1
import torch
print(torch.cuda.is_available()) # 应返回True
4.2 常见问题排查
-
OpenCV找不到CUDA设备:
- 检查
/usr/local/cuda是否存在并正确链接 - 确认
LD_LIBRARY_PATH包含CUDA库路径:bash复制export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH
- 检查
-
YOLOv8运行速度慢:
- 使用TensorRT加速:
bash复制
pip install nvidia-tensorrt python -m pip install nvidia-pyindex python -m pip install --upgrade nvidia-tensorrt - 转换模型为TensorRT格式:
python复制from ultralytics import YOLO model = YOLO('yolov8n.pt') model.export(format='engine', device=0)
- 使用TensorRT加速:
-
内存不足问题:
- 减小模型尺寸(使用yolov8s或yolov8n)
- 降低推理时的imgsz参数
- 增加交换空间(如前面所述)
4.3 实际应用示例:实时对象检测
以下是一个完整的摄像头实时检测脚本:
python复制import cv2
from ultralytics import YOLO
model = YOLO('yolov8n.pt')
cap = cv2.VideoCapture(0)
while True:
ret, frame = cap.read()
if not ret:
break
results = model(frame, imgsz=320)
annotated_frame = results[0].plot()
cv2.imshow('YOLOv8 Inference', annotated_frame)
if cv2.waitKey(1) == ord('q'):
break
cap.release()
cv2.destroyAllWindows()
5. 进阶配置与模型训练
5.1 自定义数据集训练
-
准备数据集(建议使用LabelImg标注):
bash复制
pip install labelImg labelImg -
创建数据集配置文件(data.yaml):
yaml复制train: /path/to/train/images val: /path/to/val/images nc: 3 # 类别数量 names: ['class1', 'class2', 'class3'] -
开始训练:
bash复制
yolo train data=data.yaml model=yolov8n.pt epochs=100 imgsz=640
5.2 模型导出与部署
支持多种导出格式:
bash复制yolo export model=yolov8n.pt format=onnx # ONNX格式
yolo export model=yolov8n.pt format=engine # TensorRT格式
yolo export model=yolov8n.pt format=torchscript # TorchScript格式
对于RK3588等嵌入式设备,建议使用ONNX格式并通过ONNX Runtime运行:
python复制import onnxruntime as ort
import numpy as np
sess = ort.InferenceSession('yolov8n.onnx', providers=['CUDAExecutionProvider'])
inputs = {'images': np.random.rand(1,3,640,640).astype(np.float32)}
outputs = sess.run(None, inputs)
在实际部署中,我发现Jetson Orin Nano的INT8量化能显著提升推理速度。可以通过以下命令进行量化:
bash复制yolo export model=yolov8n.pt format=engine int8=True
