BM1684X移植自写算法记录

news/2024/11/14 12:17:47/

移植步骤------------------------------------------------------------------------

首先搭建好自己的网络模型,并导出为onnx格式--具体可以参照-->

https://github.com/warren-wzw/MNIST-pytorch.git

  1. 将onnx模型使用tpu-mlir工具转化为bmodel格式--具体可以参照--->
  2. https://kdocs.cn/l/coKOub6BysyfBM1684X-onnx模型转化为bmodel_warren@伟_的博客-CSDN博客https://kdocs.cn/l/coKOub6Bysyf
  3. 在板端搭建好sophon-sail环境---->
  4. https://kdocs.cn/l/ce7T9GNtS3D3BM1684X开发环境搭建--SOC mode_warren@伟_的博客-CSDN博客https://kdocs.cn/l/ce7T9GNtS3D3
  5. 在板端新建一个MNIST文件夹,文件目录如下,其中datasets存放测试数据集train-images-idx3-ubyte,test_output_fp16_1b.bmodel以及test_output_fp32_1b.bmodel为onnx转化后的bmodel模型,test.py为测试代码。

 

  1. 主要的原理就是使用sophon提供的api加载能够适配于BM1684X的bmodel类型的模型,并使用他们的api进行模型的推理,官方sail的API可以参考-->

3. API 参考 — sophon-sail v23.03.01 文档

  1. 下面讲解一下测试代码

 

#import cv2
import numpy as np
import sophon.sail as sail
import timenum = -1 
inference_time =[0]
print("--0-5 1-0 2-4 3-1 4-9 5-2 6-1 7-3 8-1 9-4 for example:if num =9 the pic's num is 4")engine = sail.Engine("./test_output_fp32_1b.bmodel",0,sail.IOMode.SYSIO) #load model-use FP32model on tpu-0 and use sys memery
#engine = sail.Engine("./test_output_fp16_1b.bmodel",0,sail.IOMode.SYSIO) #load model-use FP16 on tpu-0 and use sys memerygraph_name =engine.get_graph_names()[0]                      #get_graph_names-test_output
input_tensor_name = engine.get_input_names(graph_name)[0]    #get_input_names-input.1
output_tensor_name = engine.get_output_names(graph_name)[0]  #get_output_names-25_LogSoftmaxbatchsize,channel,height,width = engine.get_input_shape(graph_name,input_tensor_name) #get batchsize-1,channel-1,input image's height-28 & width-28#read image
with open("./datasets/train-images-idx3-ubyte","rb") as f:file = f.read()
for i in range(8000): num =num +1  i = 16+784*numimage1 = [int(str(item).encode('ascii'),16) for item in file[i:i+784]]#reshap input datainput_data = np.array(image1,dtype=np.float32).reshape(1,1,28,28)  #reshape the image to 1 1 28 28input_data_final = {input_tensor_name:input_data}     #because the process's parmeter(input_data)  must be dictionary so use{}start_time = time.time()outputs = engine.process(graph_name,input_data_final) #model inferenceend_time = time.time()inference_time.append(end_time - start_time)  result = outputs[output_tensor_name]  #use output_tensor_name to get the tensormax_value=np.argmax(result)           #get the index of the best scoreprint("----------------------------------the result is ",max_value,"the time is ",inference_time[num]*1000,"ms")mean = (sum(inference_time) / len(inference_time))*1000
print("-----FP32--","loop ",num+1,"times","average time",mean,"ms")
  1. 测试结果

FP32

FP16

 


http://www.ppmy.cn/news/238313.html

相关文章

BPMN模拟动画执行流程

目录 第一步:构建BPMN图 第二步:开启模拟 第三步:执行模拟 第四步:监听模拟 第一步:构建BPMN图 通过id标记,每一个流程 第二步:开启模拟 BPMN官方提供了各种各样的模块,比如执行…

基于状态的维护(CBM)如何推动设备效率提高?

基于状态的维护(Condition-Based Maintenance,CBM)是一种先进的维护策略,通过实时监测和分析设备的状态数据,预测设备故障并采取相应的维护措施。CBM基于数据驱动的方法,能够提高设备的可用性、降低维修成本…

ES update_time 字段 更新时间

search_key_word : time 写入精度 update_time 字段 更新时间 说明: 在 5.0 版本之前可以开启 _timestamp 元数据字段,会自动为文档添加一个时间戳,但此元数据字段已在 2.x 版本过时,5.x 版本移除 (release nodes) 在 5.x 及之后…

企业数字化转型转什么?怎么转?这份攻略请收好...

数字化转型,转什么?怎么转?这些问题仍在困扰不少企业,也是每个企业转型升级不得不思考的重要问题。 对此,中关村数字经济产业联盟、元年研究院、《管理会计研究》联合发布了《成就数据驱动型企业 中国企业数字化转型白…

2023年数学与人工智能国际会议——火热征稿中~

会议简介 Brief Introduction 2023年数学与人工智能国际会议(CFMAI 2023) 会议时间:2023年9月22 -24日 召开地点:中国杭州 大会官网:www.cfmai.org 2023年数学与人工智能国际会议(CFMAI 2023)由中山大学主办,CoreShare科享学术交流…

02_类加载子系统

目录 1、Jvm内存结构概述二、类加载器与类的加载过程1、类加载器子系统的作用2、类的加载过程 三、类加载器的分类1、启动类加载器2、扩展类加载器3、应用程序类加载器4、用户自定义加载器5、获取ClassLoader的几种方式 五、双亲委派机制1、什么是双亲委派机制2、双亲委派机制的…

Python版Day8

344. 反转字符串 编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 s 的形式给出。 不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。 来源:力扣(LeetCode&#x…

记录--JavaScript 中有趣的 9 个常用编码套路

这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 1️⃣ set对象:数组快速去重 常规情况下,我们想要筛选唯一值,一般会想到遍历数组然后逐个对比,或者使用成熟的库比如lodash之类的。 不过,ES…