0 環境安裝
在進行AI算法開發之前請參考X3派用戶手冊完成系統安裝及配置,此時X3派上已默認安裝好了地平線Python版本AI推理引擎(hobot_dnn)及其配套依賴環境。hobot_dnn提供了Model 、pyDNNTensor、TensorProperties三個類和load接口。您可通過如下方式獲取hobot_dnn的基本信息:
-------------------------------------------------------------------------------------------------------------------------------
python3
>>> from hobot_dnn import pyeasy_dnn as dnn
>>> dir(dnn)
['Model', 'TensorProperties', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', 'load', 'pyDNNTensor']
-------------------------------------------------------------------------------------------------------------------------------
AI推理引擎的更新可參考如下方式(出于系統安全、穩定性的考慮,建議統一通過APT命令更新X3派板級開發包):
-------------------------------------------------------------------------------------------------------------------------------
#更新package列表
sudo apt update
#升級所有已安裝的軟件包到最新版本
sudo apt full-upgrade
#清除緩存文件(非必須)
sudo apt clean
#重啟設備
sudo reboot
-------------------------------------------------------------------------------------------------------------------------------
1 推理接口介紹
1.1 Model
AI算法模型類,描述模型的名稱,輸入、輸出數據屬性信息,forward 方法用來完成算法的推理。
-------------------------------------------------------------------------------------------------------------------------------
class hobot_dnn.pyeasy_dnn.Model
'''
Parameters:
1、name (string):模型名稱
2、inputs (tuple(hobot_dnn.pyeasy_dnn.pyDNNTensor)):模型的輸入tensor
3、outputs (tuple(hobot_dnn.pyeasy_dnn.pyDNNTensor)):模型的輸出tensor
4、forward (args &args, kwargs &kwargs):模型推理函數接口,輸入模型推理所必要的參數,返回模型推理結果
parameters:
input_tensor:輸入數據
core_id (int):模型推理的core id,可為0,1,2,默認為0表示任意核推理
priority (int):當前模型推理任務的優先級,范圍[0~255],越大優先級越高
'''
-------------------------------------------------------------------------------------------------------------------------------
其中,forward方法的input_tensor支持三種格式輸入:
![poYBAGLUxLSAc49LAAEU1HRQngQ810.png](https://file.elecfans.com/web2/M00/53/E1/poYBAGLUxLSAc49LAAEU1HRQngQ810.png)
forward方法的返回值為模型推理結果,有如下兩種情況:
![pYYBAGLUxLSAIOqJAADJF3iDWRc720.png](https://file.elecfans.com/web2/M00/54/7E/pYYBAGLUxLSAIOqJAADJF3iDWRc720.png)
resizer模型指在模型轉換時input_source設置為“resizer”編譯生成的模型,相關配置方式可參考社區X3 用戶手冊。resizer模型推理時,hobot_dnn會先使用ROI從輸入數據中摳圖后resize到模型輸入大小再送入模型進行推理。
*目前resizer模式暫只支持單輸入的nv12/nv12_bt601模型。
1.2 pyDNNTensor
AI 算法輸入、輸出 tensor 類
-------------------------------------------------------------------------------------------------------------------------------
class hobot_dnn.pyeasy_dnn.pyDNNTensor
'''
Parameters:
1、properties (TensorProperties):tensor的屬性,詳細參見本文1.3節
2、buffer (numpy):tensor中的數據,數據訪問方式同numpy
3、name (string):tensor的名稱
'''
-------------------------------------------------------------------------------------------------------------------------------
1.3 TensorProperties
AI 算法輸入/輸出 tensor 的屬性類
-------------------------------------------------------------------------------------------------------------------------------
class hobot_dnn.pyeasy_dnn.TensorProperties
'''
Parameters:
1、tensor_type (string):tensor的數據類型,如:NV12、BGR、float32等
2、dtype (string):數據的存儲類型,同numpy數據類型,如:int8、uint8、float32等
3、layout (string):數據排布格式,NHWC或者NCHW
4、shape (tuple):數據的shape信息,例如:(1,3,224,224)
'''
-------------------------------------------------------------------------------------------------------------------------------
1.4 load
load接口用于加載模型
-------------------------------------------------------------------------------------------------------------------------------
hobot_dnn.pyeasy_dnn.load(model_file)
'''
接口支持兩種模型加載方式:
1、輸入模型的文件路徑,加載單個模型,或者單個pack模型
model_file = "/userdata/single_model.bin"
models = hobot_dnn.pyeasy_dnn.load(model_file)
2、輸入模型的文件列表,加載多個模型
model_file = ["model1.bin", "model2.bin"]
models = hobot_dnn.pyeasy_dnn.load(model_file)
接口返回hobot_dnn.pyeasy_dnn.Model類型的tuple列表
'''
-------------------------------------------------------------------------------------------------------------------------------
2 快速上手示例
X3派配套AI推理示例默認安裝在/app/ai_inference目錄下,包含如下示例:
-------------------------------------------------------------------------------------------------------------------------------
|-- 01_basic_sample # 從本地讀取圖片并完成mobilenetv1分類模型推理
|-- 02_usb_camera_sample # 從USB camera獲取視頻數據并完成FCOS檢測模型推理
|-- 03_mipi_camera_sample # 從MIPI camera獲取視頻數據并完成FCOS檢測模型推理
|-- 05_web_display_camera_sample # 基于MIPI Camera的FCOS目標檢測及web端展示
|-- 06_yolov3_sample # 從本地讀取圖片并完成Yolov3檢測模型推理
|-- 07_yolov5_sample # 從本地讀取圖片并完成Yolov5檢測模型推理
`-- models
-------------------------------------------------------------------------------------------------------------------------------
本節將以01_basic_sample為例,為大家展示如何使用hobot_dnn完成模型推理。運行以下示例您需要準備編譯好的混合異構模型mobilenetv1_224x224_nv12.bin(存放于/app/ai_inference/models路徑下),以及一張圖片zebra_cls.jpg(存放于01_basic_sample文件夾下)。
-------------------------------------------------------------------------------------------------------------------------------
from hobot_dnn import pyeasy_dnn as dnn
import numpy as np
import cv2
# 查看模型輸入輸出節點的信息
def print_properties(pro):
print("tensor type:", pro.tensor_type)
print("data type:", pro.dtype)
print("layout:", pro.layout)
print("shape:", pro.shape)
# 依據模型input_type_rt決定是否需要進行數據格式轉換(本實例所用模型為nv12輸入)
def bgr2nv12_opencv(image):
height, width = image.shape[0], image.shape[1]
area = height * width
yuv420p = cv2.cvtColor(image, cv2.COLOR_BGR2YUV_I420).reshape((area * 3 // 2,))
y = yuv420p[:area]
uv_planar = yuv420p[area:].reshape((2, area // 4))
uv_packed = uv_planar.transpose((1, 0)).reshape((area // 2,))
nv12 = np.zeros_like(yuv420p)
nv12[:height * width] = y
nv12[height * width:] = uv_packed
return nv12
# 1.加載模型
models = dnn.load('../models/mobilenetv1_224x224_nv12.bin')
# 2.查看模型輸入輸出節點的信息
for input in models[0].inputs:
print_properties(input.properties)
for output in models[0].outputs:
print_properties(output.properties)
# 3.準備輸入數據
# 打開圖片
img_file = cv2.imread('./zebra_cls.jpg')
# 把圖片縮放到模型的輸入尺寸
h, w = models[0].inputs[0].properties.shape[2], models[0].inputs[0].properties.shape[3]
resized_data = cv2.resize(img_file, (w, h), interpolation=cv2.INTER_AREA)
nv12_data = bgr2nv12_opencv(resized_data)
# 4.模型推理
outputs = models[0].forward(nv12_data)
# 5.后處理
np.argmax(outputs[0].buffer)
print("cls id: %d Confidence: %f" % (np.argmax(outputs[0].buffer), outputs[0].buffer[0][np.argmax(outputs[0].buffer)]))
-------------------------------------------------------------------------------------------------------------------------------
運行上述示例,即可在終端查看到如下信息:
![poYBAGLUxLiAW8JhAAZI3C0maJw059.png](https://file.elecfans.com/web2/M00/53/E1/poYBAGLUxLiAW8JhAAZI3C0maJw059.png)
本文轉自地平線開發者社區
原作者:顏值即正義
原鏈接:https://developer.horizon.ai/forumDetail/98129467158916308
-
人工智能
+關注
關注
1796文章
47683瀏覽量
240332
發布評論請先 登錄
相關推薦
AMD將DeepSeek-V3模型集成至Instinct MI300X GPU
生成式AI推理技術、市場與未來
![生成式<b class='flag-5'>AI</b><b class='flag-5'>推理</b>技術、市場與未來](https://file1.elecfans.com/web3/M00/06/96/wKgZPGeNwMCAK2swAAAMwweA25k672.jpg)
OpenAI即將推出o3 mini推理AI模型
華為云 Flexus 云服務器 X 實例的快速入門與配置指南
![華為云 Flexus 云服務器 <b class='flag-5'>X</b> 實例的<b class='flag-5'>快速</b><b class='flag-5'>入門</b>與配置指南](https://file1.elecfans.com//web3/M00/05/BB/wKgZPGeEhG-AHnjhAAEM2AGPJC4938.png)
科大訊飛即將發布訊飛星火深度推理模型X1
Cadence推出Palladium Z3與Protium X3系統
李開復:中國擅長打造經濟實惠的AI推理引擎
TMS320LF240x DSP的C語言和匯編代碼快速入門
![TMS320LF240<b class='flag-5'>x</b> DSP的C語言和匯編代碼<b class='flag-5'>快速</b><b class='flag-5'>入門</b>](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
模擬DAC38RF8x輸入/輸出緩沖器信息的快速入門方法
![模擬DAC38RF8<b class='flag-5'>x</b>輸入/輸出緩沖器信息的<b class='flag-5'>快速</b><b class='flag-5'>入門</b>方法](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
AMD助力HyperAccel開發全新AI推理服務器
![AMD助力HyperAccel開發全新<b class='flag-5'>AI</b><b class='flag-5'>推理</b>服務器](https://file1.elecfans.com/web2/M00/07/9F/wKgaombqLxCAdBaIAAGAxEvslZA335.png)
如何基于OrangePi?AIpro開發AI推理應用
![如何基于OrangePi?AIpro開發<b class='flag-5'>AI</b><b class='flag-5'>推理</b>應用](https://file1.elecfans.com/web2/M00/E6/EC/wKgaomZF0pGAEqvYAAC10ezl7cU777.png)
評論