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 提供三种生成合成数据的方法:

  • 创建 Replicator

  • Python 脚本

  • GUI

在这个实验中,我们选择使用 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英伟达企业解决方案】欢迎添加关注!文章转载请注明出处。

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

    关注

    213

    文章

    31459

    浏览量

    223689
  • NVIDIA
    +关注

    关注

    14

    文章

    5696

    浏览量

    110119
  • TAO
    TAO
    +关注

    关注

    0

    文章

    10

    浏览量

    7169

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

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

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    NVIDIA 扩展开放模型系列,推动代理式、物理和医疗 AI 下一阶段发展

    NVIDIA BioNeMo 平台的一部分,Proteina-Complexa 模型可加速蛋白质药物研发——同时推出全新开放数据集,包含数百万条由 AI 预测的蛋白质复合物结构
    的头像 发表于 03-17 09:18 512次阅读
    <b class='flag-5'>NVIDIA</b> 扩展开放<b class='flag-5'>模型</b>系列,推动代理式、物理和医疗 AI 下一阶段发展

    NVIDIA Jetson模型赋能AI在边缘端落地

    开源生成式 AI 模型不再局限于数据中心,而是开始深入到现实世界的各种机器中。从 Orin 到 Thor,NVIDIA Jetson 系列正在成为运行 NVIDIA Nemotron、
    的头像 发表于 03-16 16:27 650次阅读
    <b class='flag-5'>NVIDIA</b> Jetson<b class='flag-5'>模型</b>赋能AI在边缘端落地

    借助NVIDIA Isaac Sim与World Labs Marble加速机器人仿真环境构建

    的虚拟世界。将开源机器人参考框架 NVIDIA Isaac Sim 与生成式模型,比如 World Labs 推出的 Marble 等相结合,即可通过文本或图像提示,为机器人开发
    的头像 发表于 12-24 10:28 1702次阅读

    NVIDIA Isaac Lab推动机器人技术突破

    Isaac Lab 是 Isaac Gym 的替代版本,该框架已将 GPU 原生机器人仿真扩展至大规模多模态学习的全新领域。Isaac Lab 整合了 GPU 并行的物理真实的仿真、逼
    的头像 发表于 10-21 11:20 1349次阅读

    借助NVIDIA Megatron-Core大模型训练框架提高显存使用效率

    随着模型规模迈入百亿、千亿甚至万亿参数级别,如何在有限显存中“塞下”训练任务,对研发和运维团队都是巨大挑战NVIDIA Megatron-Core 作为流行的大模型训练
    的头像 发表于 10-21 10:55 1404次阅读
    借助<b class='flag-5'>NVIDIA</b> Megatron-Core大<b class='flag-5'>模型</b>训练<b class='flag-5'>框架</b>提高显存使用效率

    NVIDIA 利用全新开源模型与仿真库加速机器人研发进程

    科研人员及开发者打造功能更强大、适应性更强的机器人。   全新的 NVIDIA Isaac GR00T 开源基础模型将为机器人赋予接近人类的推理能力,使其能够拆解复杂指令,并借助已有知识与常识执行任务
    的头像 发表于 09-30 09:52 3213次阅读
    <b class='flag-5'>NVIDIA</b> 利用全新开源<b class='flag-5'>模型</b>与仿真库加速机器人研发进程

    NVIDIA Isaac Lab多GPU多节点训练指南

    NVIDIA Isaac Lab 是一个适用于机器人学习的开源统一框架,基于 NVIDIA Isaac Sim 开发,其模块化高保真仿真适用
    的头像 发表于 09-23 17:15 2631次阅读
    <b class='flag-5'>NVIDIA</b> <b class='flag-5'>Isaac</b> Lab多GPU多节点训练指南

    NVIDIA Isaac Sim仿真平台助力他山科技实现触觉传感技术突破

    触觉感知作为机器人与环境交互的核心能力之一,正成为突破人机协作精度瓶颈的关键。他山科技基于 NVIDIA Isaac Sim 仿真平台,融合其业界领先的触觉传感器产品,构建了一套高精度、高频率的触觉
    的头像 发表于 09-06 15:30 2170次阅读

    利用NVIDIA Cosmos模型训练通用机器人

    机器人领域的一大核心挑战在于如何让机器人掌握新任务,而无需针对每个新任务和环境耗费大量精力收集和标注数据集。NVIDIA 的最新研究方案通过生成式 AI、世界基础模型(如
    的头像 发表于 08-05 16:22 2259次阅读
    利用<b class='flag-5'>NVIDIA</b> Cosmos<b class='flag-5'>模型</b>训练通用机器人

    NVIDIA Jetson + Isaac SDK 在人形机器人领域的方案详解

    NVIDIA Jetson + Isaac SDK 在人形机器人领域的 方案详解 ,涵盖芯片型号、软件平台、开发工具链、应用场景与典型客户等。 一、方案概述:Jetson + Isaac
    的头像 发表于 07-30 16:05 3942次阅读

    NVIDIA Isaac Lab可用环境与强化学习脚本使用指南

    NVIDIA Isaac Sim 是一款基于 NVIDIA Omniverse 构建的参考应用,使开发者能够在基于物理的虚拟环境中模拟和测试 AI 驱动的机器人开发解决方案。NVIDIA
    的头像 发表于 07-14 15:29 2632次阅读
    <b class='flag-5'>NVIDIA</b> <b class='flag-5'>Isaac</b> Lab可用环境与强化学习脚本使用指南

    通过NVIDIA Cosmos模型增强机器人学习

    通用机器人的时代已经到来,这得益于机械电子技术和机器人 AI 基础模型的进步。但目前机器人技术的发展仍面临一个关键挑战:机器人需要大量的训练数据来掌握诸如组装和检查之类的技能,而手动演示的方式难以
    的头像 发表于 07-14 11:49 1281次阅读
    通过<b class='flag-5'>NVIDIA</b> Cosmos<b class='flag-5'>模型</b>增强机器人学习

    NVIDIA Isaac Sim和Isaac Lab现已推出早期开发者预览版

    NVIDIA 发布了机器人仿真参考应用 Isaac Sim 和机器人学习框架 Isaac Lab 的开发者预览版。开发者现在可以通过 GitHub 访问早期版本,抢先体验先进功能,用于
    的头像 发表于 07-04 14:23 2034次阅读

    NVIDIA Isaac Sim与NVIDIA Isaac Lab的更新

    在 COMPUTEX 2025 上,NVIDIA 宣布了机器人仿真参考应用 NVIDIA Isaac Sim 和机器人学习框架 NVIDIA
    的头像 发表于 05-28 10:06 2401次阅读

    盘点#机器人开发平台

    图,电子技术资料网站具身智能机器人****开发平台——Fibot广和通发布机器人开发平台-电子发烧友网NVIDIA Isaac 英伟达综合性机器人开发
    发表于 05-13 15:02