從制造汽車到幫助外科醫(yī)生和送披薩,機(jī)器人不僅自動(dòng)化,而且將人類任務(wù)的速度提高了許多倍。隨著人工智能的出現(xiàn),你可以建造更智能的機(jī)器人,它們可以更好地感知周圍環(huán)境,并在最少的人工干預(yù)下做出決策。
例如,一個(gè)用于倉(cāng)庫(kù)的自動(dòng)機(jī)器人將有效載荷從一個(gè)地方移動(dòng)到另一個(gè)地方。它必須感知周圍的自由空間,檢測(cè)并避免路徑中的任何障礙,并做出“即時(shí)”決定,毫不拖延地選擇新路徑。
這就是挑戰(zhàn)所在。這意味著構(gòu)建一個(gè)由人工智能模型支持的應(yīng)用程序,該模型經(jīng)過(guò)訓(xùn)練和優(yōu)化,可以在這種環(huán)境下工作。它需要收集大量高質(zhì)量的數(shù)據(jù),并開(kāi)發(fā)一個(gè)高度精確的人工智能模型來(lái)驅(qū)動(dòng)應(yīng)用程序。這些是將應(yīng)用程序從實(shí)驗(yàn)室轉(zhuǎn)移到生產(chǎn)環(huán)境的關(guān)鍵障礙。
在這篇文章中,我們將展示如何使用NVIDIAISAAC平臺(tái)和TAO框架解決數(shù)據(jù)挑戰(zhàn)和模型創(chuàng)建挑戰(zhàn)。你使用NVIDIAISAACSim,一個(gè)機(jī)器人模擬應(yīng)用程序,用于創(chuàng)建虛擬環(huán)境和生成合成數(shù)據(jù)。這個(gè)NVIDIATAO工具包是一種低代碼人工智能模型開(kāi)發(fā)解決方案,與從頭開(kāi)始的訓(xùn)練相比,它具有內(nèi)置的轉(zhuǎn)移學(xué)習(xí)功能,可以用一小部分?jǐn)?shù)據(jù)微調(diào)預(yù)訓(xùn)練模型。最后,使用NVIDIAISAACROS將優(yōu)化模型部署到機(jī)器人上,并將其應(yīng)用于現(xiàn)實(shí)世界。
圖1。概述使用NVIDIAISAACSim對(duì)TAO工具包模型進(jìn)行合成數(shù)據(jù)培訓(xùn)的工作流程,以適應(yīng)現(xiàn)實(shí)世界的用例。
先決條件
開(kāi)始之前,您必須擁有以下用于培訓(xùn)和部署的資源:
NVIDIAGPU驅(qū)動(dòng)程序版本:》470
NVIDIADocker:2.5.0-1
NVIDIAGPU云端或內(nèi)部:
NVIDIAA100
NVIDIAV100
NVIDIAT4
NVIDIARTX30×0(NVIDIAISAAC是也支持NVIDIARTX20系列)
NVIDIAJetsonXavier或JetsonXavierNX
NVIDIATAO工具包:4.22。有關(guān)更多信息,請(qǐng)參閱TAO工具包快速入門指南
NVIDIAISAACSim和ISAACROS
使用NVIDIAISAACSim生成合成數(shù)據(jù)
在本節(jié)中,我們將概述在NVIDIAISAACSim中生成合成數(shù)據(jù)的步驟。Syntheticdata是計(jì)算機(jī)模擬或算法生成的注釋信息。當(dāng)真實(shí)數(shù)據(jù)難以獲取或成本高昂時(shí),合成數(shù)據(jù)可以幫助解決數(shù)據(jù)難題。
NVIDIAISAACSim提供三種生成合成數(shù)據(jù)的方法:
復(fù)制器作曲家
Python腳本
GUI
在這個(gè)實(shí)驗(yàn)中,我們選擇使用Python腳本生成具有領(lǐng)域隨機(jī)化的數(shù)據(jù)。Domainrandomization改變?cè)谀M環(huán)境中定義場(chǎng)景的參數(shù),包括場(chǎng)景中各種對(duì)象的位置、比例、模擬環(huán)境的照明、對(duì)象的顏色和紋理等。
添加域隨機(jī)化以同時(shí)改變場(chǎng)景的多個(gè)參數(shù),通過(guò)將其暴露于現(xiàn)實(shí)世界中看到的各種域參數(shù),提高了數(shù)據(jù)集質(zhì)量并增強(qiáng)了模型的性能。
在本例中,您使用兩個(gè)環(huán)境來(lái)培訓(xùn)數(shù)據(jù):一個(gè)倉(cāng)庫(kù)和一個(gè)小房間。接下來(lái)的步驟包括向場(chǎng)景中添加符合物理定律的對(duì)象。我們使用了NVIDIAISAACSim卡中的示例對(duì)象,其中還包括YCBdataset中的日常對(duì)象。
安裝NVIDIAISAACSim卡后ISAACSim卡應(yīng)用程序選擇器為包含腳本的在文件夾中打開(kāi)提供一個(gè)選項(xiàng)。這用于運(yùn)行用于生成數(shù)據(jù)的腳本。
按照列出的步驟生成數(shù)據(jù)。
defadd_camera_to_viewport(self):#Addacameratothesceneandattachittotheviewport_rig=(create_prim("/Root/CameraRig","Xform"))=create_prim("/Root/CameraRig/Camera","Camera")
將語(yǔ)義ID添加到樓層:
defadd_floor_semantics(self):#Getthefloorfromthestageandupdateitssemanticsstage=_stage()floor_prim=("/Root/Towel_Room01_floor_bottom_218")add_update_semantics(floor_prim,"floor")
在具有物理特性的場(chǎng)景中添加對(duì)象:
defload_single_asset(self,object_transform_path,object_path,usd_object):#Randomx,ypointsforthepositionoftheUSDobjecttranslate_x,translate_y=150*(),150*()#LoadtheUSDObjecttry:asset=create_prim(object_transform_path,"Xform",position=([150+translate_x,175+translate_y,-55]),orientation=euler_angles_to_quat(([0,0.0,0]),usd_path=object_path)#Settheobjectwithcorrectphysics(asset,"convexHull",False)
初始化域隨機(jī)化組件:
defcreate_camera_randomization(self):#Arangeofvaluestomoveandrotatethecameracamera_tranlsate_min_range,camera_translate_max_range=(100,100,-58),(220,220,-52)camera_rotate_min_range,camera_rotate_max_range=(80,0,0),(85,0,360)#CreateaTransformationDRComponentfortheCamera_transform=(prim_paths=[()],translate_min_range=camera_tranlsate_min_range,translate_max_range=camera_translate_max_range,rotate_min_range=camera_rotate_min_range,rotate_max_range=camera_rotate_max_range,duration=0,5).do()
確保模擬中的攝影機(jī)位置和屬性與真實(shí)世界的屬性相似。為生成正確的自由空間分段掩碼,需要向地板添加語(yǔ)義ID。如前所述,應(yīng)用領(lǐng)域隨機(jī)化來(lái)幫助提高模型的sim2real性能。
NVIDIAISAACSim文檔中提供的離線數(shù)據(jù)生成示例是我們腳本的起點(diǎn)。對(duì)這個(gè)用例進(jìn)行了更改,包括使用物理向場(chǎng)景添加對(duì)象、更新域隨機(jī)化,以及向地板添加語(yǔ)義。我們已經(jīng)為數(shù)據(jù)集生成了近30000張帶有相應(yīng)分割模板的圖像。
使用TAO工具包進(jìn)行培訓(xùn)、調(diào)整和優(yōu)化
在本節(jié)中,您將使用TAO工具包使用生成的合成數(shù)據(jù)對(duì)模型進(jìn)行微調(diào)。為了完成這項(xiàng)任務(wù),我們選擇了NGC提供的UNET模型進(jìn)行實(shí)驗(yàn)。
!ngcregistrymodellistnvidia/tao/pretrained_semantic_segmentation:*
設(shè)置數(shù)據(jù)、規(guī)格文件和實(shí)驗(yàn)?zāi)夸洠?/p>
%set_envKEY=tlt_encode%set_envGPU_INDEX=0%set_envUSER_EXPERIMENT_DIR=/workspace/experiments%set_envDATA_DOWNLOAD_DIR=/workspace/freespace_data%set_envSPECS_DIR=/workspace/specs
下一步是選擇模型。
選擇正確的預(yù)訓(xùn)練模型
流水線分揀機(jī)器人設(shè)計(jì)預(yù)訓(xùn)練人工智能和深度學(xué)習(xí)模型是在代表性數(shù)據(jù)集上進(jìn)行訓(xùn)練并使用權(quán)重和偏差進(jìn)行微調(diào)的模型。與從頭開(kāi)始的訓(xùn)練相比,只需使用一小部分?jǐn)?shù)據(jù)就可以應(yīng)用遷移學(xué)習(xí),您可以快速輕松地微調(diào)預(yù)訓(xùn)練模型。
在預(yù)訓(xùn)練模型領(lǐng)域中,有一些模型執(zhí)行特定任務(wù),比如檢測(cè)人、汽車、車牌等。
我們首先選擇了一個(gè)帶有ResNet10和ResNet18主干的U-Net型號(hào)。從模型中獲得的結(jié)果顯示,在真實(shí)數(shù)據(jù)中,墻和地板合并為一個(gè)實(shí)體,而不是兩個(gè)單獨(dú)的實(shí)體。即使模型在模擬圖像上的性能顯示出較高的精度,這也是事實(shí)。
我們用不同的主干和圖像大小進(jìn)行實(shí)驗(yàn),觀察延遲與準(zhǔn)確性之間的權(quán)衡。表中所有型號(hào)均相同;只有脊柱不同。
根據(jù)結(jié)果,我們顯然需要一個(gè)更適合用例的不同模型。我們選擇了NGC目錄中提供的PeopleSemSeg型號(hào)。該模型在“person”類的500萬(wàn)個(gè)對(duì)象上進(jìn)行了預(yù)訓(xùn)練,數(shù)據(jù)集由相機(jī)高度、人群密度和視野組成。該模型還可以將背景和自由空間分割為兩個(gè)獨(dú)立的實(shí)體。
在使用相同的數(shù)據(jù)集對(duì)該模型進(jìn)行訓(xùn)練后,平均IOU增加了10%以上,得到的圖像清楚地顯示了地板和墻壁之間更好的分割。
顯示了在使用真實(shí)數(shù)據(jù)對(duì)PeopleSeg模型進(jìn)行微調(diào)之前,從機(jī)器人的角度在模擬圖像和真實(shí)圖像上識(shí)別自由空間。也就是說(shuō),使用純NVIDIAISAACSim卡數(shù)據(jù)訓(xùn)練的模型。
關(guān)鍵的一點(diǎn)是,雖然可能有許多經(jīng)過(guò)預(yù)訓(xùn)練的模型可以完成這項(xiàng)任務(wù),但選擇一個(gè)最接近當(dāng)前應(yīng)用程序的模型是很重要的。這就是陶的特制模型有用的地方。
!taounettrain--gpus=1--gpu_index=$GPU_INDEX\-e$SPECS_DIR/spec_vanilla_\-r$USER_EXPERIMENT_DIR/semseg_experiment_unpruned\-m$USER_EXPERIMENT_DIR/\-nmodel_freespace\-k$KEY
培訓(xùn)模型后,根據(jù)驗(yàn)證數(shù)據(jù)評(píng)估模型性能:
!taounetevaluate--gpu_index=$GPU_INDEX-e$SPECS_DIR/spec_vanilla_\-m$USER_EXPERIMENT_DIR/semseg_experiment_unpruned/weights/model_\-o$USER_EXPERIMENT_DIR/semseg_experiment_unpruned/\-k$KEY
當(dāng)您對(duì)NVIDIAISAACSim數(shù)據(jù)的模型性能和Sim2Sim驗(yàn)證性能感到滿意時(shí),請(qǐng)刪減模型。
要以最小的延遲運(yùn)行此模型,請(qǐng)將其優(yōu)化為在目標(biāo)GPU上運(yùn)行。有兩種方法可以實(shí)現(xiàn)這一點(diǎn):
Pruning:TAO工具包中的修剪功能會(huì)自動(dòng)刪除不需要的層和神經(jīng)元,有效地減小模型的大小。必須重新訓(xùn)練模型,以恢復(fù)修剪過(guò)程中丟失的精度。
Post-trainingquantization:TAO工具包中的另一項(xiàng)功能可以進(jìn)一步縮小模型尺寸。這將其精度從FP32更改為INT8,在不犧牲精度的情況下提高了性能。
首先,刪減模型:
!taounetprune\-e$SPECS_DIR/spec_vanilla_\-m$USER_EXPERIMENT_DIR/semseg_experiment_unpruned/weights/model_\-o$USER_EXPERIMENT_DIR/unet_experiment_pruned/model_unet_\-equnion\-pth0.1\-k$KEY
重新訓(xùn)練并修剪模型:
快遞分揀機(jī)器人圖紙并聯(lián)分揀機(jī)器人 移動(dòng)!taounettrain--gpus=1--gpu_index=$GPU_INDEX\-e$SPECS_DIR/spec_vanilla_unet_\-r$USER_EXPERIMENT_DIR/unet_experiment_retrain\-m$USER_EXPERIMENT_DIR/unet_experiment_pruned/model_unet_\-nmodel_unet_retrained\-k$KEY
當(dāng)您對(duì)修剪模型的Sim2Sim驗(yàn)證性能感到滿意時(shí),請(qǐng)轉(zhuǎn)至下一步,對(duì)真實(shí)數(shù)據(jù)進(jìn)行微調(diào)。
!taounettrain--gpus=1--gpu_index=$GPU_INDEX\-e$SPECS_DIR/spec_vanilla_unet_domain_\-r$USER_EXPERIMENT_DIR/semseg_experiment_domain_adpt\-m$USER_EXPERIMENT_DIR/semseg_experiment_retrain/model_unet_\-nmodel_domain_adapt\-k$KEY
后果
表1顯示了未運(yùn)行和修剪模型之間的結(jié)果摘要。最終選擇用于部署的經(jīng)過(guò)修剪和量化的模型比在NVIDIAJetsonXavierNX上測(cè)量的原始模型小17倍,推理性能快5倍。
sim數(shù)據(jù)的訓(xùn)練數(shù)據(jù)集由25K個(gè)圖像組成,而用于微調(diào)的真實(shí)圖像的訓(xùn)練數(shù)據(jù)僅由44個(gè)圖像組成。真實(shí)圖像的驗(yàn)證數(shù)據(jù)集僅包含56幅圖像。對(duì)于真實(shí)世界的數(shù)據(jù),我們收集了三種不同室內(nèi)場(chǎng)景的數(shù)據(jù)集。模型的輸入圖像大小為960×544。推理性能是使用NVIDIATensorRTtrtexec工具。
部署NVIDIAISAACROS
在本節(jié)中,我們展示了采用經(jīng)過(guò)訓(xùn)練和優(yōu)化的模型并使用NVIDIAISAACROS在XavierJetsonNX驅(qū)動(dòng)的iRobot的Create3機(jī)器人上進(jìn)行部署的步驟。Create3和NVIDIAISAACROS圖像分割節(jié)點(diǎn)均在ROS2上運(yùn)行。
本例使用/isaac_ros_image_segmentation/isaac_ros_unetGitHubrepo部署空閑空間分段。
要使用自由空間分段模型,請(qǐng)從/NVIDIA-ISAAC-ROS/isaac_ros_image_segmentationGitHubrepo執(zhí)行以下步驟。
創(chuàng)建Docker交互式工作區(qū):
$isaac_ros_common/scripts/run_your_ws
克隆所有包依賴項(xiàng):
中國(guó)快遞分揀機(jī)器人系統(tǒng)isaac_ros_dnn_encodersisaac_ros_nvengine_interfaces推理包isaac_ros_tensor_rtisaac_ros_triton構(gòu)建并獲取工作區(qū)的源代碼:
$cd/workspaces/isaac_ros-dev$colconbuild.install/
從您的工作機(jī)器下載經(jīng)過(guò)培訓(xùn)的自由空間標(biāo)識(shí)模型:
$scp:
將加密的TLT模型和格式轉(zhuǎn)換為TensorRT引擎計(jì)劃。對(duì)INT8模型運(yùn)行以下命令:
taoconverter-ktlt_encode\-e\-pinput_1,1x3x544x960,1x3x544x960,1x3x544x960\unet_
按照以下步驟進(jìn)行演練:ISAACROS圖像分割:
將TensorRT模型引擎文件保存在正確的目錄中。創(chuàng)建更新isaac_ros_unet啟動(dòng)文件中的模型引擎路徑和名稱。重新生成并運(yùn)行以下命令:$colconbuild--packages-up-toisaac_ros_unet.install/$ros2launchisaac_ros_unetisaac_ros_unet_
總結(jié)
播種式自動(dòng)分揀機(jī)器人在本文中,我們向您展示了一個(gè)端到端的工作流程,首先是在NVIDIAISAACSim中生成合成數(shù)據(jù),使用TAO工具包進(jìn)行微調(diào),然后使用NVIDIAISAACROS部署模型。
NVIDIAISAACSim和TAOToolkit都是抽象出人工智能框架復(fù)雜性的解決方案,使您能夠在生產(chǎn)中構(gòu)建和部署人工智能驅(qū)動(dòng)的機(jī)器人應(yīng)用程序,而無(wú)需任何人工智能專業(yè)知識(shí)。
AmeyKulkarni是NVIDIA的開(kāi)發(fā)技術(shù)工程師,專注于將深度學(xué)習(xí)解決方案有效地部署到邊緣。在2019年加入NVIDIA之前,他完成了馬里蘭大學(xué)計(jì)算機(jī)工程博士學(xué)位。他的研究興趣是在嵌入式平臺(tái)上部署數(shù)字信號(hào)處理、計(jì)算機(jī)視覺(jué)和深度學(xué)習(xí)系統(tǒng)。
RishabhChadha是NVIDIA的嵌入式工程實(shí)習(xí)生——AI,他專注于為NVIDIAJetson平臺(tái)集成深度學(xué)習(xí)和機(jī)器人技術(shù)框架。他將于2021年畢業(yè)于伍斯特理工學(xué)院,獲得機(jī)器人學(xué)碩士學(xué)位。他的興趣主要包括深度學(xué)習(xí)、醫(yī)學(xué)成像和機(jī)器人感知。DanielLee是NVIDIA的產(chǎn)品經(jīng)理,專注于專業(yè)可視化解決方案的軟件。
審核
智能垃圾分類分揀機(jī)器人順豐分揀機(jī)器人分揀機(jī)器人的應(yīng)用場(chǎng)景