0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何使用NVIDIA Isaac平台和TAO框架解决数据挑战和模型创建挑战

NVIDIA英伟达企业解决方案 来源:NVIDIA英伟达企业解决方案 作者:NVIDIA英伟达企业解 2022-05-13 10:48 次阅读

从制造汽车到帮助外科医生和送披萨,机器人不仅逐渐自动化,而且将完成任务的速度提高了许多倍。随着人工智能的出现,机器人可以更加智能化,更好地感知周围环境,并在最少的人工干预下做出决策。

例如,一个用于仓库的自主机器人将有效载荷从一个地方移动到另一个地方。它必须感知周围的自由空间,检测并避免路径中的任何障碍,并做出“即时”决定,选择路径。

而这就是挑战所在,这意味着需要构建一个由人工智能模型支持的应用程序,该模型经过训练和优化,可以在这种环境下工作。训练和优化模型需要收集大量高质量的数据,并开发一个高度精确的人工智能模型来驱动应用程序。这些是将应用程序从实验室转移到生产环境的关键障碍。

在这篇文章中,我们将展示如何使用 NVIDIA Isaac 平台TAO 框架解决数据挑战和模型创建挑战。NVIDIAIsaac Sim是一个机器人模拟应用程序,用于创建虚拟环境和生成合成数据。NVIDIA TAO 工具套件是一种低代码人工智能模型开发解决方案,与从头开始的训练相比,它具有内置的转移学习功能,可以用一小部分数据微调预训练模型。最后,使用 NVIDIA Isaac ROS 将优化模型部署到机器人上,并将其应用于现实世界。

fc854a4e-d1de-11ec-bce3-dac502259ad0.png

▲图 1 概述使用 NVIDIA Isaac Sim 对 TAO 模型进行合成数据训练的工作流程,以适应现实世界的用例

先决条件

开始之前,请确认拥有以下用于训练和部署的资源:

  • NVIDIA GPU 驱动程序版本:> 470

  • NVIDIA Docker:2.5.0-1

  • NVIDIA GPU 云端或内部:

  • NVIDIA A100

  • NVIDIA V100

  • NVIDIA T4

  • NVIDIA RTX 30 × 0 ( NVIDIA Isaac 也支持 NVIDIA RTX 20 系列)

  • NVIDIA Jetson Xavier 或 Jetson Xavier NX

  • NVIDIA TAO 工具套件:4.22 。

  • NVIDIA Isaac Sim 和 NVIDIA Isaac ROS

使用 NVIDIA IsaacSim 生成合成数据

在本节中,我们将概述在 NVIDIA Isaac Sim 中生成合成数据的步骤。Synthetic Data 是计算机模拟或算法生成的注释信息。当真实数据难以获取或成本高昂时,合成数据可以帮助解决数据难题。

NVIDIA Isaac Sim 提供三种生成合成数据的方法:

在这个实验中,我们选择使用 Python 脚本生成具有领域随机化的数据。Domain randomization 改变在模拟环境中定义场景的参数,包括场景中各种对象的位置、比例、模拟环境的照明、对象的颜色和纹理等。

添加域随机化以同时改变场景的多个参数,通过将其暴露于现实世界中看到的各种域参数,提高了数据集质量并增强了模型的性能。

本例中使用了两个环境来训练数据:一个仓库和一个小房间。接下来的步骤包括向场景中添加符合物理定律的对象。我们使用了 NVIDIA Isaac Sim 中的示例对象,其中还包括 YCB dataset 中的日常对象。

fc9fa812-d1de-11ec-bce3-dac502259ad0.png

图 2 简单房间和仓库环境中的模拟图像示例

安装 NVIDIA Isaac Sim 后 Isaac Sim App选择器提供了一个在文件夹中打开的选项,其中包含一个python.sh 脚本。这将用于运行数据生成的脚本。

按照下方列出的步骤生成数据。

  1. 选择环境并将摄影机添加到场景中:

def add_camera_to_viewport(self): # Add a camera to the scene and attach it to the viewport self.camera_rig = UsdGeom.Xformable(create_prim("/Root/CameraRig", "Xform")) self.camera = create_prim("/Root/CameraRig/Camera", "Camera")

2. 添加语义 ID:

