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

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

3天内不再提示

使用NVIDIA ISAAC和TAO开发AI驱动的机器人

星星科技指导员 来源:NVIDIA 作者:NVIDIA 2022-05-07 09:47 次阅读

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

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

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

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

Diagram shows an overview of workflow with synthetic data generation using NVIDIA Isaac Sim and training a pretrained model with TAO in a simulated environment, evaluate the results and collect more data if necessary. The model is then pruned and retrained again in the simulated environment. The model then is moved to the next phase where it is fine-tuned on real-world data and eventually deployed.

图 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 。有关更多信息,请参阅 TAO 工具包快速入门指南

NVIDIA ISAAC Sim 和 ISAAC ROS

使用 NVIDIA ISAAC Sim 生成合成数据

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

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

复制器作曲家

Python 脚本

GUI

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

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

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

安装 NVIDIA ISAAC Sim 卡后 ISAAC Sim 卡应用程序选择器 为包含python.sh脚本的 在文件夹中打开 提供一个选项。这用于运行用于生成数据的脚本。

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

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

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")

将语义 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")

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

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)

初始化域随机化组件:

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 文档中提供的 离线数据生成 示例是我们脚本的起点。对这个用例进行了更改,包括使用物理向场景添加对象、更新域随机化,以及向地板添加语义。我们已经为数据集生成了近 30000 张带有相应分割模板的图像。

使用 TAO 工具包进行培训、调整和优化

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

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

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

%set_env KEY=tlt_encode
%set_env GPU_INDEX=0
%set_env USER_EXPERIMENT_DIR=/workspace/experiments
%set_env DATA_DOWNLOAD_DIR=/workspace/freespace_data
%set_env SPECS_DIR=/workspace/specs

下一步是选择模型。

选择正确的预训练模型

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

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

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

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

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

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

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

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

!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 

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

!tao unet evaluate --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 倍。

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

部署 NVIDIA ISAAC ROS

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

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

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

创建 Docker 交互式工作区:

$isaac_ros_common/scripts/run_dev.sh your_ws

克隆所有包依赖项:

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

$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启动文件中的模型引擎路径和名称。
  • 重新生成并运行以下命令:
$ colcon build --packages-up-to isaac_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 都是抽象出人工智能框架复杂性的解决方案,使您能够在生产中构建和部署人工智能驱动的机器人应用程序,而无需任何人工智能专业知识。

关于作者

Amey Kulkarni 是 NVIDIA 的开发技术工程师,专注于将深度学习解决方案有效地部署到边缘。在 2019 年加入 NVIDIA 之前,他完成了马里兰大学计算机工程博士学位。他的研究兴趣是在嵌入式平台上部署数字信号处理、计算机视觉和深度学习系统。

Rishabh Chadha 是 NVIDIA 的嵌入式工程实习生—— AI ,他专注于为 NVIDIA Jetson 平台集成深度学习和机器人技术框架。他将于 2021 年毕业于伍斯特理工学院,获得机器人学硕士学位。他的兴趣主要包括深度学习、医学成像和机器人感知。Daniel Lee 是 NVIDIA 的产品经理,专注于专业可视化解决方案的软件。

审核编辑:郭婷

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

    关注

    206

    文章

    27033

    浏览量

    201392
  • NVIDIA
    +关注

    关注

    14

    文章

    4592

    浏览量

    101706
  • python
    +关注

    关注

    51

    文章

    4675

    浏览量

    83466
