Microsoft 和 NVIDIA 合作為 NVIDIA Jetson 平臺構(gòu)建、驗證和發(fā)布 ONNX 運行時 Python 包和 Docker 容器,現(xiàn)已在Jetson Zoo上提供。
今天發(fā)布的適用于 Jetson 的 ONNX Runtime 將 ONNX Runtime 的性能和可移植性優(yōu)勢擴(kuò)展到了 Jetson 邊緣 AI 系統(tǒng),允許來自許多不同框架的模型以更少的功耗更快地運行。您可以轉(zhuǎn)換來自 PyTorch、TensorFlow、Scikit-Learn 和其他模型的模型,以在具有 ONNX 運行時的 Jetson 平臺上執(zhí)行推理。
ONNX 運行時優(yōu)化模型以利用設(shè)備上的加速器。此功能使用相同的 API 表面為應(yīng)用程序代碼提供跨不同硬件配置的最佳推理吞吐量,以管理和控制推理會話。
ONNX Runtime 在數(shù)億臺設(shè)備上運行,每天提供超過 200 億個推理請求。
Jetson 上 ONNX 運行時的優(yōu)勢
Jetson System-on-Modules (SOM) 的全系列產(chǎn)品以小巧的外形提供云原生支持,具有無與倫比的性能和能效,有效地將現(xiàn)代 AI、深度學(xué)習(xí)和推理的能力引入嵌入式系統(tǒng)邊緣。Jetson 為一系列應(yīng)用提供支持,從人工智能驅(qū)動的網(wǎng)絡(luò)錄像機(jī) (NVR) 和高精度制造中的自動光學(xué)檢測 (AOI) 到自主移動機(jī)器人 (AMR)。
完整的 Jetson 系列由相同的軟件堆棧提供支持,并由 NVIDIA JetPack SDK 提供支持,其中包括板級支持包 (BSP)、Linux 操作系統(tǒng)和用于端到端 AI 管道加速的用戶級庫:
CUDA
cudDNN
用于加速 AI 推理的 TensorRT
用于加速計算的 cuBlas、cuFFT 等
用于計算機(jī)視覺和圖像處理的 Visionworks、OpenCV 和 VPI
用于相機(jī) ISP 處理、多媒體和傳感器處理的庫
此 ONNX 運行時包利用 Jetson 邊緣 AI 平臺中的集成 GPU,使用 CUDA 和 cuDNN 庫為 ONNX 模型提供加速推理。您還可以通過從源代碼構(gòu)建 Python 包來將 ONNX 運行時與 TensorRT 庫一起使用。
專注于開發(fā)者
此版本為您在 Jetson 平臺上使用 ONNX 運行時提供了一條簡單的集成路徑。您可以在應(yīng)用程序代碼中集成 ONNX 運行時,以便在邊緣設(shè)備上運行 AI 應(yīng)用程序的推理。
ML 開發(fā)人員和 IoT 解決方案制造商可以使用預(yù)構(gòu)建的 Docker 映像在邊緣部署 AI 應(yīng)用程序或使用獨立的 Python 包。Jetson Zoo包含指向 ONNX 運行時包和示例的指針以供入門。
Microsoft Container Registry 中提供了 Jetpack4.4 上 ONNX Runtime 的 Docker 映像:
docker pull mcr.microsoft.com/azureml/onnxruntime:v.1.4.0-jetpack4.4-l4t-base-r32.4.3
或者,要直接在您的應(yīng)用程序中使用Python 包,請下載并將其安裝在您的 Jetson SOM 上:
wget https://nvidia.box.com/shared/static/8sc6j25orjcpl6vhq3a4ir8v219fglng.whl \ -O onnxruntime_gpu-1.4.0-cp36-cp36m-linux_aarch64.whl pip3 安裝 onnxruntime_gpu-1.4.0-cp36-cp36m-linux_aarch64.whl
在 Jetson 上使用 ONNX 運行時的推理應(yīng)用程序
圖 1. 邊緣的端到端 IoT 應(yīng)用程序。
在NVIDIA Jetson 平臺(ARM64 設(shè)備)上集成 Azure 與機(jī)器學(xué)習(xí)執(zhí)行教程向您展示了如何使用 TinyYOLO 模型、Azure IoT Edge 和 ONNX Runtime 在您的 Jetson 設(shè)備上開發(fā)對象檢測應(yīng)用程序。
在 Jetson 平臺上運行的物聯(lián)網(wǎng)邊緣應(yīng)用程序在 Azure 云中有一個數(shù)字孿生。推理應(yīng)用程序代碼在由集成的 Jetson ONNX 運行時基礎(chǔ)映像構(gòu)建的 Docker 容器中運行。應(yīng)用程序從相機(jī)讀取幀,執(zhí)行對象檢測,并將檢測到的對象結(jié)果發(fā)送到云存儲。從那里,它們可以被可視化和進(jìn)一步處理。
樣本異議檢測代碼
您可以使用為 Jetson 預(yù)先構(gòu)建的 ONNX Runtime Docker 映像開發(fā)自己的應(yīng)用程序。
使用 Jetson ONNX 運行時 Docker 映像創(chuàng)建 Dockerfile 并添加應(yīng)用程序依賴項:
來自 mcr.microsoft.com/azureml/onnxruntime:v.1.4.0-jetpack4.4-l4t-base-r32.4.3 工作目錄。 運行 apt-get update && apt-get install -y python3-pip libprotobuf-dev protobuf-compiler python-scipy RUN python3 -m pip install onnx==1.6.0 easydict matplotlib CMD ["/bin/bash"]
從 Dockerfile 構(gòu)建一個新鏡像:
docker build -t jetson-onnxruntime-yolov4 。
從 ONNX 模型動物園下載 Yolov4 模型、對象檢測錨位置和類名:
wget https://github.com/onnx/models/blob/master/vision/object_detection_segmentation/yolov4/model/yolov4.onnx?raw=true -O yolov4.onnx wget https://raw.githubusercontent.com/onnx/models/master/vision/object_detection_segmentation/yolov4/dependencies/yolov4_anchors.txt wget https://raw.githubusercontent.com/natke/onnxruntime-jetson/master/coco.names
下載 Yolov4 對象檢測前后處理代碼:
wget https://raw.githubusercontent.com/natke/onnxruntime-jetson/master/preprocess_yolov4.py wget https://raw.githubusercontent.com/natke/onnxruntime-jetson/master/postprocess_yolov4.py
下載一個或多個測試圖像:
wget https://raw.githubusercontent.com/SoloSynth1/tensorflow-yolov4/master/data/kite.jpg
創(chuàng)建一個應(yīng)用程序 main.py 來預(yù)處理圖像,運行對象檢測,并將原始圖像與檢測到的對象一起保存:
導(dǎo)入簡歷2 將 numpy 導(dǎo)入為 np 導(dǎo)入 preprocess_yolov4 作為 pre 導(dǎo)入 postprocess_yolov4 作為帖子 從 PIL 導(dǎo)入圖像 輸入大小 = 416 original_image = cv2.imread("kite.jpg") original_image = cv2.cvtColor(original_image, cv2.COLOR_BGR2RGB) original_image_size = original_image.shape[:2] image_data = pre.image_preprocess(np.copy(original_image), [input_size, input_size]) image_data = image_data[np.newaxis, ...].astype(np.float32) print("預(yù)處理后的圖像形狀:",image_data.shape) # 預(yù)處理輸入的形狀 將 onnxruntime 導(dǎo)入為 rt sess = rt.InferenceSession("yolov4.onnx") output_name = sess.get_outputs()[0].name input_name = sess.get_inputs()[0].name detections = sess.run([output_name], {input_name: image_data})[0] print("輸出形狀:", detections.shape) image = post.image_postprocess(original_image,input_size,檢測) 圖像 = Image.fromarray(圖像) image.save("風(fēng)箏與對象.jpg")
運行應(yīng)用程序:
nvidia-docker run -it --rm -v $PWD:/workspace/ --workdir=/workspace/ jetson-onnxruntime-yolov4 python3 main.py
應(yīng)用程序讀取風(fēng)箏圖像并定位圖像中的所有對象。您可以嘗試使用不同的圖像并擴(kuò)展應(yīng)用程序以使用視頻流,如前面的 Azure IoT 邊緣應(yīng)用程序所示。
ONNX 運行時 v1.4 更新
此軟件包基于 2020 年 7 月發(fā)布的最新ONNX Runtime v1.4 版本。此最新版本提供了許多針對流行的 Transformer 模型(GPT2、BERT)的更新,包括性能優(yōu)化、新運算符的改進(jìn)量化支持和優(yōu)化技術(shù)。該版本還通過新硬件加速器的預(yù)覽版擴(kuò)展了 ONNX 運行時硬件生態(tài)系統(tǒng)的兼容性,包括對 NVIDIA Jetpack 4.4 的 ARM-NN 和 Python 包的支持。
除了這些加速推理更新之外,1.4 版本繼續(xù)在加速訓(xùn)練前沿的先前版本中引入的創(chuàng)新基礎(chǔ)上構(gòu)建,包括通過使用 Huggingface GPT-2 模型的新樣本擴(kuò)展操作員支持。
關(guān)于作者
Natalie Kershaw 是 Microsoft 人工智能框架團(tuán)隊的項目經(jīng)理,專門研究開發(fā)人員體驗。她在澳大利亞的阿德萊德大學(xué)和悉尼大學(xué)學(xué)習(xí)電氣和電子工程以及數(shù)學(xué)/創(chuàng)意寫作。在加入微軟之前,她曾在西雅圖的 RFID 芯片制造商 Impinj 工作。
Suhas Sheshadri 是 NVIDIA 的產(chǎn)品經(jīng)理,專注于 Jetson 軟件。他之前曾在 NVIDIA 的自動駕駛團(tuán)隊工作,為 NVIDIA Drive 平臺優(yōu)化系統(tǒng)軟件。在空閑時間,Suhas 喜歡閱讀有關(guān)量子物理學(xué)和博弈論的書籍。
Dustin 是 NVIDIA Jetson 團(tuán)隊的一名開發(fā)人員推廣員。Dustin 擁有機(jī)器人技術(shù)和嵌入式系統(tǒng)方面的背景,喜歡在社區(qū)中提供幫助并與 Jetson 合作開展項目。您可以在NVIDIA 開發(fā)者論壇或GitHub 上找到他。
審核編輯:郭婷
-
傳感器
+關(guān)注
關(guān)注
2552文章
51307瀏覽量
755268 -
AI
+關(guān)注
關(guān)注
87文章
31316瀏覽量
269659 -
python
+關(guān)注
關(guān)注
56文章
4802瀏覽量
84885
發(fā)布評論請先 登錄
相關(guān)推薦
評論