Jetson Orin Nano 邊緣運算電腦執行 Jetson Inference 深度學習影像函式庫

前言

本文將說明如何在 Jetson Orin Nano 上安裝  Jetson Inference 這套即時影像深度網路函式庫,使用了 TensorRT 來在 GPU 上執行各種最佳化後的神經網路模型,訓練模型則是使用 PyTorch 框架。到了 Jetson Orin Nano 在 GTC 2023 發表之後,Jetson Inference 也正式支援了 JetPack 5。本文使用 Jetson Orin Nano 8GB 來安裝並執行相關範例。

Jetson Orin Nano 開箱文請看這裡:[最新 NVIDIA Jetson Orin Nano 開發者套件,入門級 AI 的新基線]

本文

Jetson Inference 即時影像深度網路函式庫

Jetson Inference 是搭配 NVIDIA 自家 Jetson 平台的即時影像深度網路函式庫,使用了 TensorRT 來在 GPU 上執行各種最佳化後的神經網路模型,訓練模型則是使用 PyTorch 框架。CAVEDU 自從 2019 年 Jetson Nano 發布以來,在執行各種課程上真心覺得 Jetson Inference 相當方便好用,TensorRT 針對資源有限的邊緣運算裝置也進行了各種效能最佳化(榨乾),希望能有更好的推論速度。

從最初的影像分類、物件偵測與影像分割三大範例開始,陸陸續續擴充到了七個應用,說明如下,詳細資料如使用哪款資料及訓練,提供那些預訓練模型,請由以下連結點入即可:

本文將說明 Jetson Inference 執行於 Jetson Orin Nano 的安裝方式以及以下七個應用的實際執行畫面。如果您想回顧 Jetson Nano 如何安裝 Jetson Inference 請參考:[深入使用NVIDIA Jetson Inference機器學習專案 – 電腦視覺圖片分類任務]

  1. imageNet:影像分類,訓練資料集使用 ImageNet,模型預設為 googlenet,並有其他 ResNet 多款模型可使用
  2. detectNet:物件偵測,模型預設為 SSD-Mobilenet-v2 (使用 COCO 資料集),並有其他 PeopleNet、DashCamNet 多款模型可使用
  3. segNet:影像語意分割,提供了 Cityscapes, DeepScene 與 Pascal VOC 等多個資料集的預訓練模型。
  4. poseNet:姿勢估計,可用於偵測骨架關節點,模型預設為 Pose-ResNet18-Body
  5. actionNet:辨識畫面中的動作類別,屬於分類應用。
  6. 移除背景:使用 U²-Net 來移除背景,也可置換其他背景圖片。
  7. 深度預估:從一般 RGB 影像來推估相對深度的技術。

Jetson Orin Nano benchamark

根據 NVIDIA 原廠所提供的效能比較,以下兩圖可看到各 Jetson 平台針對諸多預訓練網路的推論速度,其中 Jetson Orin Nano 又分成 4GB 與 8GB 兩個版本。

根據原廠文件,Jetson Orin Nano 開發者套件以 80 倍的性能提高了入門級 AI 開發的門檻,可執行任何類型的現代 AI 模型,包括 transformer 和高級機器人模型。與上一代 Jetson Nano 相比,它不僅大幅提升了 AI 性能,而且 Jetson Orin Nano 還提供了 5.4 倍的 CUDA 計算、6.6 倍的 CPU 性能和 50 倍的每瓦性能,為新一代入門級 AI 機器人、智慧無人機與智慧視覺系統奠定新基準。

安裝 Jetson Inference

提供了 Docker Container從頭建置 等兩種安裝方式,請根據您的需求來進行。本文使用的方法為後者。安裝完成之後,即可在 ~/jetson-inference 目錄下直接執行各個範例。請看以下分段說明。

執行 – 影像分類

最基本的應用,將指定影像或影片的每一個 frame 分類到指定類別。訓練資料集使用 ImageNet,模型預設為 googlenet,並有其他 ResNet 多款模型可使用。

python3 imagenet.py images/IMG_2310.JPG images/test/cat_imagenet.jpg

執行 – 物件偵測

取得物體的邊界框,並可在畫面中偵測多個不同類型的物體。模型預設為 SSD-Mobilenet-v2 (使用 COCO 資料集),並有其他 PeopleNet、DashCamNet 多款模型可使用

python3 detectnet.py images/IMG_0039.JPG images/test/IMG_0039_detectnet.jpg

執行 – 語意分割

語義分割(Semantic Segmentation)是以影像識別技術為基礎,不同之處在於是對每個像素進行分類,而非單張圖像這種方法特別適用於環境感知,能夠對場景中的許多不同潛在對象(包括場景前景和背景)進行密集的像素級分類。

python3 segnet.py images/IMG_0039.JPG images/test/IMG_0039_segnet.jpg

執行 Pose Estimation

姿勢估計包括定位形成人體骨架的各種身體部位(即關鍵點)。姿勢估計有多種應用,包括手勢識別、AR / VR、HMI 和姿勢/步態矯正,模型預設為 Pose-ResNet18-Body

python3 posenet.py images/test_01.jpg images/test/test01_posenet.jpg

執行 – 動作辨識

動作識別是對於一連串影片畫格中所出現的活動、行為或手勢進行分類。所使用的 DNN 通常使用影像分類股幹並搭配時間維度。例如,基於 ResNet18 的預訓練模型會使用長度為 16 frame  的時窗。

實測時,單張照片的分類效果不太好,可能是因為上述的 time window 關係。

python3 posenet.py images/test01.jpg images/test/test01_posenet.jpg

執行 – 背景移除與置換

本技術(又稱為背景減去突出物體檢測)會產生一個遮罩來分離影像前景與背景。您可以使用它來替換或模糊背景(例如視訊會議軟體),或者它可以做為其他視覺網路的預處理段,例如物件檢測/追蹤或運動檢測。

python3 backgroundnet.py images/IMG_2310.JPG images/test/IMG_2310_mask.png //移除背景

python3 backgroundnet.py images/IMG_2310.JPG images/test/IMG_2310_replace.png --replace=images/snow.jpg //使用指定圖檔置換背景
由左到右為原圖、移除背景、置換背景為其他張圖

用發發的照片執行看看,效果也很不錯

執行 – 單眼深度(Mono depth)

深度感測對於地圖繪製、導航和障礙物檢測等任務非常有用,但過去通常需要使用立體相機或RGB-D相機 (例如 ZED 或 Intel RealSense)。現在有了可以從單張影像中推斷相對深度的神經網路(稱為單眼深度),請參考 MIT FastDepth 論文中的全卷積網絡(FCN)實現方法

python3 depthnet.py images/test_02.jpg images/test/test_02_depthnet.jpg

執行 – 即時影像分類與物件偵測

將輸入來源從單一影像改為攝影機來進行即時推論的話,影像分類可到 200 FPS,物件偵測則可到85 FPS。

即時影像分類
即時物件偵測
即時影像分割

結語

本文說明如何在最新的 Jetson Orin Nano 8GB 安裝 Jetson Inference 影像函式庫,並執行各個範例給各位參考。

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *