在NVIDIA Jetson Zoo中实现高性能推理

描述

  Microsoft 和 NVIDIA 合作为 NVIDIA Jetson 平台构建、验证和发布 ONNX 运行时 Python 包和 Docker 容器,现已在Jetson Zoo上提供。

  今天发布的适用于 Jetson 的 ONNX Runtime 将 ONNX Runtime 的性能和可移植性优势扩展到了 Jetson 边缘 AI 系统,允许来自许多不同框架的模型以更少的功耗更快地运行。您可以转换来自 PyTorch、TensorFlow、Scikit-Learn 和其他模型的模型,以在具有 ONNX 运行时的 Jetson 平台上执行推理。

  ONNX 运行时优化模型以利用设备上的加速器。此功能使用相同的 API 表面为应用程序代码提供跨不同硬件配置的最佳推理吞吐量,以管理和控制推理会话。

  ONNX Runtime 在数亿台设备上运行,每天提供超过 200 亿个推理请求。

  Jetson 上 ONNX 运行时的优势

  Jetson System-on-Modules (SOM) 的全系列产品以小巧的外形提供云原生支持,具有无与伦比的性能和能效,有效地将现代 AI、深度学习和推理的能力引入嵌入式系统边缘。Jetson 为一系列应用提供支持,从人工智能驱动的网络录像机 (NVR) 和高精度制造中的自动光学检测 (AOI) 到自主移动机器人 (AMR)。

  完整的 Jetson 系列由相同的软件堆栈提供支持,并由 NVIDIA JetPack SDK 提供支持,其中包括板级支持包 (BSP)、Linux 操作系统和用于端到端 AI 管道加速的用户级库:

  CUDA

  cudDNN

  用于加速 AI 推理的 TensorRT

  用于加速计算的 cuBlas、cuFFT 等

  用于计算机视觉和图像处理的 Visionworks、OpenCV 和 VPI

  用于相机 ISP 处理、多媒体和传感器处理的库

  此 ONNX 运行时包利用 Jetson 边缘 AI 平台中的集成 GPU,使用 CUDA 和 cuDNN 库为 ONNX 模型提供加速推理。您还可以通过从源代码构建 Python 包来将 ONNX 运行时与 TensorRT 库一起使用。

  专注于开发者

  此版本为您在 Jetson 平台上使用 ONNX 运行时提供了一条简单的集成路径。您可以在应用程序代码中集成 ONNX 运行时,以便在边缘设备上运行 AI 应用程序的推理。

  ML 开发人员和 IoT 解决方案制造商可以使用预构建的 Docker 映像在边缘部署 AI 应用程序或使用独立的 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

  或者,要直接在您的应用程序中使用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 运行时的推理应用程序

  AI


       图 1. 边缘的端到端 IoT 应用程序。

  在NVIDIA Jetson 平台(ARM64 设备)上集成 Azure 与机器学习执行教程向您展示了如何使用 TinyYOLO 模型、Azure IoT Edge 和 ONNX Runtime 在您的 Jetson 设备上开发对象检测应用程序。

  在 Jetson 平台上运行的物联网边缘应用程序在 Azure 云中有一个数字孪生。推理应用程序代码在由集成的 Jetson ONNX 运行时基础映像构建的 Docker 容器中运行。应用程序从相机读取帧,执行对象检测,并将检测到的对象结果发送到云存储。从那里,它们可以被可视化和进一步处理。

  样本异议检测代码

  您可以使用为 Jetson 预先构建的 ONNX Runtime Docker 映像开发自己的应用程序。

  使用 Jetson ONNX 运行时 Docker 映像创建 Dockerfile 并添加应用程序依赖项:

来自 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 构建一个新镜像:

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

创建一个应用程序 main.py 来预处理图像,运行对象检测,并将原始图像与检测到的对象一起保存:

导入简历2
将 numpy 导入为 np
导入 preprocess_yolov4 作为 pre
导入 postprocess_yolov4 作为帖子
从 PIL 导入图像
输入大小 = 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("预处理后的图像形状:",image_data.shape) # 预处理输入的形状
将 onnxruntime 导入为 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("风筝与对象.jpg")

运行应用程序:

nvidia-docker run -it --rm -v $PWD:/workspace/ --workdir=/workspace/ jetson-onnxruntime-yolov4 python3 main.py

  应用程序读取风筝图像并定位图像中的所有对象。您可以尝试使用不同的图像并扩展应用程序以使用视频流,如前面的 Azure IoT 边缘应用程序所示。

  ONNX 运行时 v1.4 更新

  此软件包基于 2020 年 7 月发布的最新ONNX Runtime v1.4 版本。此最新版本提供了许多针对流行的 Transformer 模型(GPT2、BERT)的更新,包括性能优化、新运算符的改进量化支持和优化技术。该版本还通过新硬件加速器的预览版扩展了 ONNX 运行时硬件生态系统的兼容性,包括对 NVIDIA Jetpack 4.4 的 ARM-NN 和 Python 包的支持。

  除了这些加速推理更新之外,1.4 版本继续在加速训练前沿的先前版本中引入的创新基础上构建,包括通过使用 Huggingface GPT-2 模型的新样本扩展操作员支持。

  关于作者

  Natalie Kershaw 是 Microsoft 人工智能框架团队的项目经理,专门研究开发人员体验。她在澳大利亚的阿德莱德大学和悉尼大学学习电气和电子工程以及数学/创意写作。在加入微软之前,她曾在西雅图的 RFID 芯片制造商 Impinj 工作。

  Suhas Sheshadri 是 NVIDIA 的产品经理,专注于 Jetson 软件。他之前曾在 NVIDIA 的自动驾驶团队工作,为 NVIDIA Drive 平台优化系统软件。在空闲时间,Suhas 喜欢阅读有关量子物理学和博弈论的书籍。

  Dustin 是 NVIDIA Jetson 团队的一名开发人员推广员。Dustin 拥有机器人技术和嵌入式系统方面的背景,喜欢在社区中提供帮助并与 Jetson 合作开展项目。您可以在NVIDIA 开发者论坛或GitHub 上找到他。

  审核编辑:郭婷

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分