<jupyter_start><jupyter_text>ONNX to TVM<jupyter_code># 导入onnx，转换成*.so动态库
import onnx
import time
import tvm
import numpy as np
import tvm.relay as relay
from PIL import Image
#开始同样是读取.onnx模型
onnx_model = onnx.load('../models/yolov4.onnx')  # 导入模型

img = Image.open("street.jpg")
img = img.resize((416, 416))
img = np.array(img, dtype=np.float32)
img /= 255.0
img = img.transpose((2, 0, 1))
img = np.expand_dims(img, axis=0)

# 这里首先在PC的CPU上进行测试 所以使用LLVM进行导出
# target = tvm.target.create('llvm') # x86
target = tvm.target.Target('llvm') # x86
# target = tvm.target.arm_cpu("rasp3b") # raspi
# target = 'llvm'


input_name = "input_0"  # 注意这里为之前导出onnx模型中的模型的输入id，这里为0
shape_dict = {input_name: img.shape}
# 利用Relay中的onnx前端读取我们导出的onnx模型
sym, params = relay.frontend.from_onnx(onnx_model, shape_dict)

# 这里利用TVM构建出优化后模型的信息
with relay.build_config(opt_level=2):
    graph, lib, params = relay.build_module.build(sym, target, params=params)
    

    
dtype = 'float32'
from tvm.contrib import graph_runtime

# 下面的函数导出我们需要的动态链接库 地址可以自己定义
print("Output model files")
libpath = "../models/yolov4_pc.so"
lib.export_library(libpath)

# 下面的函数导出我们神经网络的结构，使用json文件保存
graph_json_path = "../models/yolov4_pc.json"
with open(graph_json_path, 'w') as fo:
    fo.write(graph)

# 下面的函数中我们导出神经网络模型的权重参数
param_path = "../models/yolov4_pc.params"
with open(param_path, 'wb') as fo:
    fo.write(relay.save_param_dict(params))
# -------------至此导出模型阶段已经结束--------<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.1456773315180395, 'fraction_numerical': 0.02042205582028591, 'mean_word_length': 4.951417004048583, 'pattern_counts': {'":': 0, '<': 5, '<?xml version=': 0, '>': 5, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '1', 'dir': 'jupyter-structured-clean-dedup', 'id': '439171', 'license': 'MIT', 'n_tokens_mistral': 715, 'n_tokens_neox': 734, 'n_words': 109, 'path': 'deploy/tvm_pc_deploy/ONNX2TVM.ipynb', 'repo_name': 'FelixFu520/yolov4_', 'size': '1469'}