OpenVINO(get_output_tensor())

做梦当财神發表於2024-10-30

目錄
  • 1. 函式概述
  • 2. 函式簽名
  • 3. 常見用法
    • 3.1 示例程式碼
  • 4. 詳細說明
  • 5. 注意事項



在OpenVINO中,get_output_tensor()函式用於從推理請求(Inference Request)中獲取模型的輸出張量。在執行推理後,透過get_output_tensor()可以直接訪問模型的輸出資料,以便進一步處理或分析。



1. 函式概述

get_output_tensor() InferRequest 類的一個方法,用來檢索推理完成後的輸出張量。該函式非常重要,因為它允許使用者在推理後直接訪問模型生成的輸出結果。



2. 函式簽名

在Python API中,get_output_tensor() 的函式簽名如下:

output_tensor = infer_request.get_output_tensor(output_index=0)
  • 引數

    • output_index(可選):整數型別,表示需要獲取的輸出張量的索引。預設值是0,表示模型的第一個輸出張量。如果模型有多個輸出埠,可以透過改變索引獲取相應的輸出。
  • 返回值:返回一個 Tensor 物件,代表模型輸出的張量。這個張量可以轉換為numpy陣列,以便於資料處理和進一步操作。



3. 常見用法

get_output_tensor() 函式通常用於以下幾步流程:

  1. 載入模型:首先載入和編譯模型,建立推理請求(InferRequest)。
  2. 設定輸入張量並執行推理:透過set_input_tensor()傳遞輸入資料,然後呼叫infer()start_async()執行推理。
  3. 獲取輸出張量:使用get_output_tensor()方法獲取輸出張量,然後將輸出資料轉換為numpy陣列,方便進一步處理和分析。

3.1 示例程式碼

以下是一個典型的用例程式碼,演示瞭如何透過get_output_tensor()獲取輸出:

import numpy as np
from openvino.runtime import Core

# 初始化OpenVINO核心物件
core = Core()

# 載入模型
model = core.read_model("model.xml")
compiled_model = core.compile_model(model, "CPU")

# 建立推理請求
infer_request = compiled_model.create_infer_request()

# 準備輸入資料
input_image = np.ones((1, 3, 224, 224), dtype=np.float32)

# 設定輸入張量並執行推理
infer_request.set_input_tensor(input_image)
infer_request.infer()

# 獲取輸出張量
output_tensor = infer_request.get_output_tensor(0)
output_data = output_tensor.data  # 訪問張量的資料部分

# 轉換為numpy陣列
output_array = np.array(output_data)
print("輸出結果:", output_array)


4. 詳細說明

  • 多輸出情況:在處理有多個輸出的模型時,可以指定output_index引數來獲取不同的輸出張量。例如,如果模型有兩個輸出,可以使用infer_request.get_output_tensor(0)infer_request.get_output_tensor(1)分別獲取每個輸出張量。
  • 資料型別:Tensor物件的資料型別通常是根據模型輸出層的配置來確定的。透過output_tensor.data可以訪問資料部分,將其轉換為 numpy陣列後,便於進一步處理。
  • 同步與非同步推理:無論是同步推理(infer())還是非同步推理(start_async()wait()),get_output_tensor()都可以使用。在非同步推理中,確保推理完成後再呼叫get_output_tensor(),否則可能會導致資料不完整或錯誤。


5. 注意事項

  • 資料讀取:直接呼叫output_tensor.data可以訪問張量的內容,適合需要快速獲取資料的情況。
  • 效能:get_output_tensor()的開銷較小,但應確保正確的索引和模型輸出設定,以避免不必要的錯誤。

透過get_output_tensor(),可以靈活、快速地訪問推理結果,為資料後處理、視覺化和應用整合提供了重要支援。