将ONNX模型转换为PyTorch witch onnx2torch库会产生巨大的差异

x6h2sr28  于 2023-04-21  发布在  其他
关注(0)|答案(1)|浏览(215)

我发现了一个用于眼睛图像中瞳孔识别的ONNX模型(已经训练过),它工作得很好。但我想将其用作PyTorch模型,因此我尝试将其从ONNX转换为PyTorch。如以下代码所示,我使用的是https://github.com/Talmaj/onnx2pytorch上提供的onnx2pytorch库中的convertModel函数

from onnx2pytorch import ConvertModel
onnx_model = onnx.load("onnx_model.onnx")
pytorch_model = ConvertModel(onnx_model)

然后,我尝试在同一输入图像上运行两个模型。

# load input image and some preprocessing
img = cv2.cvtColor(cv2.imread("images/eye_frame_00494.png"), cv2.COLOR_BGR2GRAY)
img = cv2.resize(img, (320, 240), interpolation=cv2.INTER_LINEAR)
clahe = cv2.createCLAHE(clipLimit=2)
img = clahe.apply(img)

img2 = img.reshape(1, 240, 320, 1)
img2 = img2 / 255
test_img_input = np.zeros((1, 240, 320, 3), dtype=np.float32)
test_img_input[:, :, :, :] = img2

# convert to tensor for pytorch model
input_img = torch.tensor(test_img_input)

# predictions
result = session.run([output_name], {input_name: test_img_input})
# there is some lines above to define *output_name *and *input_name *properly
output = pytorch_model(input_img)

但是,当我绘制我感兴趣的通道的结果时,它给出了2个不同的预测(如下图所示)。
Differences in predictions
我试了一些其他的图像,总是有一个差异,有时很小,有时很有问题。有人能帮助我解释这种差异可能来自哪里,以及如何纠正它(或至少降低它)。

x4shl7ld

x4shl7ld1#

编辑:只是添加行

pytorch_model.eval()

让我得到了完全相同的预测

相关问题