当前位置: 首页 > news >正文

ss928v100模型的导出、量化和转换

1、yolov8导出为onnx

from ultralytics import YOLOmodel = YOLO("./best.pt")
model.export(format="onnx", imgsz=640, dynamic=False, simplify=True, opset=11, batch=1, half=False)

以下是model.export()方法各参数的详细解释:

  1. format="onnx"
    指定导出模型的目标格式为ONNX(Open Neural Network Exchange),这是一种跨平台的神经网络模型交换格式45。

  2. imgsz=640
    设置模型输入图像的尺寸为640x640像素,需与训练时的输入尺寸保持一致27。

  3. dynamic=False
    禁用动态输入维度,导出固定输入尺寸的模型。若为True则允许可变输入尺寸(如批处理维度可变)2。

  4. simplify=True
    启用ONNX模型的简化优化,去除冗余计算节点以减小模型体积并提升推理效率14。

  5. opset=11
    指定ONNX算子集的版本为11,不同版本支持的操作符可能不同,需根据部署环境选择兼容版本45。

  6. batch=1
    设置导出模型的默认批处理大小为1,即单张图片推理。若需支持批量推理需结合dynamic=True调整26。

  7. half=False
    禁用FP16半精度浮点数导出,保持FP32全精度。设为True可减小模型体积但可能损失精度1。

注:参数组合需根据实际部署需求调整,例如边缘设备部署可能需启用simplifyhalf以优化性能14。

2、利用amct工具进行模型量化

amct_onnx calibration --model yolov8n_finetuned.onnx --save_path yolov8n_ll --input_shape "images:1,3,640,640" --data_dir "./images640" --data_types "float32"

其中./images640中放的是resize到640*640的图像的二进制文件,即bin文件。图像转二进制方法:

import cv2
import os
import numpy as npimages = os.listdir("images")
for name in images:img = cv2.imread(os.path.join("images", name),1)img = cv2.resize(img, (640,640))print(img.shape)binary_data = img.flatten().astype('float32').tobytes()print(len(binary_data))with open(os.path.join("images640", name.split('.')[0] + ".bin"), "wb") as file:file.write(binary_data)

对于模型的输入尺寸可以通过代码查询:

import onnxmodel = onnx.load("yolov8n_finetuned.onnx")inputs = model.graph.input
for input in inputs:print(f"Input name: {input.name}")shape = []for dim in input.type.tensor_type.shape.dim:dim_value = dim.dim_value if dim.dim_value != 0 else "?"shape.append(dim_value)print(f"Input shape: {tuple(shape)}")print(f"Data type: {onnx.TensorProto.DataType.Name(input.type.tensor_type.elem_type)}")

--input_shape "images:1,3,640,640"参数中images对应inputname,后面的数字表示shape

3、量化后依然是onnx,需要使用atc工具转换为om格式,即离线模型后才能放入板端运行。

atc --model=yolov8n_finetuned.onnx --framework=5 --output=yolov8n_finetuned --soc_version=OPTG --output_type=FP32 --insert_op_conf=./op-yolo.cfg

其中,framework=5,表示onnx 

insert_op_conf需要输入一个配置:op-yolo.cfg 内容如下:


aipp_op {aipp_mode : staticrelated_input_rank : 0max_src_image_size : 1228800support_rotation : falseinput_format : YUV420SP_U8 # RGB888_U8src_image_size_w : 640src_image_size_h : 640cpadding_value: 0.0csc_switch : truerbuv_swap_switch : falseax_swap_switch : falsematrix_r0c0 : 298matrix_r0c1 : 0matrix_r0c2 : 459matrix_r1c0 : 298matrix_r1c1 : -55matrix_r1c2 : -136matrix_r2c0 : 298matrix_r2c1 : 541matrix_r2c2 : 0input_bias_0 : 16input_bias_1 : 128input_bias_2 : 128crop : falseload_start_pos_h : 0load_start_pos_w : 0crop_size_w : 640crop_size_h : 640mean_chn_0 : 124mean_chn_1 : 116mean_chn_2 : 104min_chn_0 : 0.0min_chn_1 : 0.0min_chn_2 : 0.0var_reci_chn_0 : 0.0039215686274509803921568627451var_reci_chn_1 : 0.0039215686274509803921568627451var_reci_chn_2 : 0.0039215686274509803921568627451}

转换完成之后,即可以导入板端运行。

相关文章:

  • Kotlin的MutableList和ArrayList区别
  • Kotlin基础语法三
  • IntelliJ IDEA代码提示忽略大小写设置详解
  • 容器化包允许应用程序使用 Linux 容器
  • PyTorch:让深度学习像搭积木一样简单!!!
  • 中兴B860AV1.1_MSO9280_降级后开ADB-免刷机破解教程(非刷机)
  • IntelliJ IDEA 豆沙绿护眼色设置
  • ADB(Android Debug Bridge)Android官方调试工具及常用命令
  • 广告推荐系统中模型训练中模型的结构信息、Dense数据、Sparse数据
  • SQL ConcurrencyControl(并发控制)
  • 【机器学习-线性回归-7】中心极限定理在机器学习线性回归中的重要性
  • 从认识AI开始-----生成对抗网络(GAN):通过博弈机制,引导生成
  • 机器学习与深度学习19-线性代数02
  • 【unitrix】1.1 密封模式(srcsealed.rs)
  • 第26节 Node.js 事件
  • 一个数组样式上要分成两个
  • Python训练第五十天
  • leetcode234-回文链表
  • CTFshow-PWN-栈溢出(pwn53)
  • [学习] C语言结构体与联合体的对比分析
  • 网站兼容设置/手机卡顿优化软件
  • 做家政网上推广网站/品牌推广方式都有哪些
  • 湖州建设企业网站/百度官网入口
  • 影视网站模板怎么做/长沙seo优化公司
  • 杨浦做网站/计算机培训
  • 做私彩网站代理会坐牢吗/重庆百度快照优化