回答

收藏

[评测分享] 【研华AMD嵌入式主板AIMB-2210】03:模型量化和编译部署

板卡试用 板卡试用 14 人阅读 | 0 人回复 | 2025-11-09

本帖最后由 eefocus_4150358 于 2025-11-9 18:18 编辑

1 环境准备
使用以下指令,创建一个conda环境。
set RYZEN_AI_CONDA_ENV_NAME=ryzen-ai-<version>s
conda create –name yolov8m_env --clone %RYZEN_AI_CONDA_ENV_NAME%
conda activate yolov8m_env
安装量化所需的python包。

2 下载模型和数据集
下载yolov8m.pt模型:https://github.com/ultralytics/assets/releases/download/v8.3.0/yolov8m.pt,使用python脚本将yolov8m.onnx模型导出,并下载COCO数据集,如下所示。

3 模型量化和编译部署
(1)BF16量化
使用AMD-Quark对模型进行量化,输入以下配置指令:python quantize_quark.py --input_model_path models/yolov8m.onnx --calib_data_path calib_images --output_model_path models/yolov8m_BF16.onnx --config BF16,配置完成后如下所示。



对数据集进行推理测试,输入指令:python run_inference.py --model_input models\yolov8m_BF16.onnx --input_image test_image.jpg --output_image test_output.jpg --device npu-bf16,输出结果如下所示。


(2)XINT8量化
输入指令:python quantize_quark.py --input_model_path models/yolov8m.onnx --calib_data_path calib_images  --output_model_path models/yolov8m_XINT8.onnx  --config XINT8


输入指令来输出一张测试样例查看测试效果:python run_inference_simple.py --model_input models\yolov8m_XINT8.onnx --input_image test_image.jpg --output_image test_output_int8.jpg --device npu-int8
在运行指令时可能出现下面的报错问题。


另外如果出现关于环境变量的报错,那么要检查是否设置了RYZEN_AI_INSTALLATION_PATH,右键点击"此电脑" → "属性" → "高级系统设置→" 点击"环境变量"→在"系统变量"中新建变量:→变量名:RYZEN_AI_INSTALLATION_PATH→变量值:C:\AMD\RyzenAI(根据实际安装路径修改),如下所示。


设置完成后重启命令面板或者重启板卡即可。
修改完成后继续运行指令即可,输出结果如下所示。


注意:此时输出的图像没有检测到任何物体,这是因为在XINT8量化后置信度会显著下降,丢失大多数边界框,所以输出图像中没有检测到任何物体。下面开始尝试修复这个问题。
重新量化,输入指令:python quantize_quark.py --input_model_path models/yolov8m.onnx --calib_data_path calib_images --output_model_path models/yolov8m_XINT8.onnx --config XINT8 --exclude_subgraphs "[/model.22/Concat_3], [/model.22/Concat_5]]"
如果出现以下报错。


找不到相关节点一般是由于yolov8m.onnx导出时出现了问题,可以尝试下载netron依赖包查看一下模型的结构。


下载好netron依赖包后,创建python文件,打开查看一下模型结构,如下所示。



或者通过代码输出查找相关的节点,如下所示。


检查后缺失发现没有concat5节点,因此需要重新导出yolov8m.onnx模型。接下来尝试另一种方式导出yolov8m.onnx模型。
创建一个python文件,尝试从ultralytics中下载模型,(注意事项:1.在下载时可能会要求更新ultralytics,同时升级onnxruntime,这会导致所有模型无法在NPU上运行,因此建议克隆当前环境用来备份。2.另一种情况是运行时会提示没有检测到onnxruntime,并且自动安装,出现何种情况最简单的办法就是把下载好的yolov8m.pt文件和yolov8m.onnx文件检查是否出现节点缺失,确认完毕后保留好导出的文件,然后直接移除所有环境,卸载RyzenAI-1.4.0,重新安装RyzenAI-1.4.0,重新搭建环境。)代码如下所示。

再次检查节点就可以找到concat_5了,如下所示。


得到完整的yolov8m.onnx模型后就可以再次量化了。
输入指令:python quantize_quark.py --input_model_path models/yolov8m.onnx --calib_data_path calib_images --output_model_path models/yolov8m_XINT8.onnx --config XINT8 --exclude_subgraphs "[/model.22/Concat_3], [/model.22/Concat_5]]"",再次进行量化。

使用重新量化后的XINT8模型生成一个示例输出,输入指令:python run_inference.py --model_input models\yolov8m_XINT8.onnx --input_image test_image.jpg --output_image test_output_int8.jpg --device npu-int8,初步查看准确度,如下所示。


生成的test_output_int8.jpg,如下所示。









分享到:
回复

使用道具 举报

您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /3 下一条