目錄
- 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()
函式通常用於以下幾步流程:
- 載入模型:首先載入和編譯模型,建立推理請求(
InferRequest
)。 - 設定輸入張量並執行推理:透過
set_input_tensor()
傳遞輸入資料,然後呼叫infer()
或start_async()
執行推理。 - 獲取輸出張量:使用
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()
,可以靈活、快速地訪問推理結果,為資料後處理、視覺化和應用整合提供了重要支援。