1. 爱芯派 Pro 开发板与 YOLOv5 模型部署概述
爱芯派 Pro 是一款基于 AX620A 芯片的高性能 AI 开发板,具备 3.6Tops@INT8 的算力,专为边缘计算和计算机视觉应用设计。YOLOv5 作为当前最流行的目标检测算法之一,其轻量级版本非常适合在爱芯派 Pro 这样的边缘设备上部署运行。
在实际项目中,我们经常需要将训练好的 YOLOv5 模型部署到爱芯派 Pro 开发板上,这个过程涉及模型格式转换、量化、优化等多个步骤。本文将详细介绍如何使用爱芯官方工具链完成 YOLOv5 模型的完整部署流程,包括从原始 PyTorch 模型到最终在开发板上运行的全过程。
2. 环境准备与工具安装
2.1 开发板基础环境配置
在开始模型部署前,需要确保开发板系统环境已正确配置:
- 刷写最新系统镜像到开发板
- 通过串口或 SSH 连接开发板
- 更新系统软件包:
sudo apt update && sudo apt upgrade -y - 安装基础依赖:
sudo apt install -y git cmake build-essential libopencv-dev
2.2 模型转换工具安装
爱芯官方提供了 pulsar 工具用于模型转换和量化,推荐使用 Docker 方式安装:
# 安装 Docker sudo apt install -y docker.io sudo systemctl enable --now docker # 添加当前用户到 docker 组 sudo usermod -aG docker $USER newgrp docker # 拉取 pulsar 镜像 docker pull sipeed/pulsar # 验证安装 docker run --rm sipeed/pulsar pulsar -h注意:如果国内拉取镜像速度慢,可以配置 Docker 镜像加速器。编辑
/etc/docker/daemon.json文件,添加镜像源。
3. YOLOv5 模型转换与量化
3.1 准备原始 YOLOv5 模型
首先需要获取 YOLOv5 官方模型或自己训练的模型:
git clone https://github.com/ultralytics/yolov5 cd yolov5 pip install -r requirements.txt # 导出 ONNX 格式模型 python export.py --weights yolov5s.pt --include onnx --imgsz 640 640导出时需要注意:
- 输入尺寸需与训练时保持一致(默认 640x640)
- 确保所有算子都支持 ONNX 导出
- 可以添加
--dynamic参数导出动态尺寸模型
3.2 模型量化配置
创建量化配置文件config_yolov5.prototxt:
input_type: INPUT_TYPE_ONNX output_type: OUTPUT_TYPE_JOINT target_hardware: TARGET_HARDWARE_AX620 cpu_backend_settings { axe_setting { mode: ENABLED axe_param { optimize_slim_model: true } } } src_input_tensors { color_space: TENSOR_COLOR_SPACE_RGB } dst_input_tensors { color_space: TENSOR_COLOR_SPACE_RGB } neuwizard_conf { operator_conf { input_conf_items { attributes { input_modifications { affine_preprocess { slope: 1 slope_divisor: 255 bias: 0 } } } } } dataset_conf_calibration { path: "calibration_dataset.tar" type: DATASET_TYPE_TAR size: 100 batch_size: 1 } } pulsar_conf { ax620_virtual_npu: AX620_VIRTUAL_NPU_MODE_111 batch_size: 1 }3.3 执行模型转换
使用 pulsar 工具进行模型转换:
docker run -it --rm -v $(pwd):/data sipeed/pulsar \ pulsar build --input yolov5s.onnx \ --output yolov5s.joint \ --config config_yolov5.prototxt \ --output_config out_config_yolov5.prototxt转换过程可能耗时几分钟,完成后会生成:
yolov5s.joint:可在开发板上运行的模型文件out_config_yolov5.prototxt:包含模型输入输出信息的配置文件
4. 模型部署与测试
4.1 将模型传输到开发板
使用 scp 将转换后的模型文件传输到开发板:
scp yolov5s.joint user@开发板IP:~/projects/4.2 准备测试程序
从官方示例库获取基础代码:
git clone https://github.com/AXERA-TECH/ax-samples cd ax-samples mkdir build && cd build cmake -DAXERA_TARGET_CHIP=AX620 .. make -j$(nproc)4.3 运行目标检测
使用编译好的示例程序测试模型:
./ax_yolov5 -m yolov5s.joint -i test.jpg程序会输出检测结果,包括:
- 检测到的目标类别和置信度
- 目标边界框坐标
- 推理耗时
5. 性能优化技巧
5.1 模型量化优化
- 使用更多样化的校准数据集可以提高量化精度
- 尝试不同的量化策略(如逐通道量化)
- 对于关键层可以尝试混合精度量化
5.2 推理流水线优化
- 使用双 NPU 模式提高吞吐量:
ax620_virtual_npu: AX620_VIRTUAL_NPU_MODE_112 - 合理设置 batch size 平衡延迟和吞吐
- 使用异步推理重叠计算和数据传输
5.3 内存优化
- 使用内存池减少动态分配开销
- 优化中间结果的内存布局
- 利用芯片的共享内存特性
6. 实际应用开发
6.1 摄像头实时检测
基于 libmaix 开发摄像头应用:
#include <maix.h> #include <axpi.h> int main() { maix::Camera cam(640, 480); maix::Display disp; axpi_model_t model; // 初始化模型 axpi_create_model(&model, "yolov5s.joint"); while(1) { auto img = cam.read(); axpi_run_model(model, img.data()); // 处理检测结果 auto detections = axpi_get_results(model); for(auto& det : detections) { img.draw_rect(det.bbox, maix::COLOR_RED); } disp.show(img); } axpi_destroy_model(model); return 0; }6.2 常见问题解决
模型转换失败:
- 检查 ONNX 算子支持情况
- 尝试简化模型结构
- 更新 pulsar 工具到最新版本
推理结果异常:
- 验证输入数据预处理是否正确
- 检查量化校准数据是否具有代表性
- 对比浮点模型和量化模型输出
性能不达标:
- 分析 NPU 利用率
- 检查是否有算子回退到 CPU 执行
- 优化模型结构和参数
7. 进阶开发建议
对于需要更高性能的场景,可以考虑:
- 使用 YOLOv5 的更轻量版本(如 nano 或 tiny)
- 自定义模型结构优化 NPU 利用率
- 利用 AI-ISP 实现图像预处理加速
- 开发多模型级联应用(如检测+分类)
爱芯派 Pro 的 AX620A 芯片还支持:
- 4K 视频编解码
- 多路摄像头输入
- 丰富的外设接口
这些特性可以与 YOLOv5 模型结合,开发更复杂的边缘 AI 应用。