我目前使用的转模型代码如下
from ultralytics import YOLO
import cv2
import time
import nncase
import onnx
modelname = "E:\Project\model\yolov8n"
# 加载预训练的YOLO模型
model = YOLO(modelname + ".pt")
path = model.export(format="onnx")
# 加载ONNX模型
onnx_model = onnx.load(modelname + ".onnx")
# 设置编译选项
compile_options = nncase.CompileOptions()
compile_options.target = 'k230'
compile_options.preprocess = True # 启用预处理
compile_options.swapRB = False # 不交换RB通道
compile_options.input_shape = [1, 3, 640, 640] # 设置输入形状
compile_options.input_type = 'uint8' # 输入图像数据类型
compile_options.input_range = [0, 1] # 输入图像反量化范围
compile_options.mean = [0, 0, 0] # 预处理均值
compile_options.std = [1, 1, 1] # 标准差设为1,不进行归一化
compile_options.input_layout = "NCHW" # 输入数据格式
# 创建编译器实例
compiler = nncase.Compiler(compile_options)
import_options = nncase.ImportOptions()
# 导入ONNX模型
compiler.import_onnx(onnx_model.SerializeToString(),import_options)
# 编译模型
compiler.compile()
# 生成KModel文件
kmodel_data = compiler.gencode_tobytes()
with open(modelname + ".kmodel", "wb") as f:
f.write(kmodel_data)
代码运行无异常,导出模型大小只有12MB,但在设备中运行模型时间非常长(具体超过5分钟一次),而后将预处理关闭,则设备中跑模型会报错
请问,以上问题是哪里的原因?应该怎么解决?