def add_floor_semantics(self): # Get the floor from the stage and update its semantics stage = kit.context.get_stage() floor_prim = stage.GetPrimAtPath("/Root/Towel_Room01_floor_bottom_218") add_update_semantics(floor_prim, "floor")

3. 在具有物理特性的场景中添加对象:

def load_single_asset(self, object_transform_path, object_path, usd_object): # Random x, y points for the position of the USD object translate_x , translate_y = 150 * random.random(), 150 * random.random() # Load the USD Object try: asset = create_prim(object_transform_path, "Xform", position=np.array([150 + translate_x, 175 + translate_y, -55]), orientation=euler_angles_to_quat(np.array([0, 0.0, 0]), usd_path=object_path) # Set the object with correct physics utils.setRigidBody(asset, "convexHull", False)

4. 初始化域随机化组件:

def create_camera_randomization(self): # A range of values to move and rotate the camera camera_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) # Create a Transformation DR Component for the Camera self.camera_transform = self.dr.commands.CreateTransformComponentCommand( prim_paths=[self.camera.GetPath()], 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()

确保模拟中的摄影机位置和属性与真实世界的属性相似。添加语义ID对于生成正确的自由空间分割掩码是非常重要的。如前所述,应用领域随机化来帮助提高模型的 sim2real 性能。

NVIDIA Isaac Sim 说明中提供的离线数据生成示例是我们脚本的起点。对这个用例进行了更改,包括使用物理向场景添加对象、更新域随机化,以及添加语义。我们已经为数据集生成了近 30,000 张带有相应分割模板的图像。

使用 TAO 工具套件进行训练、适应和优化

在本节中,您将使用 TAO 工具套件生成的合成数据对模型进行微调。为了完成这项任务,我们选择了 NGC 提供的 UNET 模型进行实验。

!ngc registry model list nvidia/tao/pretrained_semantic_segmentation:*

设置数据、规格文件( TAO 规格)和实验目录:

%set_envKEY=tlt_encode%set_envGPU_INDEX=0%set_envUSER_EXPERIMENT_DIR=/workspace/experiments%set_envDATA_DOWNLOAD_DIR=/workspace/freespace_data%set_env SPECS_DIR=/workspace/specs

下一步是选择模型。

选择正确的预训练模型

预训练人工智能和深度学习模型是在代表性数据集上进行训练并使用权重和偏差进行微调的模型。与从头开始的训练相比,只需使用一小部分数据就可以应用迁移学习,您可以快速轻松地微调预训练模型。

在预训练模型领域中,有一些模型执行特定任务,比如检测人、汽车、车牌等。

我们首先选择了一个带有 ResNet10 和 ResNet18 主干的 U-Net 模型。从模型中获得的结果显示,在真实数据中,墙和地板合并为一个实体,而不是两个单独的实体。即使模型在模拟图像上的性能显示出较高的精度,这也是事实。

fcbc927e-d1de-11ec-bce3-dac502259ad0.png

表 1 不同预训练模型的实验可从 TAO 的 NGC 平台获得

我们用不同的主干和图像大小进行实验,观察延迟( FPS )与准确性之间的权衡。表中所有型号均相同( UNET ),只有 backbones 不同。

fcd6f236-d1de-11ec-bce3-dac502259ad0.png

图 3 ResNet18 模型的预测。(左)模拟图像;(右)真实世界的图像

根据结果,我们显然需要一个更适合用例的不同模型。我们选择了 NGC 目录中提供的 PeopleSemSeg 型号。该模型在“ person ”类的 500 万个对象上进行了预训练,数据集由相机高度、人群密度和视野( FOV )组成。该模型还可以将背景和自由空间分割为两个独立的实体。

在使用相同的数据集对该模型进行训练后,平均 IOU 增加了 10% 以上,得到的图像清楚地显示了地板和墙壁之间更好的分割。

fd026cb8-d1de-11ec-bce3-dac502259ad0.png

表 2 PeopleSegNet 可训练模型的实验

fd20f688-d1de-11ec-bce3-dac502259ad0.png

图 4 网络迁移学习的预测结果 PeopleSegTAO 包含合成数据(左)和真实数据(右)的模型

