首页 > 解决方案 > 如何通过 cv2.dnn.readNetFromTorch() 读取 pytorch 模型文件?

问题描述

我可以保存 PyTorch 自定义模型吗?(它可以工作在 1.0 以上的任何 PyTorch 版本)

但是,我无法读取保存的模型。我正在尝试通过 cv2.dnn.readNetFromTorch() 读取它,以便在 Opencv 框架(4.1.0)中使用该模型。

我用不同的方法保存了 PyTorch 模型如下,看看这种差异是否对 cv2.dnn 的读取功能有反应。

        torch.save(model.state_dict(), '/home/aktaseren/people-opencv/pidxx.pt')
        torch.save(model.state_dict(), '/home/aktaseren/people-opencv/pidxx.t7')
        torch.save(model, '/home/aktaseren/people-opencv/pidxx.t7')
        torch.save(model, '/home/aktaseren/people-opencv/pidxx.pth')

这些保存的文件都不能通过 cv2.dnn.readNetFromTorch() 读取。

在这个问题上,我得到的错误总是相同的,如下所示。

cv2.error: OpenCV(4.1.0) ../modules/dnn/src/torch/torch_importer.cpp:1022: error: (-213:The function/feature is not implemented) Unsupported Lua type in function 'readObject'

你知道如何解决这个问题吗?

标签: opencvdeep-learningpytorchopencv-python

解决方案


OpenCV 文档状态只能以torch7框架格式读取。pytorch没有提及.pt.pth保存。

这篇文章提到 pytorch 不另存为.t7.

.t7 在 Torch7 中使用,在 PyTorch 中未使用。如果我没记错的话,文件扩展名不会改变 torch.save 的行为。

一种方法是将模型导出为onnx,然后在 opencv 中使用readNetFromONNX.


推荐阅读