利用 NVIDIA Isaac SDK 和 NVIDIA 遷移學習工具套件部署即時物件偵測模型

作者 NVIDIA

此文章是說明如何透過 NVIDIA 遷移學習工具套件(TAO Toolkit),使用 Docker 進行物件偵測之系列的第一篇。第二篇,請參閱將 NVIDIA Isaac SDK 物件偵測工作流程與 Docker 和 NVIDIA 遷移學習工具套件搭配使用

圖 1:DetectNetv2 模型的推論定界框在模擬影像(左)和實際輸入影像(右)的合成數據上進行了微調。

NVIDIA Isaac SDK 模組化及易於使用的感知堆疊,持續在加快各種移動式機器人的開發速度。Isaac SDK 2020.1 包含物件偵測支援,適用於必須確定物件身分和位置,以執行智慧作業的機器人,例如為生產和組裝線運送酬載或取料。

建立可靠之感知系統的困難之一為針對特定應用,收集各種經過實際標示的訓練資料。Isaac SDK 方法是利用搭載 NVIDIA GPU 之 Isaac Sim 的模擬能力,產生真實感的合成資料集,並使用於訓練穩健的物件偵測模型。

本文是探索如何使用 Isaac SDK,從模擬產生合成資料集,然後使用 NVIDIA 遷移學習工具套件(TAO Toolkit),利用這些資料微調物件偵測深度神經網路(DNN)。此外,將同時說明 Isaac SDK 加速推論元件,如何在工廠內部的物流環境中進行即時物件偵測。

Isaac SDK 物件偵測工作流程

Isaac SDK 中的物件偵測工作流程是採用 NVIDIA 物件偵測 DNN 架構 DetectNetv2。它可以在 NVIDIA NGC 上取得,以及在真實影像資料集上接受訓練。與 Isaac SDK 整合的工具,讓您能產生自己的合成訓練資料集,並使用 TLT 微調 DNN。之後,可以使用經過微調的 DetectNetv2,在機器人應用程式中進行推論。

圖 2 為下列任務的工作流程概覽:

  • 從 Isaac Sim Unity3D 產生 KITTI 資料集。
  • 微調模型及匯出成 .etlt 格式。
  • 在 .etlt 模型上執行 TensorRT 推論。

這些步驟將在以下各節中說明。若需要更多資訊,請參閱 Object Detection with DetectNetv2

圖 2:Isaac 和 TLT 的物件偵測工作流程。

產生資料集

Isaac Sim 2020.1 能在自訂義的環境、為部署機器人所模擬的目標環境中渲染 3D 物件模型,以產生真實感的合成資料集。使用模擬建立資料的優點,包括:

  • 自動標示-計算每一個物件執行個體的基準真相(ground truth)定界框,並用於建立各種樣本的訓練標籤。
  • 程序化產生大型資料集-以無限組合控制各種模擬層面的隨機化,例如照明、背景、攝影機角度、遮蔽以及影像後處理(如溫度、飽和度、對比、曝光等)。同時可以建立多個訓練情境,以模擬與機器人硬體(如感測器)和預期部署環境對應的情況。
  • 模擬感測器硬體-可以修改視野、焦距等攝影機設定,以配合安裝於將執行推論之機器人上的感測器硬體。

欲瞭解更多與如何建立自訂情境有關的資訊,請參閱 Getting Started with Editor Mode

圖 3 和圖 4 分別為受到許多物品遮蔽的工業推車偵測使用案例,以及多個箱子堆疊的箱子偵測使用案例,此有助於訓練網路在這些情境下的穩健性。Isaac Sim Unity3D 內含推車、箱子和遮蔽/干擾物件等模型。

圖 3:工業推車偵測的四個訓練環境。
圖 4:箱子偵測的三個訓練環境。

在場景開始運作時,Isaac 應用程式會建立與模擬器的通訊,並將傳入的資料樣本(影像和對應的標籤)儲存至磁碟中。使用 Isaac 2020.1,可以利用以下命令,執行儲存資料集的應用程式:

bazel run packages/ml/apps/generate_kitti_dataset

遵循 KITTI 格式產生資料集,此通用方案適用於源自 KITTI 自動駕駛視覺資料集的物件偵測資料集。這是可以用於訓練偵測模型的合成資料集。

微調模型

TAO Toolkit提供之 Docker 映像,可以封裝後續步驟所述的命令。欲瞭解更多與如何啟動 Docker 容器和安裝合成資料集有關的資訊,請參閱 Object Detection with DetectNetv2

在產生合成資料集之後,tlt-dataset-convert 命令會摘錄這些資料,將其分成訓練集和驗證集,並根據配置檔,將資料轉換成 TFRecords 格式

之後,tlt-train 命令會在使用者提供之規格檔案給予的訓練資料輔助下,將神經網路最佳化。使用者可以透過規格檔案提供訓練超參數、模型的輸入影像大小、初始化權重等資料。TLT 提供在真實影像資料集上訓練的預先訓練模型 DetectNetv2,可以使用規格檔案,將模型權重初始化。由於將使用模型推論真實機器人上之實域中的影像,因此會使用此預先訓練模型,將 DetectNetv2 權重初始化。

