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

3403(3519Dv500)算子精度比对工具标杆数据生成环境搭建指导(Caffe)

一、简介

        海思平台算子精度比对工具所依赖的标杆数据生成环境搭建指导文档,基于ubuntu操作系统,目前仅支持 Caffe 。

二、环境准备

        1.caffe安装

        参考:

         2. caffe 推理场景dump脚本使用方法

     (1)功能说明

                用于获取caffe的运行结果,可以获取每一层的结果,输入需要是bin文件。

                示例1:dump模型每个节点的npy结果文件

python3.7 caffe_dump.py -m resnet50.prototxt -w resnet50.caffemodel -i test.bin -n 'data' -o ./output_d

        其中 -n 指定的名称为模型的实际输入名称,-i 指定的输入文件需要与输入名称一一对应,且大小以及数据类型相匹配。

示例1:npy格式的dump文件会生成到 -o 指定的路径中,如下图:

caffe_dump.py

# coding=utf-8import caffe
import sys
import argparse
import os
import caffe.proto.caffe_pb2 as caffe_pb2
import google.protobuf.text_format
import json
import numpy as np
import timeTIME_LENGTH = 1000
FILE_PERMISSION_FLAG = 0o600
class CaffeProcess:def __init__(self):parse = argparse.ArgumentParser()parse.add_argument("-w", dest="weight_file_path",help="<Required> the caffe weight file path",required=True)parse.add_argument("-m", dest="model_file_path",help="<Required> the caffe model file path",required=True)parse.add_argument("-o", dest="output_path", help="<Required> the output path",required=True)parse.add_argument("-i", "--input_bins", dest="input_bins", help="input_bins bins. e.g. './a.bin;./c.bin'",required=True)parse.add_argument("-n", "--input_names", dest="input_names",help="input nodes name. e.g. 'input_0;input_1'",required=True)args, _ = parse.parse_known_args(sys.argv[1:])self.weight_file_path = os.path.realpath(args.weight_file_path)self.model_file_path = os.path.realpath(args.model_file_path)self.input_bins = args.input_bins.split(";")self.input_names = args.input_names.split(";")self.output_path = os.path.realpath(args.output_path)self.net_param = Noneself.cur_layer_idx = -1@staticmethoddef _check_file_valid(path, is_file):if not os.path.exists(path):print('Error: The path "' + path + '" does not exist.')exit(-1)if is_file:if not os.path.isfile(path):print('Error: The path "' + path + '" is not a file.')exit(-1)else:if not os.path.isdir(path):print('Error: The path "' + path + '" is not a directory.')exit(-1)def _check_arguments_valid(self):self._check_file_valid(self.model_file_path, True)self._check_file_valid(self.weight_file_path, True)self._check_file_valid(self.output_path, False)for input_file in self.input_bins:self._check_file_valid(input_file, True)@staticmethoddef calDataSize(shape):dataSize = 1for dim in shape:dataSize *= dimreturn dataSizedef _load_inputs(self, net):inputs_map = {}for layer_name, blob in net.blobs.items():if layer_name in self.input_names:input_bin = np.fromfile(self.input_bins[self.input_names.index(layer_name)], np.float32)input_bin_shape = blob.data.shapeif self.calDataSize(input_bin_shape) == self.calDataSize(input_bin.shape):input_bin = input_bin.reshape(input_bin_shape)else:print("Error: input node data size %d not match with input bin data size %d.", self.calDataSize(input_bin_shape), self.calDataSize(input_bin.shape))exit(-1)inputs_map[layer_name] = input_binreturn inputs_mapdef process(self):"""Function Description:process the caffe net, save result as dump data"""# check path validself._check_arguments_valid()# load model and weight filenet = caffe.Net(self.model_file_path, self.weight_file_path,caffe.TEST)inputs_map = self._load_inputs(net)for key, value in inputs_map.items():net.blobs[key].data[...] = value# processnet.forward()# read prototxt filenet_param = caffe_pb2.NetParameter()with open(self.model_file_path, 'rb') as model_file:google.protobuf.text_format.Parse(model_file.read(), net_param)for layer in net_param.layer:name = layer.name.replace("/", "_").replace(".", "_")index = 0for top in layer.top:data = net.blobs[top].data[...]file_name = name + "." + str(index) + "." + str(round(time.time() * 1000000)) + ".npy"output_dump_path = os.path.join(self.output_path, file_name)np.save(output_dump_path, data)os.chmod(output_dump_path, FILE_PERMISSION_FLAG)print('The dump data of "' + layer.name+ '" has been saved to "' + output_dump_path + '".')index += 1
if __name__ == "__main__":caffe_process = CaffeProcess()caffe_process.process()

