機(jī)器人技術(shù)正在采用深度學(xué)習(xí)技術(shù)來精確導(dǎo)航室內(nèi)環(huán)境,檢測并跟蹤感興趣的物體,以及在沒有碰撞的情況下進(jìn)行移動。然而,深度學(xué)習(xí)的復(fù)雜性日益增加,使得在嵌入式系統(tǒng)上適應(yīng)這些工作負(fù)載具有挑戰(zhàn)性。雖然您可以在精度和深度學(xué)習(xí)模型大小之間進(jìn)行權(quán)衡,但在大多數(shù)機(jī)器人應(yīng)用程序中,為了滿足實(shí)時(shí)需求而犧牲精度通常會適得其反。
易于使用和部署使得 NVIDIA Jetson 平臺 成為開發(fā)人員、研究人員和制造商制造和部署機(jī)器人(如 JetBot 、 MuSHR 和 MITRaceCar )的合理選擇。在這篇文章中,我們在 Jetson 上提出了用于分類、目標(biāo)檢測和人體姿勢估計(jì)的深度學(xué)習(xí)模型。我們還提供了一個(gè) ROS2 節(jié)點(diǎn),用于在部署中監(jiān)控 Jetson 的各種資源和操作參數(shù)。 ros2 提供了輕量級實(shí)現(xiàn),因?yàn)樗司W(wǎng)橋節(jié)點(diǎn)的依賴性,并在嵌入式系統(tǒng)中提供了各種優(yōu)勢。
我們利用現(xiàn)有的 NVIDIA 框架進(jìn)行深度學(xué)習(xí)模型部署,如 TensorRT ,以提高模型推理性能。我們還集成了 NVIDIA DeepStream SDK 和 ROS 2 ,以便您可以執(zhí)行流聚合和批處理,并部署各種 AI 模型用于分類和對象檢測,包括 ResNet18 、 MobileNetV1 / V2 、 SSD 、 YOLO 、 FasterRCNN 。此外,我們還為世界各地的開發(fā)者基于 Jetson 的流行項(xiàng)目(如 trt_pose 和 jetson_stats )實(shí)現(xiàn) ros2 節(jié)點(diǎn)。最后,我們?yōu)樯厦嫣岬降拿總€(gè)應(yīng)用程序提供了一個(gè) GitHub 存儲庫,包括 ros2 節(jié)點(diǎn)和 Docker 文件 ,這樣您就可以輕松地在 Jetson 平臺上部署節(jié)點(diǎn)。有關(guān)每個(gè)項(xiàng)目的詳細(xì)信息,請參閱以下部分。
用于人體姿態(tài)估計(jì)的 ROS2 節(jié)點(diǎn)
ros2_trt_pose 包是基于 trt_pose 實(shí)現(xiàn)的,它可以在 Jetson 平臺上進(jìn)行姿態(tài)估計(jì)。存儲庫使用 resnet18 和 densenet121 為姿勢估計(jì)提供了兩個(gè)經(jīng)過訓(xùn)練的模型。為了了解人體姿勢,預(yù)訓(xùn)練模型根據(jù) COCO 數(shù)據(jù)集的類別推斷出 17 個(gè)身體部位。
圖 1 ros2 \ u trt _ pose 軟件包的描述和輸出。
以下是 ros2_trt_pose package 的主要功能:
發(fā)布 pose_msgs ,如 count of person 和 person_id 。對于每個(gè) person_id ,它發(fā)布 17 個(gè)身體部位。
提供啟動文件以便于 Rviz2 上的使用和可視化:
圖像消息
視覺標(biāo)記: body_joints , body_skeleton
包含基于 Jetson 的 Docker 映像,便于安裝和使用。
PyTorch 和 TensorRT 的 ROS 2 包
圖 2 。 ros2 trt _分類和 trt _檢測節(jié)點(diǎn)的包描述。
使用 PyTorch 有兩個(gè)用于分類和檢測的包,每個(gè)包都實(shí)現(xiàn)了相應(yīng)的 TRT 版本。這四個(gè)軟件包是使用 ros2 的機(jī)器人專家開始使用 PyTorch 進(jìn)行深度學(xué)習(xí)的良好起點(diǎn)。
TensorRT 已經(jīng)在 torch2trt 的幫助下集成到包中,以加速推斷。它生成一個(gè)運(yùn)行時(shí)引擎,該引擎根據(jù)網(wǎng)絡(luò)架構(gòu)和部署設(shè)備進(jìn)行優(yōu)化。
這些軟件包的主要特點(diǎn)如下:
對于分類,您可以從各種 ImageNet 預(yù)訓(xùn)練模型中進(jìn)行選擇,包括 Resnet18 、 AlexNet 、 squezenet 和 Resnet50 。
對于檢測,目前支持基于 MobileNetV1 的 SSD ,在 COCO 數(shù)據(jù)集上進(jìn)行訓(xùn)練。
相對于直接在 GPU 上執(zhí)行推理的 PyTorch 模型, TRT 包在執(zhí)行推理方面提供了顯著的加速。
推理結(jié)果以視覺圖形的形式公布。
在運(yùn)行該節(jié)點(diǎn)時(shí),還將顯示一個(gè)窗口,其中可視化了推理結(jié)果。
提供了基于 Jetson 的 Docker 映像和啟動文件,以便于使用。
用于 DeepStream SDK 的 ROS 2 節(jié)點(diǎn)
圖 3 ROS 2 DeepStream 發(fā)布服務(wù)器節(jié)點(diǎn)的包說明。
DeepStream SDK 提供了一個(gè)完整的流分析工具包,用于使用多傳感器處理、視頻和圖像理解構(gòu)建端到端基于人工智能的解決方案。它支持流行的對象檢測和分割模型,如最先進(jìn)的 SSD 、 YOLO 、 FasterRCNN 和 MaskRCNN 。
NVIDIA 根據(jù) DeepStream Python Apps 項(xiàng)目提供執(zhí)行兩個(gè)推理任務(wù)的 ROS 2 節(jié)點(diǎn),如下所示:
目標(biāo)檢測: 檢測到四類對象: Vehicle 、 Person 、 RoadSign 和 TwoWheeler 。
屬性分類: 車輛類的對象有三種類型的屬性: Color 、 Make 和 Type 。
這些發(fā)布服務(wù)器節(jié)點(diǎn)從攝像機(jī)或文件接收單個(gè)或多個(gè)視頻流作為輸入。它們執(zhí)行推理,并將檢測和分類的結(jié)果發(fā)布到不同的主題。我們還提供了訂閱這些主題并以 vision_msgs 格式顯示結(jié)果的 ros2 訂戶節(jié)點(diǎn)示例。每個(gè)推理任務(wù)還生成一個(gè)可視化窗口,在檢測到的對象周圍有邊界框和標(biāo)簽。附加的推理任務(wù)和定制模型可以與本項(xiàng)目中提供的 DeepStream 軟件架構(gòu)集成。
在視頻中,底部的控制臺顯示了多流發(fā)布節(jié)點(diǎn)發(fā)布分類輸出的平均速率(以Hz為單位)。
vision_msgs Classification2D 格式的示例分類輸出:
[vision_msgs.msg.ObjectHypothesis(id=’silver’, score=0.7280375957489014), vision_msgs.msg.ObjectHypothesis(id=’toyota’, score=0.7242303490638733), vision_msgs.msg.ObjectHypothesis(id=’sedan’, score=0.6891725063323975)]
ROS 2 Jetson 統(tǒng)計(jì)
ros2_jetson_stats 包是一個(gè)社區(qū)構(gòu)建包,用于監(jiān)視和控制您的 Jetson 設(shè)備。它可以在您的終端上運(yùn)行,并提供一個(gè) Python 包,以便于在 Python 腳本中集成。利用 ros2_jetson_stats 庫,構(gòu)建 ROS 2 診斷消息和服務(wù)。
ros2_jetson_stats 軟件包具有以下 ROS 2 診斷消息:
GPU / CPU 使用百分比
EMC /交換/內(nèi)存狀態(tài)(使用率 % )
SoC 的功率和溫度
現(xiàn)在您可以通過 ROS 2 命令行控制以下內(nèi)容:
( EZX29 和 Speed :
電源型號( nvpmodel )
jetson_clocks
您還可以提供一個(gè)參數(shù)來設(shè)置讀取診斷消息的頻率。
有關(guān)詳細(xì)信息,請參閱 NVIDIA-AI-IOT/ros2_jetson_stats GitHub repo 。
用于 Jetson 的 ROS 2 容器
為了在 Jetson 上輕松運(yùn)行 ROS 2 的不同版本, NVIDIA 發(fā)布了各種 dockerfile ,并為 ROS 2 Eloquent和 Foxy 構(gòu)建了腳本,此外還有 ROS Melodic 和 Noetic 。這些容器提供了在 Jetson 上安裝 ROS 或 ROS 2 并構(gòu)建自己的基于 ROS 的應(yīng)用程序的自動化和可靠的方法。
因?yàn)?Elocquent 和 Melodic 已經(jīng)為 Ubuntu18 。 04 提供了預(yù)構(gòu)建的包,所以這些版本的 ROS 被 Dockerfiles 安裝到容器中。另一方面, Foxy 和 Noetic 是從容器內(nèi)部的源代碼構(gòu)建的,因?yàn)檫@些版本都是為 ubuntu20 。 04 預(yù)構(gòu)建的。對于容器,使用這些版本的 ROS 或 ROS 2 是相同的,不管底層的 OS 發(fā)行版如何。
要構(gòu)建容器,請?jiān)谶\(yùn)行 Jetpack4 。 4 或更新版本的 Jetson 設(shè)備上克隆 repo ,然后啟動 ROS 構(gòu)建腳本 :
$ git clone https://github.com/dusty-nv/jetson-containers $ cd jetson-containers $ 。/scripts/docker_build_ros.sh all # build all: melodic, noetic, eloquent, foxy $ 。/scripts/docker_build_ros.sh melodic # build only melodic $ 。/scripts/docker_build_ros.sh noetic # build only noetic $ 。/scripts/docker_build_ros.sh eloquent # build only eloquent $ 。/scripts/docker_build_ros.sh foxy # build only foxy
此命令創(chuàng)建具有以下標(biāo)記的容器:
ros:melodic-ros-base-l4t-r32.4.4
ros:noetic-ros-base-l4t-r32.4.4
ros:eloquent-ros-base-l4t-r32.4.4
ros:foxy-ros-base-l4t-r32.4.4
例如,要啟動 ROS 2 Foxy 容器,請運(yùn)行以下命令:
$ sudo docker run –runtime nvidia -it –rm –network host ros:foxy-ros-base-l4t-r32.4.4
除了 Jetson 設(shè)備上的其他硬件加速器(如視頻編碼器和解碼器),使用 –runtime nvidia 標(biāo)志會自動啟用容器中的 GPU 直通。要在容器中傳輸 MIPI CSI 攝影機(jī),請包含以下標(biāo)志:
–volume /tmp/argus_socket:/tmp/argus_socket
要在容器中傳輸 V4L2 USB 攝像頭,請?jiān)趩尤萜鲿r(shí)安裝所需的 /dev/video* 設(shè)備:
–device /dev/video0
NVIDIA Omniverse ISAAC 面向 ROS 開發(fā)者的仿真平臺
在 Omniverse NVIDIA 平臺上構(gòu)建的 NVIDIA ISAAC 模擬仿真工具包 比現(xiàn)有的機(jī)器人工作流程帶來了一些有用的改進(jìn):
它利用了 Omniverse 高度精確的物理模擬和逼真的光線跟蹤圖形,直接與業(yè)界領(lǐng)先的物理框架集成,如用于剛體動力學(xué)的 NVIDIA PhysX SDK 。
它重新關(guān)注互操作性、與 NVIDIA ISAAC SDK 的深度集成以及 ROS 的擴(kuò)展。
它很容易擴(kuò)展。通過其基于 Python 的腳本接口,它允許您適應(yīng)自己獨(dú)特的用例。
它是為可部署而構(gòu)建的,其體系結(jié)構(gòu)支持本地工作站上的工作流,并通過云與 NVIDIA NGC 一起工作。
關(guān)于作者
Amey Kulkarni 是 NVIDIA 的開發(fā)技術(shù)工程師,專注于將深度學(xué)習(xí)解決方案有效地部署到邊緣。在 2019 年加入 NVIDIA 之前,他完成了馬里蘭大學(xué)計(jì)算機(jī)工程博士學(xué)位。他的研究興趣是在嵌入式平臺上部署數(shù)字信號處理、計(jì)算機(jī)視覺和深度學(xué)習(xí)系統(tǒng)。
Rishabh Chadha 是 NVIDIA 的嵌入式工程實(shí)習(xí)生—— AI ,他專注于為 NVIDIA Jetson 平臺集成深度學(xué)習(xí)和機(jī)器人技術(shù)框架。他將于 2021 年畢業(yè)于伍斯特理工學(xué)院,獲得機(jī)器人學(xué)碩士學(xué)位。他的興趣主要包括深度學(xué)習(xí)、醫(yī)學(xué)成像和機(jī)器人感知。
Asawaree Bhide 是 NVIDIA 的 AI 嵌入式工程實(shí)習(xí)生,致力于優(yōu)化和部署邊緣設(shè)備上的深度學(xué)習(xí)模型。她目前正在喬治亞理工學(xué)院攻讀計(jì)算機(jī)科學(xué)碩士學(xué)位,她對解決由具體代理自主導(dǎo)航的復(fù)雜感知任務(wù)感興趣。Tomasz Lewicki 是 NVIDIA 的嵌入式工程實(shí)習(xí)生。他擁有圣何塞州立大學(xué)計(jì)算機(jī)工程碩士學(xué)位,華沙工業(yè)大學(xué)華沙工業(yè)大學(xué)機(jī)器人工程學(xué)學(xué)士學(xué)位。他的興趣集中在計(jì)算機(jī)視覺和機(jī)器人應(yīng)用的深度學(xué)習(xí)上。
審核編輯:郭婷
-
機(jī)器人
+關(guān)注
關(guān)注
211文章
28566瀏覽量
207719 -
NVIDIA
+關(guān)注
關(guān)注
14文章
5055瀏覽量
103374 -
深度學(xué)習(xí)
+關(guān)注
關(guān)注
73文章
5510瀏覽量
121347
發(fā)布評論請先 登錄
相關(guān)推薦
評論