markdown TVM部署SSD模型
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了markdown TVM部署SSD模型相关的知识,希望对你有一定的参考价值。
# 部署SSD模型
我们使用GluonCV预训练SSD模型和转换成Relay IR中间表示
```python
import tvm
from matplotlib import pyplot as plt
from tvm.relay.testing.config import ctx_list
from tvm import relay
from tvm.contrib import graph_runtime
from tvm.contrib.download import download_testdata
from gluoncv import model_zoo, data, utils
supported_model = [
'ssd_512_resnet50_v1_voc',
'ssd_512_resnet50_v1_coco',
'ssd_512_resnet101_v2_voc',
'ssd_512_mobilenet1.0_voc',
'ssd_512_mobilenet1.0_coco',
]
model_name = supported_model[0]
dshape = (1, 3, 512, 512)
target_list = ctx_list()
# 下载和预处理demo图像
im_fname = download_testdata('https://github.com/dmlc/web-data/blob/master/' +
'gluoncv/detection/street_small.jpg?raw=true',
'street_small.jpg', module='data')
x, img = data.transforms.presets.ssd.load_test(im_fname, short=512)
#转换和编译模型for CPU
block = model_zoo.get_model(model_name, pretrained=True)
def build(target):
net, params = relay.frontend.from_mxnet(block,{"data": dshape})
with relay.build_config(opt_level=3):
graph, lib, params = relay.build(net,target,params=params)
return graph, lib, params
#创建TVM运行时和推理
def run(graph, lib, params, ctx):
#创建TVM运行时
m = graph_runtime.create(graph, lib, ctx)
tvm_input = tvm.nd.array(x.asnumpy(), ctx=ctx)
m.set_input('data', tvm_input)
m.set_input(**params)
#执行
m.run()
#获取输出
class_IDs, scores, bounding_boxs = m.get_output(0), m.get_output(1), m.get_output(2)
return class_IDs, scores, bounding_boxs
for target, ctx in target_list:
graph, lib, params = build(target)
class_IDs, scores, bounding_boxs = run(graph, lib, params, ctx)
#显示结果
ax = utils.viz.plot_bbox(img, bounding_boxs,asnumpy()[0], scores.asnumpy()[0],class_IDs.asnumpy()[0],class_names=block.classes)
plt.show
```
以上是关于markdown TVM部署SSD模型的主要内容,如果未能解决你的问题,请参考以下文章
markdown TVM如何优化GPU卷积
markdown TVM基准实验
markdown TVM调度原语(Schedule Primitives)
markdown TVM使用内联和数学函数
markdown TVM调用外部张量函数
markdown TVM工作流