相关文章:

  • 【Python Cookbook】S01E15 将名称映射到序列的元素中
  • Next.js API Routes:构建服务端功能
  • vue限制日期选择器不能选今年后的日期
  • Unity开发——编辑器打包、3种方式加载AssetBundle资源
  • day25-XML
  • 二叉树非递归遍历(C++)
  • springcloud Feign调用拦截器(统一处理拷贝请求头实现透传信息、内部调用鉴权、打印feign调用)
  • 【C++入门到精通】C++ thread线程库 [ C++入门 ]
  • 就凭这张图,下订华为享界S9
  • Linux系统使用Docker安装Drupal结合内网穿透实现远程访问管理后台
  • CMakeFile.txt通过sysroot方式后生成makefile报错
  • 构建LangChain应用程序的示例代码:7、如何使用Amazon Personalize服务的教程
  • git随记
  • ant design vue 表格错位,表头错位
  • 【安装笔记-20240528-Linux-在 Vultr 云服务器上安装 OpenWRT】
  • 【许晓笛】 EOS 智能合约案例解析(3)
  • 【跃迁之路】【585天】程序员高效学习方法论探索系列(实验阶段342-2018.09.13)...
  • bootstrap创建登录注册页面
  • CSS实用技巧干货
  • ECMAScript 6 学习之路 ( 四 ) String 字符串扩展
  • extjs4学习之配置
  • JavaScript 基本功--面试宝典
  • JavaScript 一些 DOM 的知识点
  • js继承的实现方法
  • log4j2输出到kafka
  • node-sass 安装卡在 node scripts/install.js 解决办法
  • text-decoration与color属性
  • 发布国内首个无服务器容器服务,运维效率从未如此高效
  • 构造函数(constructor)与原型链(prototype)关系
  • 前端
  • 责任链模式的两种实现
  • 追踪解析 FutureTask 源码
  • 【运维趟坑回忆录】vpc迁移 - 吃螃蟹之路
  • LIGO、Virgo第三轮探测告捷,同时探测到一对黑洞合并产生的引力波事件 ...
  • raise 与 raise ... from 的区别
  • TPG领衔财团投资轻奢珠宝品牌APM Monaco
  • 阿里云服务器购买完整流程
  • 昨天1024程序员节,我故意写了个死循环~
  • ​一文看懂数据清洗:缺失值、异常值和重复值的处理
  • ​云纳万物 · 数皆有言|2021 七牛云战略发布会启幕,邀您赴约
  • ‌内网穿透技术‌总结
  • #Linux(权限管理)
  • #设计模式#4.6 Flyweight(享元) 对象结构型模式
  • (6)添加vue-cookie
  • (Mirage系列之二)VMware Horizon Mirage的经典用户用例及真实案例分析
  • (ZT)北大教授朱青生给学生的一封信:大学,更是一个科学的保证
  • (备份) esp32 GPIO
  • (代码示例)使用setTimeout来延迟加载JS脚本文件
  • (二)构建dubbo分布式平台-平台功能导图
  • (已解决)报错:Could not load the Qt platform plugin “xcb“
  • (转)fock函数详解
  • (转)自己动手搭建Nginx+memcache+xdebug+php运行环境绿色版 For windows版
  • (自适应手机端)响应式新闻博客知识类pbootcms网站模板 自媒体运营博客网站源码下载
  • .desktop 桌面快捷_Linux桌面环境那么多,这几款优秀的任你选
  • .JPG图片,各种压缩率下的文件尺寸