试一下就知道了~
1 写个网络并导出成onnx
import torch.nn as nn
import torch
# ---------------------------------------------------------------------#
# 定义一个简单的单输入网络,地平线要求模型中必须要有Conv/Gemm/MatMul中的一个
# ---------------------------------------------------------------------#
class MyNet(nn.Module):
def __init__(self, num_classes=10):
super(MyNet, self).__init__()
self.fc = nn.Linear(162, num_classes)
def forward(self, x, y):
z = torch.cat((x, y),1)
z = torch.flatten(z, start_dim=1)
z = self.fc(z)
return z
# -----------------------------------#
# 导出ONNX模型函数
# -----------------------------------#
def model_convert_onnx(model, output_path):
a = torch.randn(1, 3, 3, 3, 3)
b = torch.randn(1, 3, 3, 3, 3)
input_names = ["input1", "input2"] # 导出的ONNX模型输入节点名称
output_names = ["output1"] # 导出的ONNX模型输出节点名称
torch.onnx.export(
model,
(a, b),
output_path,
opset_version=11, # 地平线目前支持 10 or 11
input_names=input_names,
output_names=output_names,
)
if __name__ == '__main__':
model = MyNet()
# print(model)
# 建议将模型转成 eval 模式
model.eval()
# ONNX模型输出路径
output_path = './MyNet.onnx'
# 导出为ONNX模型
model_convert_onnx(model, output_path)
print("model convert onnx finsh.")
2 进地平线提供的docker转换试试
以OE2.4.2为例,老版本没试过,不太清楚
-
进docker
sh run_docker.sh /data -
yaml文件:config.yaml
模型转化相关的参数
model_parameters:
Onnx浮点网络数据模型文件
onnx_model: ‘./MyNet.onnx’
适用BPU架构
march: “bernoulli2”
模型转换输出的结果的存放目录
working_dir: ‘model_output’
模型转换输出的用于上板执行的模型文件的名称前缀
output_model_file_prefix: ‘MyNet’
模型输入相关参数, 若输入多个节点, 则应使用’;'进行分隔, 使用默认缺省设置则写None
input_parameters:
模型输入的节点名称, 此名称应与模型文件中的名称一致, 否则会报错, 不填则会使用模型文件中的节点名称
input_name: “input1;input2”
网络实际执行时,输入给网络的数据格式,包括 nv12/rgb/bgr/yuv444/gray/featuremap
input_type_rt: ‘featuremap;featuremap’
网络实际执行时输入的数据排布, 可选值为 NHWC/NCHW
input_layout_rt: ‘NHWC;NHWC’
网络训练时输入的数据格式,可选的值为rgb/bgr/gray/featuremap/yuv444
input_type_train: ‘featuremap;featuremap’
网络训练时输入的数据排布, 可选值为 NHWC/NCHW
input_layout_train: ‘NHWC;NHWC’
网络输入的预处理方法,主要有以下几种:
no_preprocess 不做任何操作
norm_type: ‘no_preprocess;no_preprocess’
模型量化相关参数
calibration_parameters:
calibration_type: ‘skip’ # 不涉及校准数据编译器相关参数
compiler_parameters:
编译策略,支持bandwidth和latency两种优化模式
compile_mode: ‘latency’
优化等级可选范围为O0~O3
optimize_level: ‘O0’
-
使用命令转换
hb_mapper makertbin --model-type onnx --config config.yaml
哦吼,支持!
看到这儿,给点个赞呀!!!