图 4 显示了在使用真实数据对 PeopleSeg 模型进行微调之前,从机器人的角度在模拟图像和真实图像上识别自由空间。也就是说,使用纯 NVIDIA Isaac Sim 数据训练的模型。

关键的一点是,虽然可能有许多经过预训练的模型可以完成这项任务,但选择一个最接近当前应用程序的模型是很重要的。这就是 TAO 的特制模型有用的地方。

!tao unet train --gpus=1 --gpu_index=$GPU_INDEX  -e $SPECS_DIR/spec_vanilla_unet.txt  -r $USER_EXPERIMENT_DIR/semseg_experiment_unpruned  -m $USER_EXPERIMENT_DIR/peoplesemsegnet.tlt  -n model_freespace  -k $KEY

训练模型后,根据验证数据评估模型性能:

!taounetevaluate--gpu_index=$GPU_INDEX-e$SPECS_DIR/spec_vanilla_unet.txt-m $USER_EXPERIMENT_DIR/semseg_experiment_unpruned/weights/model_freespace.tlt  -o $USER_EXPERIMENT_DIR/semseg_experiment_unpruned/  -k $KEY

当您对 NVIDIA Isaac Sim 数据的模型性能和 Sim2Sim 验证性能感到满意时,请删减模型。

要以最小的延迟运行此模型,请将其优化为在目标 GPU 上运行。有两种方法可以实现这一点:

  • Pruning :TAO 工具套件中的修剪功能会自动删减,有效地控制模型的大小。必须重新训练模型,以恢复修剪过程中损失的精度。

  • Post-training quantization :TAO 工具套件中的另一项功能可以进一步缩小模型尺寸。这将其精度从 FP32 更改为 INT8 ,在不牺牲精度的情况下提高了性能。

首先,删减模型:

!tao unet prune  -e $SPECS_DIR/spec_vanilla_unet.txt  -m $USER_EXPERIMENT_DIR/semseg_experiment_unpruned/weights/model_freespace.tlt  -o $USER_EXPERIMENT_DIR/unet_experiment_pruned/model_unet_pruned.tlt  -eq union  -pth 0.1  -k $KEY

重新训练并修剪模型:

!tao unet train --gpus=1 --gpu_index=$GPU_INDEX  -e $SPECS_DIR/spec_vanilla_unet_retrain.txt  -r $USER_EXPERIMENT_DIR/unet_experiment_retrain  -m $USER_EXPERIMENT_DIR/unet_experiment_pruned/model_unet_pruned.tlt  -n model_unet_retrained  -k $KEY

当您对修剪模型的 Sim2Sim 验证性能感到满意时,请转至下一步,对真实数据进行微调。

!tao unet train --gpus=1 --gpu_index=$GPU_INDEX  -e $SPECS_DIR/spec_vanilla_unet_domain_adpt.txt  -r $USER_EXPERIMENT_DIR/semseg_experiment_domain_adpt  -m $USER_EXPERIMENT_DIR/semseg_experiment_retrain/model_unet_pruned.tlt -n model_domain_adapt  -k $KEY

结果

表 1 显示了未运行和修剪模型之间的结果摘要。最终选择用于部署的经过修剪和量化的模型比在 NVIDIA Jetson Xavier NX 上测量的原始模型小 17 倍,推理性能快 5 倍。

fd39b330-d1de-11ec-bce3-dac502259ad0.png

表 3 Sim2Sim 和 Sim2Real 的结果

sim 数据的训练数据集由 25K 个图像组成,而用于微调的真实图像的训练数据仅由 44 个图像组成。真实图像的验证数据集仅包含 56 幅图像。对于真实世界的数据,我们收集了三种不同室内场景的数据集。模型的输入图像大小为 960 × 544。推理性能是使用 NVIDIA TensorRT trtexec 工具进行测量的。

fd56590e-d1de-11ec-bce3-dac502259ad0.png

图 5 在对真实世界数据进行微调后,机器人真实世界图像的结果

部署 NVIDIA IsaacROS

在本节中,我们展示了采用经过训练和优化的模型并使用 NVIDIA Isaac ROS 在 Jetson XavierNX 驱动的 iRobot 的 Create 3 机器人上进行部署的步骤。Create 3 和 NVIDIA Isaac ROS 图像分割节点均在 ROS2 上运行。

