[Implementación del modelo] Cargue y ejecute el modelo de Pytorch con la API de Python de opencv

OpenCV puede llamar a modelos PyTorch. Al convertir el modelo PyTorch al formato ONNX y luego usar el módulo dnn en OpenCV para cargar y ejecutar el modelo.

Aquí hay un código de muestra para cargar y ejecutar un modelo PyTorch usando OpenCV:

import cv2
import numpy as np
import torch
import torchvision.transforms as transforms

# 加载模型
model = torch.load('model.pth')
model.eval()

# 转换模型为ONNX格式
dummy_input = torch.randn(1, 3, 224, 224)
input_names = ['input']
output_names = ['output']
torch.onnx.export(model, dummy_input, 'model.onnx', verbose=True, input_names=input_names, output_names=output_names)

# 加载ONNX模型
net = cv2.dnn.readNetFromONNX('model.onnx')

# 加载图像
image = cv2.imread('image.jpg')

# 图像预处理
transform = transforms.Compose([
    transforms.ToPILImage(),
    transforms.Resize((224, 224)),
    transforms.ToTensor(),
    transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225])
])
image = transform(image).unsqueeze(0)

# 进行推理
blob = cv2.dnn.blobFromTensor(image.numpy(), size=(224, 224))
net.setInput(blob)
output = net.forward()

# 处理输出结果
output = torch.from_numpy(output)
_, preds = torch.max(output, 1)

# 显示结果
print(preds.item())

ilustrar:

  1. Primero, cargue el modelo PyTorch usando la función torch.load.
  2. Para convertir el modelo al formato ONNX, use la función torch.onnx.export para convertir el modelo al formato ONNX y especifique los nombres de la entrada y la salida.
  3. Utilice la función cv2.dnn.readNetFromONNX para cargar el modelo ONNX.
  4. Cargue la imagen, use la función cv2.imread para cargar la imagen.
  5. Preprocese la imagen y use la función transforms.Compose en el módulo torchvision.transforms para convertir la imagen al formato requerido por el modelo.
  6. Para la inferencia, use la función cv2.dnn.blobFromTensor para convertir la imagen al formato requerido por el modelo e introdúzcala en el modelo para la inferencia.
  7. Procese los resultados de salida, use la función torch.from_numpy para convertir la salida del modelo a PyTorch Tensor y use la función torch.max para obtener el resultado de predicción final.
  8. Muestre los resultados y use la función de impresión para generar los resultados de la predicción.

Nota: Al usar OpenCV para cargar y ejecutar el modelo PyTorch, el modelo debe convertirse al formato ONNX. Además, dado que los tipos de datos y el orden de los canales de color utilizados por PyTorch y OpenCV son diferentes, se requiere la conversión del formato de datos y el canal de color.

Supongo que te gusta

Origin blog.csdn.net/qq_43456016/article/details/129410335
Recomendado
Clasificación