修剪物件偵測 DNN 可以大幅加快為邊緣裝置(例如 NVIDIA Jetson Nano)而設計之應用程式的推論時間,且在部署高效能機器人應用程式時絕對不可缺少。在兩步驟中使用 TLT 執行修剪:

  • 使用 tlt-prune 降低神經網路的複雜性和大小(因此可能會失去一些準確性)
  • 使用 tlt-train 重新訓練經過修剪的模型,以使資料集重獲準確性。

若需要更多資訊,請參閱 Pruning Models with NVIDIA TAO Toolkit.

之後可將產生的模型匯出,並直接插入 Isaac NVIDIA TensorRT 工作流程,以執行加速推論。tlt-export 命令將模型匯出成 .etlt(「加密 TLT」)格式時,需要解密金鑰才能建立 TensorRT 引擎 .plan 檔案。Isaac SDK 推論應用程式是使用 .etlt 格式之模型以及需要的加密金鑰,並在執行應用程序的階段,建立平台專用的 TensorRT 引擎檔案。

欲瞭解更多與如何訓練和部署經過 TLT 訓練之模型有關的資訊,請參閱使用 NVIDIA 遷移學習工具套件,以自訂的預先訓練模型進行訓練

執行推論

Isaac SDK 為 DetectNetv2 推論提供一個子圖,可以放入任何接收影像輸入的 Isaac 應用程式圖中。DetectNetv2 推論子圖將執行以下任務:

最後,使用專為將 DetectNetv2 輸出張量轉換成 Detections2Proto Isaac 訊息而編寫的 DetectNetDecoder,針對 TensorRT 推論的輸出張量進行解碼。Detections2Proto 訊息包含可傳遞至下游的其他 Isaac 節點,並在 Isaac WebsightServer 中視覺化的定界框、置信度和標籤資訊。

Isaac SDK 包含一個使用此子圖,可以立即與任何經過 TLT 訓練之物件偵測模型一起執行的範例應用程式。使用 Isaac 2020.1,可以利用以下命令,執行針對 Realsense 攝影機影像進行工業推車推論的範例應用程式:

bazel run packages/detect_net/apps:detect_net_inference_app — –mode realsense

欲瞭解更多與執行此範例應用程式之命令有關的資訊,請參閱 TensorRT Inference on TLT models。這些命令適用於其他各種輸入來源:Isaac 紀錄、磁碟映像或模擬。

用於 3D 物件姿態估計的物件偵測推論

Isaac SDK 3D 物件姿態估計工作流程是使用來自 DetectNet 推論子圖的定界框輸出做為目標區域,以計算 3D 姿態。姿態估計對於工業應用而言非常有用,例如:

    • 自主將機器人停靠在運送酬載的工業推車下。
    • 使用機器手臂,將輸送帶上的容器取放至工業棧板上。
圖 5:以機器人的攝影機觀點,在 Jetson AGX Xavier 上進行推論:推車偵測(左);箱子偵測(右)

圖 5 為兩個使用案例之 Isaac 3D 物件姿態估計框架使用的推論定界框。

執行時間效能

Isaac SDK 附有經過修剪的 368×640 單類別 DetectNetv2 網球偵測模型做為範例。此模型具有之 Isaac TensorRT 推論元件,在 FP16 推論模式下的推論時間,如下所示:

平台 推論時間
搭載 NVIDIA RTX2080 Ti 的工作站 1.08 ms
Jetson AGX Xavier(電源模式 0) 10.5 ms
Jetson Nano(電源模式 0) 30.85 ms
表 1:經過修剪之單類別 DetectNetv2 偵測模型的平均 TensorRT 執行時間。

Kaya 物件偵測應用程式 是 Isaac SDK 隨附的範例,可示範如何使用此模型,在安裝於機器人中的感測器上進行推論。該應用程式允許 Kaya(搭載 Jetson Nano 的三輪完整驅動器機器人參考平台)可以使用 Realsense 攝影機輸入以偵測網球。欲瞭解更多與如何訓練自己的模型,並將其部署至 Kaya有關的資訊,請參閱將 NVIDIA Isaac SDK 物件偵測工作流程與 Docker 和 NVIDIA 遷移學習工具套件搭配使用

圖 6:在模擬影像(左)和真實影像(右)上經過模擬訓練之預設網球模型的推論定界框。

結論

本文說明如何使用 Isaac Sim 和 Isaac SDK 產生合成資料集,以及如何將這些資料饋入 TLT,以訓練模型偵測自訂物件,進而實現模擬至真實轉移。

若需要更多資訊,請參閱將 NVIDIA Isaac SDK 物件偵測工作流程與 Docker 和 NVIDIA 遷移學習工具套件搭配使用。該文章提供簡單的方式,讓您以透過相同的工作流程,產生合成資料、微調自訂資料集,以及執行為工業應用部署偵測模型的推論,例如 BMW 的內部物流使用案例

若需要更多資訊,請參閱以下資源:

請在開發人員論壇上提出與產品有關的疑問或意見。