本例使用 /isaac_ros_image_segmentation/isaac_ros_unet GitHub repo 部署空闲空间分段。

fd82ebea-d1de-11ec-bce3-dac502259ad0.png

图 6 使用 ROS2 中的 rqt _图像_查看器进行图像和分割遮罩

(左)在 Create 3 机器人上使用 USB 摄像头;(右)使用 Isaac ros 图像分割节点

要使用自由空间分段模型,请从 /NVIDIA-ISAAC-ROS/isaac_ros_image_segmentation GitHub repo 执行以下步骤。

创建 Docker 交互式工作区:

$isaac_ros_common/scripts/run_dev.sh your_ws

克隆所有软件包的相关项:

  • isaac_ros_dnn_encoders

  • isaac_ros_nvengine_interfaces

  • 推理包(您可以选择其中一个)

  • isaac_ros_tensor_rt

  • isaac_ros_triton

构建并获取工作区的源代码:

$cd/workspaces/isaac_ros-dev$colcon build && . install/setup.bash

从您的工作机器上下载经过训练的自由空间标识(. etlt )模型:

$scp:

加密的 TLT 模型(. etlt )和格式转换为 TensorRT 引擎计划。对 INT8 模型运行以下命令:

tao converter -k tlt_encode  -e trt.fp16.freespace.engine  -p input_1,1x3x544x960,1x3x544x960,1x3x544x960  unet_freespace.etlt

按照以下步骤进行演练:Isaac ROS 图像分割 :

  • 将 TensorRT 模型引擎文件保存在正确的目录中

  • 创建 config.pbtxt.

  • 更新 isaac_ros_unet 启动文件中的模型引擎路径和名称

  • 重新生成并运行以下命令:

$colconbuild--packages-up-toisaac_ros_unet&&.install/setup.bash$ ros2 launch isaac_ros_unet isaac_ros_unet_triton.launch.py

总结

在本文中,我们向您展示了一个端到端的工作流程,首先是在 NVIDIA Isaac Sim 中生成合成数据,使用 TAO 工具套件进行微调,然后使用 NVIDIA Isaac ROS 部署模型。

NVIDIA Isaac Sim 和 TAO Toolkit 都是抽象出人工智能框架复杂性的解决方案,使您能够在生产中构建和部署人工智能驱动的机器人应用程序,而无需任何人工智能专业知识。

原文标题:使用NVIDIA Isaac Sim和NVIDIA TAO开发和部署人工智能驱动的机器人

文章出处:【微信公众号:NVIDIA英伟达企业解决方案】欢迎添加关注!文章转载请注明出处。

审核编辑:汤梓红
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 机器人
    +关注

    关注

    210

    文章

    28212

    浏览量

    206554
  • NVIDIA
    +关注

    关注

    14

    文章

    4940

    浏览量

    102818
  • TAO
    TAO
    +关注

    关注

    0

    文章

    10

    浏览量

    6990

原文标题:使用NVIDIA Isaac Sim和NVIDIA TAO开发和部署人工智能驱动的机器人

