1. Jetson Nano与YOLOv8的完美组合
Jetson Nano作为NVIDIA推出的边缘计算设备,凭借其强大的GPU加速能力,成为了嵌入式AI开发者的首选。而YOLOv8作为目标检测领域的新星,以其出色的速度和精度赢得了广泛关注。将这两者结合,你就能在边缘设备上实现实时目标检测,无论是智能监控、工业质检还是机器人视觉都能轻松应对。
我去年在一个智能农业项目中首次尝试了这个组合,需要在果园里实时检测水果成熟度。当时对比了多种方案,最终发现Jetson Nano+YOLOv8的组合不仅成本可控,而且完全能满足每秒10帧以上的检测需求。下面我就把踩过的坑和最佳实践都分享给你。
2. 系统准备与烧录
2.1 获取官方系统镜像
首先需要到NVIDIA官网下载Jetson Nano的SD卡镜像。这里有个小技巧:建议选择JetPack 4.6.1版本,因为这个版本对YOLOv8的支持最稳定。下载完成后你会得到一个压缩包,记得解压出.img镜像文件。
2.2 使用Etcher烧录镜像
推荐使用Etcher这款工具进行烧录,它支持跨平台且操作简单。插入至少32GB的microSD卡后:
# 在Linux下查看SD卡设备名 lsblk # 使用dd命令烧录(谨慎操作!) sudo dd if=jetson-nano.img of=/dev/sdX bs=4M status=progress烧录完成后,第一次启动时会进行系统初始化设置,建议选择"最大性能"模式。我遇到过因为没选这个导致YOLOv8推理速度慢了近30%的情况。
3. Python环境配置
3.1 安装Python 3.8
Jetson Nano默认的Python 3.6不满足YOLOv8要求,我们需要手动安装Python 3.8:
sudo apt update sudo apt install python3.8 python3.8-dev python3.8-venv3.2 创建虚拟环境
为了避免污染系统环境,建议创建专用虚拟环境:
python3.8 -m venv ~/yolo_env source ~/yolo_env/bin/activate有个实用技巧:把激活命令加到~/.bashrc末尾,这样每次登录都能自动激活环境:
echo "source ~/yolo_env/bin/activate" >> ~/.bashrc4. 安装PyTorch和Torchvision
4.1 安装PyTorch
由于ARM架构的特殊性,不能直接用pip安装。需要下载预编译的wheel文件:
wget https://nvidia.box.com/shared/static/ssf2v7pf5i245fk4i0q926hy4imzs2ph.whl -O torch-1.10.0-cp38-cp38-linux_aarch64.whl pip install torch-1.10.0-cp38-cp38-linux_aarch64.whl4.2 编译Torchvision
Torchvision需要从源码编译:
sudo apt install libjpeg-dev zlib1g-dev libpython3-dev libavcodec-dev libavformat-dev libswscale-dev git clone --branch v0.9.0 https://github.com/pytorch/vision torchvision cd torchvision python setup.py install编译过程大约需要30分钟,建议接上散热风扇。我曾经因为过热导致编译失败三次,后来加了散热片才解决。
5. 安装和测试YOLOv8
5.1 安装Ultralytics
在虚拟环境中直接安装:
pip install ultralytics如果遇到psutil编译错误,先安装:
sudo apt install python3.8-dev5.2 运行测试
来个简单的测试脚本:
from ultralytics import YOLO model = YOLO('yolov8n.pt') # 自动下载预训练模型 results = model('https://ultralytics.com/images/bus.jpg', save=True) print(results)首次运行可能会报错缺少libomp.so.5,解决方法是:
sudo apt install libomp56. 性能优化技巧
6.1 启用TensorRT加速
将模型转换为TensorRT格式可以大幅提升性能:
model.export(format='engine', device=0) # 生成yolov8n.engine trt_model = YOLO('yolov8n.engine')在我的测试中,TensorRT版本比原始PyTorch模型快2-3倍。
6.2 调整推理参数
根据实际需求调整参数可以平衡速度和精度:
results = model(source, imgsz=640, # 减小尺寸可提速 conf=0.5, # 置信度阈值 device=0) # 使用GPU对于4GB内存的Jetson Nano,建议使用yolov8n或yolov8s这类小模型。
7. 常见问题解决
7.1 内存不足问题
如果遇到CUDA内存错误,可以尝试:
- 减小batch size
- 使用更小的模型
- 创建swap空间:
sudo fallocate -l 4G /swapfile sudo chmod 600 /swapfile sudo mkswap /swapfile sudo swapon /swapfile7.2 摄像头实时检测
使用USB摄像头进行实时检测:
import cv2 from ultralytics import YOLO model = YOLO('yolov8n.engine') cap = cv2.VideoCapture(0) while cap.isOpened(): ret, frame = cap.read() results = model(frame) annotated_frame = results[0].plot() cv2.imshow("YOLOv8", annotated_frame) if cv2.waitKey(1) & 0xFF == ord('q'): break记得安装opencv-python:
pip install opencv-python8. 进阶应用
8.1 自定义模型训练
虽然Jetson Nano性能有限,但也可以进行模型微调:
from ultralytics import YOLO model = YOLO('yolov8n.pt') model.train(data='coco128.yaml', epochs=50, imgsz=640)训练时建议:
- 使用小批量数据
- 降低输入分辨率
- 开启风扇防止过热
8.2 多模型协同
通过进程隔离运行多个模型:
import multiprocessing def run_model(model_name): model = YOLO(model_name) model(source=0, show=True) p1 = multiprocessing.Process(target=run_model, args=('yolov8n.pt',)) p2 = multiprocessing.Process(target=run_model, args=('yolov8s.pt',)) p1.start() p2.start()这种方法可以在Jetson Nano上同时运行2-3个小模型。