产品咨询:19113907060
联系我们
产品咨询

如何使用CV186AH核心板开发工具链进行模型转换?

作者:万物纵横
发布时间:2025-11-25 09:23
阅读量:

模型转换是将主流 AI 框架模型适配 CV186AH TPU 的核心环节,主要依赖TPU-MLIR 工具链完成,下面我会详细讲解完整的转换流程和实操步骤。


如何使用CV186AH核心板开发工具链进行模型转换?(图1)


一、模型转换的核心工具与环境准备


CV186AH 的模型转换基于TPU-MLIR(算能官方模型编译器),它能将 ONNX/TensorFlow/PyTorch/Caffe 等模型转为 TPU 专用的BModel 格式。


1. 环境搭建(推荐 Docker 方式)


TPU-MLIR 对环境依赖较多,官方推荐使用 Docker 容器:


# 拉取官方镜像(包含完整TPU-MLIR环境)

docker pull sophgo/tpuc_dev:latest

# 启动容器(映射本地目录到容器内,方便文件交互)

docker run --privileged -v $PWD:/workspace -it sophgo/tpuc_dev:latest


2. 验证环境


进入容器后,执行以下命令确认工具可用:


# 检查TPU-MLIR版本

model_deploy.py -v

# 查看支持的芯片(确认包含cv186ah)

model_deploy.py --list-chips


二、模型转换的完整流程(以 ONNX 模型为例)


以 YOLOv5 的 ONNX 模型为例,展示从 FP32 模型到 CV186AH 可用的 BModel 的完整转换步骤。


1. 模型预处理(框架适配)


不同框架的模型需先转为ONNX 格式(PyTorch/TensorFlow 推荐)或直接使用原生格式(Caffe):


PyTorch 转 ONNX 示例:


import torch

from models.yolov5 import YOLOv5

# 加载预训练模型

model = YOLOv5(weights="yolov5s.pt").eval()

# 导出ONNX(指定输入尺寸,需和实际推理一致)

dummy_input = torch.randn(1, 3, 640, 640)

torch.onnx.export(

model, dummy_input, "yolov5s.onnx",

opset_version=12,          # 推荐opset 11-13

input_names=["images"],    # 输入节点名

output_names=["outputs"],  # 输出节点名

dynamic_axes=None          # CV186AH暂不支持动态维度,需固定尺寸

)


2. 生成 FP32 离线模型(第一步转换)


先将 ONNX 模型转为 TPU-MLIR 的MLIR 格式,再导出 FP32 精度的 BModel(用于精度对比):


# 1. ONNX转MLIR(指定输入尺寸、芯片型号)

model_deploy.py \

--model yolov5s.onnx \

--input-shapes [[1,3,640,640]] \

--input-types float32 \

--chip cv186ah \

--output yolov5s_fp32.mlir

# 2. MLIR转FP32 BModel(纯推理模型,无量化)

model_deploy.py \

--model yolov5s_fp32.mlir \

--chip cv186ah \

--quantize F32 \

--output yolov5s_fp32.bmodel


3. INT8 量化(提升推理性能,关键步骤)


CV186AH 的 TPU 对 INT8 量化模型优化最好,需准备校准数据集(100-500 张代表性图片)进行量化:


# 1. 生成校准表(用校准数据集统计数值分布)

run_calibration.py \

yolov5s_fp32.mlir \

--dataset ./calib_data/ \  # 校准数据集目录(图片或numpy文件)

--input_num 200 \           # 校准样本数量

-o yolov5s_cali_table

# 2. 生成INT8量化BModel(CV186AH实际部署用)

model_deploy.py \

--model yolov5s_fp32.mlir \

--chip cv186ah \

--quantize INT8 \

--calibration_table yolov5s_cali_table \

--output yolov5s_int8.bmodel


4. (可选)INT4 量化(极致性能,需精度允许)


若模型精度要求不高,可进一步量化为 INT4:


model_deploy.py \

--model yolov5s_fp32.mlir \

--chip cv186ah \

--quantize INT4 \

--calibration_table yolov5s_cali_table \

--output yolov5s_int4.bmodel


三、模型验证(确保转换后可用)


转换完成后,需验证模型的正确性和性能:


1. 精度验证(对比原始模型)


# 用测试图片对比FP32和INT8模型的输出差异

run_accuracy.py \

--model yolov5s_int8.bmodel \

--dataset ./test_data/ \

--ref-model yolov5s_fp32.bmodel  # 以FP32模型为基准


2. 性能测试(在 CV186AH 硬件上)


将 BModel 拷贝到 CV186AH 核心板,用sophon-sail测试推理速度:


# Python示例(CV186AH上运行)

import sophon.sail as sail

import cv2

import time

# 初始化引擎

engine = sail.Engine("yolov5s_int8.bmodel", sail.IOMode.SYSO)

# 准备输入图片

img = cv2.imread("test.jpg")

img = cv2.resize(img, (640, 640)).transpose(2,0,1)[None, ...]  # 转NCHW格式

# 测试推理速度

total_time = 0

for _ in range(100):

start = time.time()

output = engine.process(0, {"images": img})  # 0为模型ID

total_time += time.time() - start

print(f"平均推理时间:{total_time/100*1000:.2f}ms")

print(f"FPS:{100/total_time:.2f}")


四、不同框架模型的转换注意事项


TensorFlow:需先转为 Frozen Graph(.pb文件),再用model_deploy.py转换。


Caffe:直接使用.prototxt和.caffemodel,无需转 ONNX。


PaddlePaddle:先导出 ONNX(需安装paddle2onnx),再按 ONNX 流程转换。


总结


关键点回顾


核心工具:TPU-MLIR 是 CV186AH 模型转换的核心,推荐用 Docker 环境避免依赖问题。


转换流程:预处理(框架转 ONNX)→ FP32 模型生成 → INT8/INT4 量化 → 验证。


性能优化:INT8 量化是平衡精度和性能的最佳选择,需用代表性校准数据集保证精度。


通过以上步骤,即可将主流 AI 模型适配 CV186AH 的 TPU,充分发挥其 7.2 TOPS 的算力优势。

- END -
分享:
留言 留言 试用申请
电话咨询 电话咨询 电话联系
19113907060
微信在线客服 微信在线客服 在线客服
返回官网顶部 返回官网顶部 回到顶部
关闭窗口
产品订购
  • *

  • *

  • *

  • *

  • *