es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Error de YOLOv5 OpenCV: (-215:Error de aserción) mientras se utiliza .onnx

Acabo de crear un modelo yolov5 y lo exporté en formato onnx para que sea utilizable con opencv, pero sigo obteniendo el siguiente error:

[ERROR:0] global D:\a\opencv-python\opencv-python\opencv\modules\dnn\src\dnn.cpp (3554) cv::dnn::dnn4v20211004::Net::Impl::getLayerShapesRecursively OPENCV/DNN: [Reshape]:(466): getMemoryShapes() lanza una excepción. entradas=1 salidas=1/1 blobs=0
[ERROR:0] global D:\a\opencv-python\opencv-python\opencv\modules\dnn\src\dnn.cpp (3557) cv::dnn::dnn4
v20211004::Net::Impl::getLayerShapesRecursively entrada[0] = [ 1 24 52 52 ]
[ERROR:0] global D:\a\opencv-python\opencv-python\opencv\modules\dnn\src\dnn.cpp (3561) cv::dnn::dnn4v20211004::Net::Impl::getLayerShapesRecursively salida[0] = [ ]
[ERROR:0] global D:\a\opencv-python\opencv-python\opencv\modules\dnn\src\dnn.cpp (3567) cv::dnn::dnn4
v20211004::Net::Impl::getLayerShapesRecursively Mensaje de excepción: OpenCV(4.5.4) D:\a\opencv-python\opencv-python\opencv\modules\dnn\src\layers\reshape_layer.cpp:106: error: (-215:La comprobación fallida) total(srcShape, srcRange.start, srcRange.end) == maskTotal en la función ‘cv::dnn::computeShapeByReshapeMask’

Aquí está el código:

onnx_model = onnx.load('best.onnx')
onnx.checker.check_model(onnx_model)
net = cv.dnn.readNetFromONNX('best.onnx')


classes = []

with open("coco-dataset.labels", "r") as f:
    classes = [line.strip() for line in f.readlines()]

layerNames = net.getLayerNames()
outputLayers=[]
for i in net.getUnconnectedOutLayers():
    outputLayers.append(layerNames[i-1])




bounding_box = {'top': 0, 'left': 0, 'width': 1920, 'height': 1080}
sct = mss()

while True:
    screenShot = sct.grab(bounding_box)
    img_np = np.array(screenShot)
    frame = cv.cvtColor(img_np, cv.COLOR_RGBA2RGB)
    frame_id += 1
    height, width, channels= frame.shape


    blob = cv.dnn.blobFromImage(frame, 0.0039216, (416, 416), (0, 0, 0), True, crop=False)


    cv.imshow("Image", frame)

    net.setInput(blob)

(AQUÍ ESTÁ LA LÍNEA DEL ERROR)

    outs = net.forward(outputLayers)

No estoy seguro si es solo mi comprensión de onnx, o si hay una solución que no he comprendido.

¡Cualquier ayuda es apreciada!

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    El mensaje de error sugiere que hay un problema con las dimensiones del dato de entrada a una capa de Redimensionamiento en el modelo YOLOv5. Esto podría ser causado por una forma de entrada incompatible, configuraciones incorrectas durante el entrenamiento o un problema con la exportación ONNX.

    Una posible solución es verificar la forma de entrada de la capa de Redimensionamiento en el modelo YOLOv5 y asegurarse de que coincida con la forma de entrada esperada. También puedes intentar actualizar a la última versión de OpenCV y ONNX para ver si eso resuelve el problema.

    Alternativamente, puedes intentar usar un framework de deep learning diferente, como PyTorch o TensorFlow, para cargar y ejecutar el modelo YOLOv5. Estos frameworks tienen sus propias capacidades de exportación ONNX y pueden manejar el modelo de forma más fluida.

    En general, solucionar problemas en modelos de deep learning puede ser desafiante, pero es esencial identificar y abordar los problemas antes de implementar el modelo en un entorno de producción.

Comments are closed.