Mindspore导出onnx并借助ATC工具转OM模型

一、用expor.py把训练好的模型和ckpt载入,导出onnx模型,代码如下:输入的图片尺寸和通道数要自己确认好。这很重要 !

import argparse
import numpy as np
import os
import mindspore
from mindspore import context, Tensor
from mindspore.train.serialization import export, load_checkpoint, load_param_into_net
from src.config import ConfigYOLOV5
from src.yolo import YOLOV5s_Infer
from src.yolo import YOLOV5s
#
parser = argparse.ArgumentParser(description='yolov5 export')
parser.add_argument("--device_id", type=int, default=0, help="Device id")
parser.add_argument("--batch_size", type=int, default=1, help="batch size")
parser.add_argument("--testing_shape", type=int, default=640, help="test shape")
# parser.add_argument("--ckpt_file", type=str, required=True, help="Checkpoint file path.")
parser.add_argument("--file_name", type=str, default="yolov5", help="output file name.")
# parser.add_argument('--file_format', type=str, choices=["AIR", "MINDIR"], default='AIR', help='file format')
parser.add_argument("--device_target", type=str, choices=["Ascend", "GPU", "CPU"], default="CPU",
                    help="device target")
args = parser.parse_args()
#
# context.set_context(mode=context.GRAPH_MODE, device_target=args.device_target)
# if args.device_target == "Ascend":
#     context.set_context(device_id=args.device_id)
#
# 创建文件夹,将模型保存至此文件夹下

# 加载ckpt模型,注意如果此行报错,可将cfg.directory,后的代码改为已存在的ckpt文件,例如'resnet-ai_2-150_113.ckpt'
param_dict = load_checkpoint(
    os.path.join('0-1000_149000.ckpt'))

# 设置训练网络,加载模型参数到训练网络内,这里以Resnet50为例
# 设置ResNet50网络

resnet = YOLOV5s_Infer(640)

# 加载模型参数到ResNet50网络内
load_param_into_net(resnet, param_dict)
config = ConfigYOLOV5()

config.test_img_shape = [320, 320]
ts_shape = config.test_img_shape[0]

# network = YOLOV5s_Infer(config.test_img_shape)
# load_param_into_net(network, param_dict)


input_data = Tensor(np.zeros([1, 12, 320, 320]), mindspore.float32)

export(resnet, input_data, file_name='yolov5320', file_format='ONNX')

二、利用ATC工具将onnx转成om模型,这里我是在200dk A2开发板上直接转的,此开发板是自带atc工具的,转om指令如下:这里需要注意的是用netron打开onnx模型看下,输入端写的啥,写的x就写x:写的image就把x改成image,version那里就对应自己的华为开发板是啥,可以在开发板里面输入 npu-smi info 查看卡的类型,Ascend301B的卡就是我这个指令。

atc--model=vo.onnx --framework:--input shape="x:1,12,320,320"--input format=NCHW--log=erroroc version=Ascend310B1

注意:开发板需要先分区资源,不然运行不出来,开发板教程参考:这里只需要配开发板环境和创建分区,里面不用装condahttps://www.hiascend.com/document/detail/zh/Atlas200IDKA2DeveloperKit/23.0.RC1/Getting%20Started%20with%20Application%20Development/iaqd/iaqd_0001.html

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值