收藏 人收藏

    评论

    相关推荐

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

    NVIDIA Isaac机器人平台近期实现重大升级,通过引入最新的生成式AI技术和先进的仿真技术,显著加速了AI
    的头像 发表于 03-27 10:36 194次阅读

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

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

    NVIDIA Isaac将生成式AI应用于制造业和物流业

    NVIDIA Isaac 机器人平台利用最新的生成式 AI 和先进的仿真技术,加速 AI 机器人
    的头像 发表于 03-22 10:06 175次阅读
    <b class='flag-5'>NVIDIA</b> <b class='flag-5'>Isaac</b>将生成式<b class='flag-5'>AI</b>应用于制造业和物流业

    NVIDIA Isaac平台为AI机器人开发提供支持

    在今日的CES特别演讲中,NVIDIA机器人和边缘计算副总裁Deepu Talla揭示了NVIDIA及其合作伙伴如何将生成式AI机器人技术
    的头像 发表于 01-09 15:00 715次阅读

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

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

    NVIDIA再出手!加速开发边缘AI应用,迎接生成式AI新纪元

    NVIDIA 近日宣布,对适用于边缘 AI机器人NVIDIA Jetson 平台上的两个框架进行大规模扩展。NVIDIA
    的头像 发表于 11-23 17:31 644次阅读
    <b class='flag-5'>NVIDIA</b>再出手!加速<b class='flag-5'>开发</b>边缘<b class='flag-5'>AI</b>应用,迎接生成式<b class='flag-5'>AI</b>新纪元

    NVIDIA Isaac 平台先进的仿真和感知工具助力 AI 机器人技术加速发展

      NVIDIA Isaac ROS 2.0  和  NVIDIA Isaac Sim 2023.1  以及感知和仿真升级进行了发布,用以简化 ROS
    的头像 发表于 10-20 02:00 447次阅读
    <b class='flag-5'>NVIDIA</b> <b class='flag-5'>Isaac</b> 平台先进的仿真和感知工具助力 <b class='flag-5'>AI</b> <b class='flag-5'>机器人</b>技术加速发展

    从 0 到 1 搭建机器人 | 利用 NVIDIA Isaac Sim 创建虚拟环境进行仿真开发与测试

    的第一步——生成合成数据然后进行训练。从 0 到 1 搭建机器人系列文章第二篇将带领大家继续学习如何创建虚拟环境,进行机器人的仿真开发与测试。本次要使用的工具是 NVIDIA
    的头像 发表于 08-07 19:10 543次阅读
    从 0 到 1 搭建<b class='flag-5'>机器人</b> | 利用 <b class='flag-5'>NVIDIA</b> <b class='flag-5'>Isaac</b> Sim 创建虚拟环境进行仿真<b class='flag-5'>开发</b>与测试

    使用 NVIDIA TAO Toolkit 5.0 体验最新的视觉 AI 模型开发工作流程

    NVIDIA TAO 工具套件 提供了一个低代码 AI 框架,无论是新手还是数据科学专家都可以使用这个平台加速视觉 AI 模型开发。有了
    的头像 发表于 07-31 20:45 412次阅读
    使用 <b class='flag-5'>NVIDIA</b> <b class='flag-5'>TAO</b> Toolkit 5.0 体验最新的视觉 <b class='flag-5'>AI</b> 模型<b class='flag-5'>开发</b>工作流程

    从 0 到 1 搭建机器人 | 使用 NVIDIA Isaac Sim Replicator 和 TAO 套件进行数据合成和训练

    文章 将从第一步开始,拆解并串联起关于机器人创建的必要知识和所涉工具,希望能以 NVIDIA 提供的前沿解决方案为您铺平开发实践的道路。 今天我们将先从数据标记、模型训练开始,出场的是  Is
    的头像 发表于 07-17 19:45 397次阅读

    基于 NVIDIA Jetson 使用硬件在环设计机器人

    Isaac 平台 应用于这些领域的。 NVIDIA Isaac 平台由 NVIDIA Isaac Sim 和
    的头像 发表于 06-14 18:35 390次阅读
    基于 <b class='flag-5'>NVIDIA</b> Jetson 使用硬件在环设计<b class='flag-5'>机器人</b>

    使用 NVIDIA Isaac Sim、ROS 和 Nimbus 开发机器人环境

    随着现实场景中部署的自主机器人越来越多,对高保真多机器人仿真环境的需求也在迅速增长。本文将回顾笔者过去在 Cogniteam 使用的仿真多机器人的方法、目前使用  NVIDIA
    的头像 发表于 06-07 08:45 418次阅读
    使用 <b class='flag-5'>NVIDIA</b> <b class='flag-5'>Isaac</b> Sim、ROS 和 Nimbus <b class='flag-5'>开发</b>多<b class='flag-5'>机器人</b>环境

    COMPUTEX2023 | NVIDIA Isaac AMR 助力移动机器人实现高级自动化

    Isaac AMR 将很快开启客户抢先体验,可使用基于 Nova Orin 的参考机器人进行评估。 想要提高运营效率的行业对移动机器人的需求日益增长,使得移动机器人的出货量激增,
    的头像 发表于 06-04 02:25 457次阅读
    COMPUTEX2023 | <b class='flag-5'>NVIDIA</b> <b class='flag-5'>Isaac</b> AMR 助力移动<b class='flag-5'>机器人</b>实现高级自动化

    COMPUTEX2023 | 达明机器人采用 NVIDIA Isaac Sim 优化自动光学检测

    ,广达子公司达明机器人(Techman Robot)的机器人如何运用 NVIDIA Isaac Sim ,一款基于 NVIDIA Omn
    的头像 发表于 05-30 01:40 613次阅读

    使用 ROS 2 MoveIt 和 NVIDIA Isaac Sim 创建逼真的机器人模拟

    项目中使用 NVIDIA Isaac Sim 。项目的目标是提高对操纵的感知,并通过 PickNik 的商业机器人开发平台 MoveIt Studio 让
    的头像 发表于 05-12 10:45 582次阅读
    使用 ROS 2 MoveIt 和 <b class='flag-5'>NVIDIA</b> <b class='flag-5'>Isaac</b> Sim 创建逼真的<b class='flag-5'>机器人</b>模拟