在訓練那些部署在自主移動機器人(AMR)上的感知 AI 模型時,合成數據可以發揮關鍵作用。這一過程在制造業中變得越來越重要。有關使用合成數據生成預訓練模型,用于檢測倉庫中托盤的示例,可參見使用《OpenUSD 和合成數據開發托盤檢測模型》一文:https://developer.nvidia.com/blog/developing-a-pallet-detection-model-using-openusd-and-synthetic-data/
本文將探討如何訓練 AMR 使用合成數據來檢測倉庫中的托盤千斤頂。托盤千斤頂通常用于抬起和運輸重型托盤。在擁擠的倉庫中,AMR 進行檢測并避免與托盤千斤頂相撞是很重要的。
為了實現這一目標,有必要在不同的光照條件和遮擋下使用大量不同的數據集來訓練 AI 模型。真實的數據很少能捕捉到潛在環境的全部范圍,而合成數據生成(SDG)是由 3D 仿真生成的注釋數據,使開發人員能夠克服數據差距并引導模型訓練過程。
視頻 1:使用 NVIDIA Omniverse Replicator
本次用例將通過處理數據來踐行以數據為中心的方法,而不是通過更改模型參數去適應數據。這一過程首先使用 NVIDIA Isaac Sim 中的 NVIDIA Omniverse Replicator 生成合成數據,隨后使用 NVIDIA TAO Toolkit 中的合成數據對模型進行訓練,最后,將模型在真實數據上的性能可視化,并修改參數以生成更好的合成數據,達到期望的性能水平。
Omniverse Replicator 是 NVIDIA Omniverse 的核心擴展,是一個使個人和團隊能夠基于通用場景描述(OpenUSD)開發工作流的計算平臺。Replicator 使開發者能夠構建定制的合成數據生成管線,以生成數據來引導計算機視覺模型的訓練。
迭代合成數據以提高模型性能
以下解釋了本團隊如何迭代合成數據,來提高目標檢測模型的實際性能,并通過兼容 Omniverse Replicator API 的 Python 腳本詳細介紹了這些步驟。
在每次迭代時,我們增量改變模型中的各種參數,并生成新的訓練數據集,然后用實際數據驗證模型的性能。我們持續這一過程,直到能夠縮小仿真與現實之間的差距。
對象或場景參數變化的過程被稱為域隨機化。您可以隨機化許多參數來快速生成新數據用于模型訓練,這些參數包括位置、顏色、紋理、背景、物體和場景的光照。
OpenUSD 是一個可擴展的框架,一種 3D 場景描述技術,也是 NVIDIA Omniverse 的基礎,讓試驗一個場景中的不同參數變得很容易。參數可以在單獨的層中修改和測試,用戶可以在這些層之上創建非破壞性編輯。
準備
在起步階段,我們需要一個安裝有 NVIDIA RTX GPU 和最新版本的 NVIDIA Isaac Sim 的系統。Isaac Sim 是一個可擴展的機器人仿真應用程序,其利用 Omniverse Replicator 的核心功能生成合成數據。有關安裝和配置的詳細信息,請參見文檔:https://docs.omniverse.nvidia.com/isaacsim/latest/installation/requirements.html
當 Isaac Sim 啟動并運行時,我們可以從 GitHub 上的 NVIDIA-AI-IOT/synthetic_data_generation_training_workflow 下載所有資產。
第一次迭代:改變顏色和攝像頭位置
在第一次迭代中,我們改變了托盤千斤頂的顏色和姿勢,以及攝像頭的姿勢。可以按照以下步驟在自己的會話中復制此場景。
首先加載舞臺(Stage):
ENV_URL = "/Isaac/Environments/Simple_Warehouse/warehouse.usd"
open_stage(prefix_with_isaac_asset_server(ENV_URL))
然后添加托盤千斤頂和攝像頭到場景中。托盤千斤頂可以從 SimReady 資產庫中加載。
PALLETJACKS = ["http://omniverse-content-production.s3-us-west-2.amazonaws.com/Assets/DigitalTwin/Assets/Warehouse/Equipment/Pallet_Trucks/Scale_A/PalletTruckScale_A01_PR_NVD_01.usd",
"http://omniverse-content-production.s3-us-west-2.amazonaws.com/Assets/DigitalTwin/Assets/Warehouse/Equipment/Pallet_Trucks/Heavy_Duty_A/HeavyDutyPalletTruck_A01_PR_NVD_01.usd",
"http://omniverse-content-production.s3-us-west-2.amazonaws.com/Assets/DigitalTwin/Assets/Warehouse/Equipment/Pallet_Trucks/Low_Profile_A/LowProfilePalletTruck_A01_PR_NVD_01.usd"]
cam = rep.create.camera(clipping_range=(0.1, 1000000))
SimReady 或仿真就緒資產是包含精確物理屬性和行為的物理精確 3D 對象。它們預裝有模型訓練所需的元數據和注釋。
接下來,為托盤千斤頂和攝像頭添加域隨機化:
with cam:
rep.modify.pose(position=rep.distribution.uniform((-9.2, -11.8, 0.4), (7.2, 15.8, 4)),look_at=(0, 0, 0))
# Get the Palletjack body mesh and modify its color
with rep.get.prims(path_pattern="SteerAxles"):
rep.randomizer.color(colors=rep.distribution.uniform((0, 0, 0), (1, 1, 1)))
# Randomize the pose of all the added palletjacks
with rep_palletjack_group:
rep.modify.pose(
position=rep.distribution.uniform((-6, -6, 0), (6, 12, 0)),
rotation=rep.distribution.uniform((0, 0, 0), (0, 0, 360)),
scale=rep.distribution.uniform((0.01, 0.01, 0.01), (0.01, 0.01, 0.01)))
圖 1. 顯示托盤千斤頂隨機顏色和位置與
隨機攝像機的位置的合成圖像
最后,配置用于注釋數據的編寫器:
writer = rep.WriterRegistry.get("KittiWriter")
writer.initialize(output_dir=output_directory,
omit_semantic_type=True,)
本例使用 Replicator 提供的 KittiWriter,以 KITTI 格式存儲對象檢測標簽的注釋,這將確保更容易與訓練管線兼容。
結果
對于第一批合成數據,團隊使用了 LOCO 數據集,這是一個用于物流的場景理解數據集,涵蓋了檢測物流特定對象的問題,以可視化現實世界的模型性能。
生成的圖像顯示,該模型仍然試圖在擁擠的倉庫中檢測托盤千斤頂(圖 2),在托盤千斤頂附近的物體周圍創建了許多邊界框。考慮到這是第一次訓練迭代,這個結果在一定程度上是意料之中的,減少域差距將是后續迭代的重點。
圖 2:在根據現實數據來驗證模型后,
現實世界的圖像顯示了許多報錯
第二次迭代:添加紋理和改變環境照明
在這次迭代中,除了第一次迭代中的托盤顏色和攝像頭位置外,團隊還隨機化了紋理和環境照明。
激活紋理和光照的隨機化:
# Randomize the lighting of the scene
with rep.get.prims(path_pattern="RectLight"):
rep.modify.attribute("color", rep.distribution.uniform((0, 0, 0), (1, 1, 1)))
rep.modify.attribute("intensity", rep.distribution.normal(100000.0, 600000.0))
rep.modify.visibility(rep.distribution.choice([True, False, False, False, False, False, False]))
random_mat_floor = rep.create.material_omnipbr(diffuse_texture=rep.distribution.choice(textures), roughness=rep.distribution.uniform(0, 1), metallic=rep.distribution.choice([0, 1]), emissive_texture=rep.distribution.choice(textures), emissive_intensity=rep.distribution.uniform(0, 1000),)
with rep.get.prims(path_pattern="SM_Floor"):
rep.randomizer.materials(random_mat_floor)
圖 3 顯示了生成的合成圖像。可以看到已經添加到背景中的各種紋理和入射到物體上的不同類型的環境光。
圖 3:不同紋理背景的托盤千斤頂的合成圖像
結果
本次迭代的報錯數量減少,增加了紋理和光照隨機化。生成合成數據時的一個關鍵因素是確保結果數據集中數據的多樣性。來自合成域的類似或重復數據可能無助于改善現實世界中的模型性能。
為了提高數據集的多樣性,可以在場景中添加更多的隨機化對象。這將在第三次迭代中解決,并且應該有助于改善模型的穩健性。
圖 4. 現實世界的圖像表明,經過隨機紋理和光照圖像的訓練,該模型檢測托盤千斤頂的精度更高
第三次迭代:添加干擾
本次迭代將額外的對象(稱為干擾物)引入到場景中,這些干擾物增加了數據集的多樣性。此次迭代還包括前兩次迭代中的所有更改。
在場景中添加干擾物:
DISTRACTORS_WAREHOUSE = ["/Isaac/Environments/Simple_Warehouse/Props/S_TrafficCone.usd",
"/Isaac/Environments/Simple_Warehouse/Props/S_WetFloorSign.usd",
"/Isaac/Environments/Simple_Warehouse/Props/SM_BarelPlastic_A_01.usd",
"/Isaac/Environments/Simple_Warehouse/Props/SM_BarelPlastic_A_02.usd",
"/Isaac/Environments/Simple_Warehouse/Props/SM_BarelPlastic_A_03.usd"]
# Modify the pose of all the distractors in the scene
with rep_distractor_group:
rep.modify.pose(
position=rep.distribution.uniform((-6, -6, 0), (6, 12, 0)),
rotation=rep.distribution.uniform((0, 0, 0), (0, 0, 360)),
scale=rep.distribution.uniform(1, 1.5))
這個項目使用的所有資源都可以通過默認的 Isaac Sim 安裝獲得,并通過指定它們在核心服務器上的路徑來加載它們。
圖 5. 被常見倉庫物體(干擾物)包圍的
托盤千斤頂的合成圖像
結果
圖 6 顯示了第三次迭代的結果。該模型能夠準確地檢測到托盤千斤頂,并且邊界框較少。與第一次迭代相比,模型性能得到了顯著改善。
圖 6. 現實世界的圖像顯示,
該模型能夠準確檢測到托盤千斤頂
持續迭代
該團隊在每次迭代中使用 5000 張圖像來訓練模型。您可以通過生成更多的變量和增加合成數據來繼續迭代此工作流,以達到所需的精度。
我們使用 NVIDIA TAO Toolkit 來訓練帶有 resnet18 主干的 DetectNet_v2 模型進行這些實驗。使用這個模型并不是工作流的要求,您可以利用使用注釋生成的數據來訓練您所選擇的體系架構和框架的模型。
我們在實驗中使用了 KITTI 編寫器。也可以使用 Omniverse Replicator 編寫自己的自定義編寫器,以正確的注釋格式生成數據,這將使您的訓練工作流無縫兼容。
您還可以在訓練過程中混合現實數據和合成數據來進行實驗。在獲得滿意的評價指標后,最終模型可以在 NVIDIA Jetson 上進行優化和部署。
使用 Omniverse Replicator
開發合成數據管線
通過使用 Omniverse Replicator,您可以構建自己的自定義合成數據生成管線或工具,以編程方式生成大量不同的合成數據集,以引導模型并快速迭代。引入各種類型的隨機化為數據集增加了必要的多樣性,使模型能夠在各種條件下識別對象或是感興趣的對象。
使用本文中的工作流,請訪問 GitHub 上的 NVIDIA-AI-IOT/synthetic_data_generation_training_workflow。要查看完整的工作流,NVIDIA 的團隊成員展示了如何使用 Omniverse Replicator 和合成數據來訓練制造流程的對象檢測模型(視頻 2)。
視頻 2:學習如何用合成數據訓練計算機視覺模型
要構建自己的自定義合成數據生成管線,請免費下載 Omniverse,并按照說明開始使用 Omniverse 代碼中的 Replicator。您也可以參加自定進度的在線課程“合成數據生成訓練計算機視覺模型”,并觀看最新的 Omniverse Replicator 教程。
-
免費下載 Omniverse:
https://www.nvidia.com/en-us/omniverse/download/
-
開始使用 Omniverse 代碼中的 Replicator:
https://docs.omniverse.nvidia.com/extensions/latest/ext_replicator/getting_started.html
-
通過合成數據生成訓練計算機視覺模型:
https://courses.nvidia.com/courses/course-v1:DLI+S-OV-10+V1/
-
最新的 Omniverse Replicator 教程:
https://www.nvidia.com/en-us/on-demand/playlist/playList-35d98b97-8abf-4f92-883a-c898801f28b4/
NVIDIA 最近發布了 Omniverse Replicator 1.10,為開發者構建低代碼 SDG 工作流提供了新的支持。相關詳細信息,請參見“在 NVIDIA Omniverse Replicator 1.10 中使用低代碼工作流促進合成數據生成”:https://developer.nvidia.com/blog/boost-synthetic-data-generation-with-low-code-workflows-in-nvidia-omniverse-replicator-1-10/
NVIDIA Isaac ROS 2.0 和 NVIDIA Isaac Sim 2023.1 現已可用,其對性能感知和高保真仿真進行了重要更新。如需了解更多信息,請參閱《NVIDIA Isaac 平臺先進的仿真和感知工具助力 AI 機器人技術加速發展》。
GTC 2024 將于 2024 年 3 月 18 至 21 日在美國加州圣何塞會議中心舉行,線上大會也將同期開放。掃描下方海報二維碼,立即注冊 GTC 大會。
原文標題:如何訓練自主移動機器人使用合成數據檢測倉庫托盤千斤頂
文章出處:【微信公眾號:NVIDIA英偉達】歡迎添加關注!文章轉載請注明出處。
-
英偉達
+關注
關注
22文章
3800瀏覽量
91356
原文標題:如何訓練自主移動機器人使用合成數據檢測倉庫托盤千斤頂
文章出處:【微信號:NVIDIA_China,微信公眾號:NVIDIA英偉達】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論