编译 PyTorch 目标检测模型
备注
单击 此处 下载完整的示例代码
本文介绍如何用 Relay VM 部署 PyTorch 目标检测模型。
首先应安装 PyTorch。此外,还应安装 TorchVision,并将其作为模型合集(model zoo)。
可通过 pip 快速安装:
pip install torch
pip install torchvision
或参考官网:https://pytorch.org/get-started/locally/
PyTorch 版本应该和 TorchVision 版本兼容。
目前 TVM 支持 PyTorch 1.7 和 1.4,其他版本可能不稳定。
import tvm
from tvm import relay
from tvm import relay
from tvm.runtime.vm import VirtualMachine
from tvm.contrib.download import download_testdata
import numpy as np
import cv2
# PyTorch 导入
import torch
import torchvision
从 TorchVision 加载预训练的 MaskRCNN 并进行跟踪
in_size = 300
input_shape = (1, 3, in_size, in_size)
def do_trace(model, inp):
model_trace = torch.jit.trace(model, inp)
model_trace.eval()
return model_trace
def dict_to_tuple(out_dict):
if "masks" in out_dict.keys():
return out_dict["boxes"], out_dict["scores"], out_dict["labels"], out_dict["masks"]
return out_dict["boxes"], out_dict["scores"], out_dict["labels"]
class TraceWrapper(torch.nn.Module):
def __init__(self, model):
super().__init__()
self.model = model
def forward(self, inp):
out = self.model(inp)
return dict_to_tuple(out[0])
model_func = torchvision.models.detection.maskrcnn_resnet50_fpn
model = TraceWrapper(model_func(pretrained=True))
model.eval()
inp = torch.Tensor(np.random.uniform(0.0, 250.0, size=(1, 3, in_size, in_size)))
with torch.no_grad():
out = model(inp)
script_module = do_trace(model, inp)