无法将PyTorch权重(.pth文件)转换为ONNX

时间:2020-02-29 17:05:12

标签: pytorch resnet onnx

我正在尝试结合在线阅读的不同教程。我的目标是拥有一个人员追踪器,并将其与不同的预训练模型一起使用。我在此处将代码用于跟踪器/计数器:https://www.pyimagesearch.com/2018/08/13/opencv-people-counter/

他们使用MobileNetSSD的Caffe模型。我想使用ResNet,Yolov3和基本上任何可能值得尝试以获得更好的检测结果的模型。因此,我找到了AlignedReId和一个模型为https://github.com/huanghoujing/AlignedReID-Re-Production-Pytorch

的存储库

我尝试使用cv2.dnn.readNetFromTorch(model_weight.pth)直接从AlignedReId存储库中的ResNet权重中读取,但是我发现OpenCV不直接支持PyTorch,因此我必须转换模型(ONNX是最常见的解决方案) 。问题是我不知道该怎么做,我陷入了必须从本教程中调用ModelClass的步骤:https://michhar.github.io/convert-pytorch-onnx/

我正在使用pytorch-cpu,就我而言,它类似于:

import torch
import torch.onnx

# A model class instance (class not shown)
model = ResNet50()

# Load the weights from a file (.pth usually)
state_dict = torch.load('model_weight.pth')

# Load the weights now into a model net architecture defined by our class
model.load_state_dict(state_dict)

# Create the right input shape (e.g. for an image)
dummy_input = torch.randn(1, 3, 256, 128)

torch.onnx.export(model, dummy_input, "onnx_resnet50.onnx")

但是我不知道如何从AlignedReId存储库中获取该ResNet50类并使用它。另外,在torch.randn(1, 3, 256, 128)部分中,我使用了这些数字,因为在AlignedReId存储库中,它们声明它们使用的是图像大小,但是我不确定sample_batch_size是否为1(我发现许多数字有关将pth模型转换为onnx文件的问题。

如何将AlignedReId预训练模型转换为ONNX,以便通过OpenCV读取它并将其用于第一个链接中的人员跟踪器?

0 个答案:

没有答案