YOLOv5 是一种先进的实时目标检测算法,而 Jetson Nano 是一款强大的嵌入式计算设备,适合运行深度学习模型。将 YOLOv5 部署到 Jetson Nano 上可以实现高效的边缘计算任务。以下是详细的部署教程。
Jetson Nano 支持多种操作系统,推荐使用 NVIDIA 提供的官方 JetPack(包含 Ubuntu 和 CUDA)。下载并刷写 JetPack 到 Jetson Nano:
安装完成后,默认系统为 Ubuntu 18.04 或 20.04。
通过以下命令更新系统:
sudo apt update && sudo apt upgrade -y
YOLOv5 需要一些 Python 库和 C++ 库支持,安装如下依赖:
sudo apt install python3-pip python3-dev libopencv-dev cmake git -y
pip3 install numpy opencv-python torch torchvision
从 GitHub 克隆 YOLOv5 的官方仓库:
git clone https://github.com/ultralytics/yolov5.git
cd yolov5
YOLOv5 提供了多个版本的预训练模型(如 yolov5s.pt
、yolov5m.pt
等),选择一个适合 Jetson Nano 性能的模型(推荐 yolov5s.pt
):
wget https://github.com/ultralytics/yolov5/releases/download/v6.2/yolov5s.pt
Jetson Nano 内置了 NVIDIA GPU,因此需要配置 CUDA 和 cuDNN 来加速推理。
运行以下命令检查是否已安装 CUDA:
nvcc --version
如果未安装,可以通过 JetPack 自动安装。
确保 cuDNN 已正确安装,运行以下命令验证:
cat /usr/include/cudnn_version.h | grep CUDNN_MAJOR -A 2
在 Python 环境中测试 PyTorch 是否支持 CUDA:
import torch
print(torch.cuda.is_available()) # 输出 True 表示支持
YOLOv5 提供了一个简单的推理脚本 detect.py
,可以直接运行。为了适配 Jetson Nano,建议修改部分代码以优化性能。
# yolov5/detect.py (部分代码)
device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')
model = torch.load('yolov5s.pt', map_location=device)['model'].float().eval()
运行以下命令进行目标检测:
python3 detect.py --weights yolov5s.pt --img 640 --conf 0.4 --source 0
参数说明:
--weights
:指定预训练模型文件。--img
:输入图像大小(建议设置为 640x640)。--conf
:置信度阈值。--source
:输入源(0
表示摄像头,也可以是图片路径或视频文件)。Jetson Nano 的硬件资源有限,可以通过以下方式优化性能:
使用 PyTorch 的动态量化技术减少模型大小并提升推理速度:
import torch.quantization
quantized_model = torch.quantization.quantize_dynamic(model, {torch.nn.Linear}, dtype=torch.qint8)
torch.save(quantized_model.state_dict(), 'yolov5s_quantized.pt')
TensorRT 是 NVIDIA 提供的高性能推理框架,可以显著提升推理速度。步骤如下:
sudo apt install tensorrt
export.py
脚本将模型转换为 ONNX 格式:
python3 export.py --weights yolov5s.pt --include engine
如果出现 CUDA 错误,请检查驱动程序和 CUDA 版本是否匹配。可以通过以下命令更新驱动:
sudo apt install nvidia-driver-460
Jetson Nano 的内存较小,可能会导致 OOM(Out of Memory)。降低输入分辨率(如从 640x640 降到 320x320)可以缓解该问题。
通过上述步骤,您可以成功将 YOLOv5 部署到 Jetson Nano 上,并实现高效的目标检测任务。根据实际需求,还可以进一步优化模型性能。