实例讲解昇腾 CANN YOLOV8 和 YOLOV9 适配

💡 原文中文,约13600字,阅读约需33分钟。
📝

内容提要

本文介绍了华为昇腾CANN YOLOV8和YOLOV9的适配过程。首先需要获取YOLOV8的模型文件,并将其转化为.onnx模型。然后在Atlas 500 Pro服务器上进行模型转换。适配代码可以参考开源代码。最后进行编译运行,输出结果为检测到的物体和置信度。适配YOLOV9的过程与YOLOV8类似。

🔎

延伸解读

输出张量差异决定后处理改造

YOLOv7输出为[1,25200,85],YOLOv8为[1,84,8400],两者维度顺序和数值含义不同。适配时不能直接套用YOLOv7后处理,需按YOLOv8的[1,84,8400]重新解析:8400个预测框,每个框含4个坐标和80个类别概率。代码中通过offset=4跳过坐标,再在80个类别中取最大值作为置信度,这是适配的核心改动点。

模型转换关键参数与AIPP配置

在Atlas 500 Pro上使用atc工具转换时,需指定--soc_version=Ascend310P3,该值可通过npu-smi info查看。--input_shape="images:1,3,640,640"须与onnx输入节点一致。--insert_op_conf=aipp.cfg用于静态AIPP,完成YUV420SP_U8到RGB的色域转换、裁剪和归一化,确保输入图片缩放到640x640,否则推理结果可能异常。

自定义类别数需同步调整

示例代码中classNum固定为80,对应COCO数据集。若使用自定义模型,输出尺寸中的84会变为4加类别数。例如输出为[1,26,8400]时,类别数应为22。适配时需同步修改classNum,否则类别索引和置信度计算会出错。这一细节在迁移到自有数据集时尤其重要。

YOLOv9适配可复用YOLOv8流程

YOLOv9与YOLOv8输出格式一致,均为[1,84,8400],因此后处理代码无需改动。适配YOLOv9只需在Windows上创建独立环境,克隆YOLOv9代码并安装依赖,用export.py将yolov9-c-converted.pt导出为onnx,再在Atlas服务器上执行相同的atc转换命令生成om模型即可。

❓

Q&A

如何将YOLOV8模型文件转化为.onnx模型?

在Windows上安装YOLOV8环境后,执行python脚本pth2onnx.py,将.pt模型转化为.onnx模型。

适配YOLOV8和YOLOV9的主要步骤是什么?

首先获取模型文件并转化为.onnx模型,然后在Atlas 500 Pro服务器上进行模型转换,最后编译运行代码。

YOLOV8模型的输出数据格式是什么?

YOLOV8模型的输出数据格式为[1, 84, 8400],其中84表示4个边界框预测值和80个检测类别。

如何在Atlas 500 Pro服务器上执行模型转换?

使用命令atc --model=yolov8n.onnx --framework=5 --output=yolov8n --input_shape='images:1,3,640,640' --soc_version=Ascend310P3。

适配YOLOV9的过程与YOLOV8有何不同?

YOLOV9的适配过程与YOLOV8类似,主要区别在于生成yolov9xx.om模型,其他步骤基本相同。

如何编译和运行YOLOV8适配代码?

下载开源代码后,解压并在src目录下执行cmake .和make命令,生成可执行文件后运行即可。

🏷️

标签

➡️

继续阅读