文章出处:【微信号:NVIDIA-Enterprise,微信公众号:NVIDIA英伟达企业解决方案】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    MCT8316A-设计挑战和解决方案应用说明

    电子发烧友网站提供《MCT8316A-设计挑战和解决方案应用说明.pdf》资料免费下载
    发表于 09-13 09:52 0次下载
    MCT8316A-设计<b class='flag-5'>挑战和</b>解决方案应用说明

    MCF8316A-设计挑战和解决方案应用说明

    电子发烧友网站提供《MCF8316A-设计挑战和解决方案应用说明.pdf》资料免费下载
    发表于 09-13 09:51 0次下载
    MCF8316A-设计<b class='flag-5'>挑战和</b>解决方案应用说明

    TMCS110x 布局挑战和最佳实践

    电子发烧友网站提供《TMCS110x 布局挑战和最佳实践.pdf》资料免费下载
    发表于 09-12 09:23 0次下载
    TMCS110x 布局<b class='flag-5'>挑战和</b>最佳实践

    NVIDIA为AI城市挑战赛构建合成数据

    在一年一度的 AI 城市挑战赛中,来自世界各地的数百支参赛队伍在 NVIDIA Omniverse 生成的基于物理学的数据集上测试了他们的 AI 模型
    的头像 发表于 09-09 10:04 439次阅读

    NVIDIA Isaac 机器人平台利用最新的生成式 AI 和先进的仿真技术,加速 AI 机器人技术的发展

    观众展示了用于人形机器人学习的通用基础模型 Project GR00T(代表通用机器人 00 技术)。Project GR00T 利用 NVIDIA Isaac 机器人平台的各种工具来
    的头像 发表于 06-04 18:00 7637次阅读
    <b class='flag-5'>NVIDIA</b> <b class='flag-5'>Isaac</b> 机器人<b class='flag-5'>平台</b>利用最新的生成式 AI 和先进的仿真技术,加速 AI 机器人技术的发展

    NVIDIA Isaac Manipulator助力让下一代机器人技术触手可及

    两家公司在芝加哥 Automate 展会上宣布将围绕 NVIDIA AI、Isaac Manipulator 和 Intrinsic 平台的使用展开合作。
    的头像 发表于 05-13 14:15 855次阅读

    NVIDIA Isaac机器人平台升级,加速AI机器人技术革新

    NVIDIA Isaac机器人平台近期实现重大升级,通过引入最新的生成式AI技术和先进的仿真技术,显著加速了AI机器人技术的发展步伐。该平台正不断扩展其基础
    的头像 发表于 03-27 10:36 636次阅读

    NVIDIA入局人形机器人!Isaac平台迎来重要更新

    NVIDIA Isaac 机器人平台利用最新的生成式 AI 和先进的仿真技术,加速 AI 机器人技术的发展。
    的头像 发表于 03-26 09:07 1001次阅读
    <b class='flag-5'>NVIDIA</b>入局人形机器人!<b class='flag-5'>Isaac</b><b class='flag-5'>平台</b>迎来重要更新

    Edge Impulse发布新工具,助 NVIDIA 模型大规模部署

    借助 Edge Impulse 和 NVIDIA TAO 工具包的协同效应,工程师得以快速构建并部署至边缘优化硬件(如上述型号)的计算机视觉模型。该平台还支持用户运用经由 GPU 优化
    的头像 发表于 03-25 16:00 684次阅读

    汽车网络安全-挑战和实践指南

    汽车网络安全-挑战和实践指南
    的头像 发表于 02-19 16:37 497次阅读
    汽车网络安全-<b class='flag-5'>挑战和</b>实践指南

    NVIDIA TAO 5.2版本发布

    NVIDIA TAO 提供了一个低代码开源 AI 框架,无论你是初学者还是专业的数据科学家,都可以使用该框架加速视觉 AI
    的头像 发表于 01-03 10:11 593次阅读

    使用 NVIDIA Isaac 仿真并定位 Husky 机器人

    如何使用 ROS 2 Husky 官方软件包将该机器人导入 NVIDIA Isaac Sim 并创建仿真。 本 Demo 中的 Husky 机器人配备了 NVIDIA Jetson O
    的头像 发表于 12-26 18:05 1249次阅读
    使用 <b class='flag-5'>NVIDIA</b> <b class='flag-5'>Isaac</b> 仿真并定位 Husky 机器人

    HDI 布线的挑战和技巧

    HDI 布线的挑战和技巧
    的头像 发表于 12-07 14:48 490次阅读

    模型数据集:构建、挑战与未来趋势

    随着深度学习技术的快速发展,大型预训练模型如GPT-4、BERT等在各个领域取得了显著的成功。这些大模型背后的关键之一是庞大的数据集,为模型提供了丰富的知识和信息。本文将探讨大
    的头像 发表于 12-06 15:28 1585次阅读

    NVIDIA 为部分大型亚马逊 Titan 基础模型提供训练支持

    GPU 和海量的数据集上所训练而成。 不过这可能会给想要使用生成式 AI 的企业带来很多巨大的挑战NVIDIA NeMo (一个用于构建、自定义和运行 LLM 的框架)能够帮助企
    的头像 发表于 11-29 21:15 514次阅读
    <b class='flag-5'>NVIDIA</b> 为部分大型亚马逊 Titan 基础<b class='flag-5'>模型</b>提供训练支持