Openvino set_input_tensor() должен вызываться для функции с ровно одним параметром

1
8

Ошибка выполнения: 'inputs.size() == 1' при установке входного тензора для модели OpenVINO с несколькими входами

Я пытаюсь использовать модель OpenVINO, которая изначально была разработана для PyTorch, и я У меня возникла проблема при настройке входных тензоров.

У меня есть CLIP-подобная модель, которая принимает как изображения, так и текст в качестве входных данных и возвращает несколько выходных тензоров (например, встраивание изображений и встраивание текста). Я использую ov::InferRequest::set_input_tensor для установки входных данных, но продолжаю сталкиваться со следующей ошибкой:

из openvino.runtime import Core, Tensor

def toto(модель, процессор, изображение1, изображение2, изображение3, текст1, текст2, текст3, is_openvino=False): inputs = процессор(text=[text1, text2, text3], images=[image1, image2, image3], return_tensors="pt", дополнение=True)

if is_openvino:
    # Convert image inputs to OpenVINO tensors
    image_inputs = inputs["pixel_values"].numpy()

    # Process image inputs
    image_embeddings = []
    for image in image_inputs:
        image_tensor = Tensor(image)
        infer_request = model.create_infer_request()
        infer_request.set_input_tensor(image_tensor)
        infer_request.infer()
        
        # Assume the first output tensor corresponds to image embeddings
        image_embeddings.append(infer_request.get_output_tensor(0))

    # Convert text inputs to OpenVINO tensors
    text_inputs = inputs["input_ids"].numpy()
    
    # Process text inputs
    text_embeddings = []
    for text in text_inputs:
        text_tensor = Tensor(text)
        infer_request.set_input_tensor(text_tensor)
        infer_request.infer()
        
        # Assume the second output tensor corresponds to text embeddings
        text_embeddings.append(infer_request.get_output_tensor(1))

    # Assuming the embeddings are returned in the correct order
    x1 = image_embeddings[0]
    x2 = image_embeddings[1]
    x3 = image_embeddings[2]
else:
    # For PyTorch model
    outputs = model(**inputs)
    x1 = outputs.image_embeds[0]
    x2 = outputs.image_embeds[1]
    x3 = outputs.image_embeds[2]

sim_x1_x2 = torch.nn.functional.cosine_similarity(torch.tensor(x1), torch.tensor(x2), dim=0)
sim_x1_x3 = torch.nn.functional.cosine_similarity(torch.tensor(x1), torch.tensor(x3), dim=0)

return sim_x1_x2 > sim_x1_x3, I have try to use 3 get_infer_output but failed
Ксения
Вопрос задан25 июня 2024 г.

1 Ответ

Ваш ответ

Загрузить файл.