YOLOv8移植到海思SD3403板子教程(一)

本文介绍了如何将YOLOv8模型移植到海思SD3403板子上,包括模型训练、转换和部署的详细步骤。首先,对YOLOv8模型进行训练,然后通过修改源码将PyTorch模型转换为ONNX和Caffe模型。接着,编译Caffe并使用转换脚本生成CAFFE模型和prototxt文件。最后,探讨了SD3403板子上的模型转换流程。若在过程中遇到问题,作者提供了帮助。

海思SD3403板子上跑通YOLOv5后,尝试将YOLOv8部署到3403上,目前全流程已跑通,算法模型可以在板端的NNN和SVP_NNN核上稳定运行。

首先话不多说进入YOLOv8模型训练部分,不要使用pip install ultralytics安装库,而是下载源码,对源码中训练部分进行修改。这里就不挂链接了,YOLOv8原版模型是无法直接部署到板子上的(至少在我的pipeline里无法直接部署),原因是训练好的pytorch模型需要转换成onnx模型再转换为caffemodel,caffe目前不支持Upsample层和sub层。

训练YOLOv8模型需要对模型定义文件(ultralytics/cfg/models/v8/yolov8.yaml)中head部分进行改造。

# YOLOv8.0n head
head:
  - [-1, 1, nn.Upsample, [None, 2, "nearest"]]
  - [[-1, 6], 1, Concat, [1]] # cat backbone P4
  - [-1, 3, C2f, [512]] # 12

  - [-1, 1, nn.Upsample, [None, 2, "nearest"]]
  - [[-1, 4], 1, Concat, [1]] # cat backbone P3
  - [-1, 3, C2f, [256]] # 15 (P3/8-small)

  - [-1, 1, Conv, [256, 3, 2]]
  - [[-1, 12], 1, Concat, [1]] # cat head P4
  - [-1, 3, C2f, [512]] # 18 (P4/16-medium)

  - [-1, 1, Conv, [512, 3, 2]]
  - [[-1, 9], 1, Concat, [1]] # cat head P5
  - [-1, 3, C2f, [1024]] # 21 (P5/32-large)

  - [[15, 18, 21], 1, Detect, [nc]] #
<think>嗯,用户想知道如何在HiSilicon SD3403芯片上部署YOLOv8模型,需要详细步骤。首先,我得先了解SD3403芯片的部署流程。根据引用内容,他们提到了OM模型和Docker容器中的路径,可能涉及到模型转换和代码编写。 首先,用户可能需要将YOLOv8的PyTorch模型转换成ONNX格式,这步是常见的模型部署步骤。然后,使用海思的工具链将ONNX转为OM模型,因为引用里提到OM模型是在芯片上运行推理的。接下来,需要编写推理代码,可能涉及到C++或海思SDK,这部分需要参考海思的文档。 然后,用户需要配置交叉编译环境,可能用Docker容器来保持环境致性。编译后的可执行文件需要部署到设备上,可能通过网络或存储设备传输。测试时可能需要调试模型精度和性能,确保推理结果正确。 用户可能遇到的问题包括模型转换时的兼容性,比如某些算子不支持,这时候需要调整模型结构或使用自定义层。另外,内存和计算资源的优化也很重要,特别是嵌入式设备的资源有限。 还需要考虑文档中的用户手册部分,可能包含具体的目录结构和命令示例。用户可能需要安装海思的HiAI工具,进行模型转换和量化。编写推理代码时,可能需要调用HiAI的API来加载OM模型和处理输入输出。 总之,步骤大致分为环境准备、模型转换、代码开发、编译部署和测试验证。需要详细说明每步的命令和配置,确保用户能按图索骥。同时,生成的相关问题可以涉及性能优化、模型量化、调试方法等,帮助用户深入理解部署过程。</think>### YOLOv8海思SD3403芯片部署详细步骤 #### 、环境准备 1. **安装HiAI工具链** 从海思开发者平台获取HiAI工具链(含模型转换工具和SDK),安装后配置环境变量: ```bash export HIAI_HOME=/opt/hisi/hi3519dv500 export PATH=$HIAI_HOME/bin:$PATH ``` 引用海思文档需确保版本匹配SD3403芯片[^1]。 2. **配置Docker开发环境** 使用官方提供的Docker镜像(如`hisilicon/ubuntu18.04_arm`): ```bash docker pull hisilicon/ubuntu18.04_arm docker run -it --name hisi_env hisilicon/ubuntu18.04_arm ``` 模型转换和代码开发建议在容器内完成。 --- #### 二、模型转换(PyTorch → ONNX → OM) 1. **导出YOLOv8为ONNX** ```python from ultralytics import YOLO model = YOLO("yolov8n.pt") model.export(format="onnx", dynamic=False, simplify=True) ``` 输出文件为`yolov8n.onnx`。 2. **ONNX转OM模型** 使用HiAI的`atc`工具进行转换: ```bash atc --model=yolov8n.onnx \ --framework=5 \ --output=yolov8n \ --soc_version=HiS3403 \ --input_format=NCHW \ --input_shape="images:1,3,640,640" \ --log=error ``` 生成`yolov8n.om`文件,需验证算子兼容性。 --- #### 三、编写推理代码(C++示例) 1. **加载OM模型** ```cpp #include "hiai_ai_model_manager.h" HIAI_AI_ModelManager* manager; HIAI_AI_ModelInitParam initParam = {.model_path = "/root/yolo/yolov8n.om"}; HIAI_AI_ModelManager_Init(&manager, &initParam); ``` 2. **数据预处理与推理** 将输入图像缩放至$640 \times 640$,归化后转换为`float16`格式: ```cpp std::vector<HIAI_AI_Tensor> inputs = {ConvertImageToTensor(image)}; std::vector<HIAI_AI_Tensor> outputs; HIAI_AI_ModelManager_Run(manager, inputs, outputs); ``` 3. **后处理解析** 根据输出张量维度$1 \times 84 \times 8400$解析检测框: ```cpp for (int i=0; i<8400; i++) { float* ptr = output_data + i*84; float conf = ptr[4]; // 置信度 if (conf > 0.5) { // 计算坐标并应用NMS } } ``` --- #### 四、编译与部署 1. **交叉编译配置** 在Docker容器内使用`aarch64-himix100-linux-g++`编译: ```bash aarch64-himix100-linux-g++ main.cpp -I $HIAI_HOME/include -L $HIAI_HOME/lib -lhiai_ai -o yolov8_infer ``` 2. **部署到设备** 通过`scp`传输可执行文件和OM模型: ```bash scp yolov8_infer root@192.168.1.100:/userdata scp yolov8n.om root@192.168.1.100:/userdata ``` --- #### 五、测试与验证 ```bash # 在设备端执行 cd /userdata ./yolov8_infer test.jpg ``` 检查输出结果是否包含正确的检测框和类别标签。 ---
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值