Проблемы с реализацией YOLO V10 на OpenVINO

Вопрос или проблема

Я использую YOLO v10 и хочу работать с openvino, но когда я пытаюсь сделать предсказание, возникает следующая ошибка:

Не удалось установить тензор. Проверка ‘is_dynamic || port.get_shape() == tensor->get_shape()’ провалилась в src\inference\src\dev\isync_infer_request.cpp:280:

Вот код:
код

Я использую openvino для ускорения vistess вычислений модели, но возникает такая же проблема:

Не удалось установить тензор. Проверка ‘is_dynamic || port.get_shape() == tensor->get_shape()’ провалилась в src\inference\src\dev\isync_infer_request.cpp:280:

Ответ или решение

Проблема, с которой вы столкнулись при использовании YOLO v10 с OpenVINO, связана с несовпадением формы (shape) тензоров, которые вы пытаетесь передать в модель. Сообщение об ошибке указывает на то, что экземпляр данных, который вы передаете в модель, не соответствует ожидаемой форме.

Вот несколько шагов, которые могут помочь вам решить проблему:

  1. Проверьте форму входного тензора: Убедитесь, что форма вашего входного тензора совпадает с ожидаемой формой модели YOLO v10. Вы можете получить ожидаемую форму, проверив сетевую архитектуру модели, или используя инструменты OpenVINO, такие как Model Optimizer или Intermediate Representation (IR) файлов.

  2. Измените размер изображения: Перед тем как подавать изображение на вход модели, убедитесь, что вы изменили его размер в соответствии с требованиями YOLO. Обычно для моделей YOLO требуется ввод фиксированного размера, например, 640×640 пикселей. Используйте функции изменения размера изображений при предобработке.

    import cv2
    image = cv2.resize(original_image, (640, 640))
  3. Проверка динамических входных портов: Если ваша модель использует динамические размеры входных портов, убедитесь, что при создании запросов InferRequest вы правильно обрабатываете эти размеры. В некоторых случаях может потребоваться знать, какие размеры модель поддерживает.

  4. Предобработка данных: Убедитесь, что вы правильно выполняете предобработку данных (нормализация, преобразование формата, порядок каналов и т.д.) перед передачей в InferRequest. Обычно требуется преобразовывать данные в формат [N, C, H, W], где N – размер батча, C – количество каналов, H – высота и W – ширина.

  5. Отладка: Проверьте, какие именно входные данные вы передаете в модель в момент возникновения ошибки. Вы можете использовать методы логирования или отладки, чтобы убедиться, что данные правильные.

  6. Обновление библиотек: Убедитесь, что вы используете последнюю версию OpenVINO. Иногда проблемы могут возникать из-за несовместимости с устаревшими библиотеками.

  7. Проверка документации: Обратите внимание на официальную документацию OpenVINO и YOLO v10, так как там могут быть указаны специфические требования, которые вам необходимо соблюдать при работе с этими инструментами.

Пример измененного фрагмента кода для выполнения предобработки и проверки размера тензора:

from openvino.inference_engine import IECore
import cv2
import numpy as np

# Загрузка модели
ie = IECore()
net = ie.read_network(model='yolo_v10.xml', weights='yolo_v10.bin')
input_blob = next(iter(net.input_info))
output_blob = next(iter(net.outputs))
n, c, h, w = net.input_info[input_blob].input_data.shape

# Предобработка изображения
image = cv2.imread('image.jpg')
image = cv2.resize(image, (w, h))
image = image.transpose((2, 0, 1))  # HWC to CHW
image = image[np.newaxis, :]  # Add batch dimension

# Запрос на предсказание
exec_net = ie.load_network(network=net, device_name='CPU')
results = exec_net.infer(inputs={input_blob: image})

Если после выполнения всех указанных шагов проблема сохраняется, возможно, стоит обратиться к сообществу OpenVINO или форумам, посвященным нейронным сетям, с подробным описанием вашей проблемы.

Оцените материал
Добавить комментарий

Капча загружается...