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 的产品经理,专注于专业可视化解决方案的软件。

审核编辑:郭婷

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

    关注

    213

    文章

    30651

    浏览量

    219859
  • NVIDIA
    +关注

    关注

    14

    文章

    5513

    浏览量

    109160
  • python
    +关注

    关注

    57

    文章

    4860

    浏览量

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

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

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

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

    NVIDIA Jetson + Isaac SDK 人形机器人方案全面解析

    NVIDIA Jetson + Isaac SDK 人形机器人方案全面解析 一、方案概述 Jetson 硬件平台 :提供 AI + GPU 运算能力,配合多传感器、视觉、传动控制体系
    的头像 发表于 07-30 16:12 1886次阅读

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

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

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

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

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

    NVIDIA 发布了机器人仿真参考应用 Isaac Sim 和机器人学习框架 Isaac Lab 的开发
    的头像 发表于 07-04 14:23 1519次阅读

    NVIDIA Isaac Sim与NVIDIA Isaac Lab的更新

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

    NVIDIA 通过云端至机器人计算平台驱动人形机器人技术,赋能物理 AI

    机器人推理与技能基础模型的首次更新;用于合成运动生成的 NVIDIA Isaac GR00T-Dreams Blueprint;以及用于加速人形机器人
    发表于 05-19 17:53 1700次阅读
    <b class='flag-5'>NVIDIA</b> 通过云端至<b class='flag-5'>机器人</b>计算平台<b class='flag-5'>驱动</b>人形<b class='flag-5'>机器人</b>技术,赋能物理 <b class='flag-5'>AI</b>

    盘点#机器人开发平台

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

    NVIDIA Isaac 是英伟达推出的综合性机器人开发平台

    NVIDIA Isaac 是英伟达推出的综合性机器人开发平台,旨在通过 GPU 加速、物理仿真和生成式 AI 技术,加速自主移动
    的头像 发表于 04-02 18:03 2009次阅读

    NVIDIA Isaac GR00T N1开源人形机器人基础模型+开源物理引擎Newton加速机器人开发

    NVIDIA Isaac GR00T N1开源人形机器人基础模型+开源物理引擎Newton加速机器人开发
    的头像 发表于 03-20 16:56 1306次阅读

    NVIDIA发布全球首个开源人形机器人基础模型Isaac GR00T N1

    NVIDIA 宣布推出一系列全新技术,助力人形机器人开发。其中包括全球首个开源且完全可定制的基础模型NVIDIA Isaac GR00T N
    的头像 发表于 03-20 14:34 1253次阅读

    NVIDIA宣布NVIDIA Isaac重要更新

    ,更为全球开发者提供了更加强大、高效的工具,以加速AI机器人开发进程。 NVIDIA Isaac
    的头像 发表于 01-17 14:45 850次阅读

    简述NVIDIA Isaac的重要更新

    在 2025 CES,NVIDIA 宣布了对NVIDIA Isaac的重要更新。NVIDIA Isaac 是一个由加速库、应用框架和
    的头像 发表于 01-17 09:57 1785次阅读
    简述<b class='flag-5'>NVIDIA</b> <b class='flag-5'>Isaac</b>的重要更新

    NVIDIA发布Isaac GR00T Blueprint,加速人形机器人开发

    NVIDIA创始兼首席执行官黄仁勋亲自揭晓了NVIDIA Isaac GR00T Blueprint的发布。这一Blueprint旨在加速下一代人形
    的头像 发表于 01-13 11:01 1159次阅读

    NVIDIA发布人形机器人重磅更新!Isaac GR00T Blueprint厉害在哪?

    电子发烧友网报道(文/吴子鹏)在备受瞩目的CES 2025上,NVIDIA机器人领域宣布了重磅更新——Isaac GR00T Blueprint,帮助开发者更高效、高质量地打造人形
    的头像 发表于 01-08 18:14 5106次阅读
    <b class='flag-5'>NVIDIA</b>发布人形<b class='flag-5'>机器人</b>重磅更新!<b class='flag-5'>Isaac</b> GR00T Blueprint厉害在哪?