资讯详情

资讯详情

Ravens Transporter Networks 实践指南:基于 PyBullet 的视觉操作仿真、数据生成与模仿学习全流程

人工智能深度学习NLP计算机视觉强化学习【免费下载链接】google-researchGoogle Research项目地址https://gitcode.com/gh_mirrors/go/google-research点击查看免费下载本文以 Google Research 开源的 Ravens 项目ravens/README.md为主线系统讲解其在 PyBullet 中构建的 10 个桌面重排tabletop rearrangement仿真任务、配套的 Gym-like API、脚本化专家演示oracle采集流程以及 Transporter Networks 从环境安装、数据生成、模型训练到评估绘图的完整实操链路。读完本文你将掌握如何在本地复现「Transporter Networks: Rearranging the Visual World for Robotic Manipulation」CoRL 2020论文的实验流程并能对照仓库源码理解每个命令行参数的底层作用。一、项目定位面向视觉操作学习的仿真基准Ravens 是一个在 PyBullet 中实现的仿真任务集合专为基于视觉的机器人操作学习设计重点聚焦抓取与放置pick and place问题。其核心设计目标有两个为模仿学习Imitation Learning提供专家演示每个任务都内置一个脚本化 oracle agenttask.oracle(env)能够自动生成高质量的专家示范数据为强化学习Reinforcement Learning提供部分奖励partial credit每个任务都实现了可逐步累积的奖励函数。从源码看任务注册表位于 ravens/ravens/tasks/init.pytasks.names字典将任务名映射到对应的任务类而环境封装位于 ravens/ravens/environment.py以hz480480Hz 物理仿真频率初始化Environment整体接口风格与 OpenAI Gym 一致。二、10 大桌面重排任务总览Ravens 内置了 10 个具有不同挑战维度的任务每个任务都包含(i) 脚本化专家演示(ii) 可提供部分积分的奖励函数。下图展示了这 10 个任务在仿真中的真实画面该图即 README 中引用的官方任务示意图各任务具体说明如下任务内容描述挑战维度(a)block-insertion拿起 L 形红色积木放入 L 形夹具中精确插入、夹具对齐(b)place-red-in-green在混杂其他物体的场景中拾取红色积木放入绿色碗中目标物体识别与分拣(c)towers-of-hanoi汉诺塔把圆盘从一座塔按规则移到另一座塔小盘只能压在大盘上多步顺序推理(d)align-box-corner拿起随机尺寸的箱子将其一角与桌面上的 L 形标记对齐对未见物体泛化(e)stack-block-pyramid依次将 6 个积木堆成 3-2-1 的彩虹色金字塔多步堆叠、闭环反馈(f)palletizing-boxes拾取同质固定尺寸箱子在托盘上交错层叠规则化码垛(g)assembling-kits拾取不同物体放到印有对应轮廓的拼装板上对未见物体泛化(h)packing-boxes拾取随机尺寸箱子紧密装入容器紧凑装箱、对未见物体泛化(i)manipulating-rope重排可变形绳索使其连接 3 边正方形的两个端点可变形物体操作(j)sweeping-piles将成堆小物体推入桌面上的目标区域非抓取式推动、闭环反馈从难度划分来看(d)、(g)、(h) 三个任务要求泛化到未见过的物体而 (c)、(e)、(f)、(h)、(i)、(j) 六个任务要求具备多步序列执行与闭环反馈能力。对应实现分散在 ravens/ravens/tasks/ 目录下每个任务一个文件如block_insertion.py、towers_of_hanoi.py、manipulating_rope.py等。所有任务继承自 ravens/ravens/tasks/task.py 中的基类其oracle(env)方法返回对应任务的脚本化专家策略。三、核心技术背景Transporter Networks本仓库是论文《Transporter Networks: Rearranging the Visual World for Robotic Manipulation》CoRL 2020的参考实现。其核心思想是机器人操作可以建模为一系列空间位移spatial displacements的推断——被移动的空间可以是物体、物体的一部分或末端执行器。Transporter Network 是一种简单的模型架构它通过重排深度特征来从视觉输入推断空间位移进而参数化机器人动作。该方法的关键特性不假设物体性objectness无需规范位姿、物体模型或关键点等先验利用空间对称性天然受益于空间上的对称归纳偏置样本效率高在视觉操作任务中其样本效率比论文中对比的多种基线高出数个数量级可表达复杂多模态策略分布能够表示抓取位置/姿态的多模态分布支持多步序列任务与 6DoF 抓取从堆叠积木金字塔、拼装未见物体到操作可变形绳索、闭环推动小堆物体。在论文实验中该方法在 10 个仿真任务上的学习速度与泛化能力均优于多种端到端基线包括使用地面真值物体位姿ground-truth object poses的策略并已在真实硬件上得到验证。四、环境安装四步搭建完整开发环境Step 1安装 Miniconda推荐 Python 3.7curl -O https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh bash Miniconda3-latest-Linux-x86_64.sh -b -u echo $\nexport PATH~/miniconda3/bin:${PATH}\n ~/.profile # 将 Conda 加入 PATH source ~/.profile conda initStep 2创建 Conda 环境并安装依赖cd ~/ravens conda create --name ravens python3.7 -y conda activate ravens sudo apt-get update sudo apt-get -y install gcc libgl1-mesa-dev pip install -r requirements.txt python setup.py install --user关键依赖锁定在 ravens/requirements.txt 中其中核心版本约束包括tensorflow2.3.0与tensorflow-addons0.11.2Transporter 模型运行框架pybullet3.0.4物理仿真引擎numpy1.18.5、scipy1.4.1数值计算opencv-python4.1.2.30、scikit-image0.17.2图像处理meshcat0.0.183D 可视化、circle-fit0.1.3圆拟合用于绳类任务absl-py0.7.0、matplotlib3.1.1、transformations2020.1.1、tensorflow_hub0.9.0、packaging19.2。python setup.py install --user将仓库注册为可导入的ravensPython 包包名ravens、版本0.0.1见 ravens/setup.py后续demos.py、train.py等脚本才能以from ravens import ...方式导入内部模块。Step 3安装 GPU 加速可选但推荐./install_cuda.sh # 适用于 Ubuntu 16.04 和 18.04 conda install cudatoolkit10.1.243 -y conda install cudnn7.6.5 -y对应脚本为仓库根目录的 ravens/install_cuda.sh。CUDA 10.1 cuDNN 7.6.5 与requirements.txt中锁定的 TensorFlow 2.3.0 相匹配。Step 4下载物体模型与资源文件cd ravens/ravens wget https://storage.googleapis.com/ravens-assets/assets.zip unzip assets.zip资源解压后即成为仿真环境的物体模型与纹理资产。此外仓库还提供了 ravens/run.sh可作为一键式流程参考。五、快速上手数据生成 → 训练 → 评估 → 绘图Ravens 的标准工作流分为四个阶段分别由 ravens/demos.py、ravens/train.py、ravens/test.py、ravens/plot.py 四个顶层脚本驱动。Step 1生成训练与测试数据python demos.py --disp --taskblock-insertion --modetrain --n10 python demos.py --disp --taskblock-insertion --modetest --n100从 demos.py 的源码可以看到该脚本的完整参数与运行逻辑参数默认值作用--disp关闭store_true是否显示仿真界面去掉该参数即为无头headless模式适合服务器训练--taskinsertion指定任务名通过tasks.names[args.task]查表实例化任务--modetraintrain或test决定数据存放目录data/{task}-{mode}--n1000目标采集的演示轮数episodes数据采集的核心流程值得注意每个任务通过task.oracle(env)获取脚本化专家专家逐帧调用agent.act(obs, info)生成动作环境以hz480初始化交互循环中记录(obs, act, reward, info)四元组种子约定训练种子为偶数、测试种子为奇数seed 2递增以保证数据可复现只保存成功演示只有当total_reward 0.99即完整达成任务目标时该 episode 才会被写入数据集demos.py。数据集的读写由 ravens/ravens/dataset.py 中的Dataset类负责每个 episode 会被拆分为color、depth、action、reward、info五类 numpy 数组持久化存储并通过文件名中的 seed 追踪已有 episode 数量n_episodes与最大 seed。Step 2训练 Transporter Networks 模型python train.py --taskblock-insertion --agenttransporter --n_demos10train.py 暴露了完整的训练参数参数默认值作用--taskinsertion训练任务名--agenttransporter使用的 agent通过agents.names注册表选择--n_demos100从训练集中随机抽取用于训练的演示数量--n_steps40000总训练步数--n_runs1从头训练的重复次数用于多次运行取统计--interval1000每训练多少步做一次验证并保存 checkpoint--gpu0使用的 GPU 索引--gpu_limitNoneGPU 显存上限单位 GB不设置则使用全部显存源码中的训练循环train.py结构为每训练interval步就在测试集上执行一次agent.validate(test_dataset, writer)随后agent.save()保存快照。TensorBoard 日志写入logs/{agent}/{task}/{时间戳}/train目录。Agent 的注册表位于 ravens/ravens/agents/init.py本仓库共提供 7 种 agenttransporter标准 Transporter、transporter_6dof6DoF 抓取变体、gt_state/gt_state_2_step使用地面真值状态、form2fitForm2Fit 方法、conv_mlp、dummy基线。--agentgt_state即可复现论文中「使用 ground-truth 位姿的强基线」对比实验。Step 3评估训练好的模型python test.py --disp --taskblock-insertion --agenttransporter --n_demos10 --n_steps1000test.py 的执行流程为加载测试数据集 → 初始化 agent 并从checkpoints/{task}-{agent}-{n_demos}-{run}加载--n_steps步时的模型 → 逐 episode 运行闭环评估测试种子由数据集的 seed 恢复保证与演示一致→ 将(total_reward, info)结果序列化保存为{name}-{n_steps}.pkl文件。其中--n_steps指定加载哪个训练步数的 checkpoint。Step 4绘制训练曲线python plot.py --disp --taskblock-insertion --agenttransporter --n_demos10plot.py 会扫描当前目录下所有{task}-{agent}-{n_demos}-*.pkl结果文件解析出每个训练步数对应的测试成功率均值与标准差打印时换算为百分比并在--disp模式下调用utils.plot生成{name}-plot.png成功率曲线图纵轴为 Testing Task Success (%)横轴为 Training Steps。可选TensorBoard 跟踪训练损失python -m tensorboard.main --logdirlogs # 浏览器打开输出提示的地址六、数据集与预训练模型下载Ravens 提供了官方生成的训练/测试数据集与预训练模型可直接下载复用wget https://storage.googleapis.com/ravens-assets/checkpoints.zip wget https://storage.googleapis.com/ravens-assets/block-insertion.zip wget https://storage.googleapis.com/ravens-assets/place-red-in-green.zip wget https://storage.googleapis.com/ravens-assets/towers-of-hanoi.zip wget https://storage.googleapis.com/ravens-assets/align-box-corner.zip wget https://storage.googleapis.com/ravens-assets/stack-block-pyramid.zip wget https://storage.googleapis.com/ravens-assets/palletizing-boxes.zip wget https://storage.googleapis.com/ravens-assets/assembling-kits.zip wget https://storage.googleapis.com/ravens-assets/packing-boxes.zip wget https://storage.googleapis.com/ravens-assets/manipulating-rope.zip wget https://storage.googleapis.com/ravens-assets/sweeping-piles.zip除checkpoints.zip各任务预训练模型外其余压缩包分别对应 10 个任务的数据集。结合上文可知下载的数据集应解压至data/{task}-train/data/{task}-test目录checkpoints 应解压至checkpoints/目录agent 的models_dir指向checkpoints/{name}见 ravens/ravens/agents/transporter.py即可被 demos.py、train.py、test.py 直接读取。七、任务的 MDP 形式化定义每个任务都是一个 MDP其转移transition具有以下统一结构组成内容Observations观测原始 RGB-D 图像以及相机参数位姿与内参Actions动作一个由机器人调用的原始函数primitive function及其参数Rewards奖励一个成功 episode 的奖励总和归一化为 1Info附加信息物体的 6D 位姿、尺寸与颜色观测与动作的具体处理在源码中有清晰对应观测处理Transporter agent 的get_image方法调用utils.get_fused_heightmap将多视角 RGB-D 观测融合为色图 高度图再沿通道拼接成(320, 160, 6)的输入张量ravens/ravens/agents/transporter.py动作原语机器人动作由 ravens/ravens/primitives.py 中的原始函数封装如抓取、放置、推动agent 输出的参数如像素坐标、旋转角、高度经由相机投影转换为机器人指令奖励设计部分奖励机制意味着 agent 在每一步都可能获得累积分数只有完整完成目标时 episode 总奖励才等于 1——这也是 demos.py 用total_reward 0.99判定演示成功与否的原因。八、仓库结构与进一步阅读ravens/ ├── demos.py # 数据采集oracle 生成专家演示 ├── train.py # 训练入口agent 数据集 checkpoint ├── test.py # 评估入口加载 checkpoint 闭环测试 ├── plot.py # 结果绘图解析 pkl 生成成功率曲线 ├── run.sh # 一键流程脚本 ├── install_cuda.sh # CUDA/cuDNN 安装脚本 ├── setup.py # ravens 包安装v0.0.1 ├── requirements.txt # Python 依赖锁定 ├── docs/tasks.png # 10 任务示意图 └── ravens/ ├── environment.py # PyBullet 环境封装Gym-like API ├── dataset.py # RGB-D 图像数据集类 ├── cameras.py # 相机配置如 RealSenseD415 ├── primitives.py # 机器人动作原语 ├── grippers.py # 夹爪模型 ├── agents/ # 7 种 agenttransporter / gt_state / form2fit 等 ├── models/ # 网络模型attention / transport / matching 等 ├── tasks/ # 10 个任务的实现与 oracle 策略 └── utils.py # 高度图融合、绘图等工具函数想深入理解 Transporter 的核心网络结构可以继续阅读 ravens/ravens/models/transport.pyTransport 模块通过特征重排实现空间位移推断、ravens/ravens/models/attention.pyAttention 模块先定位抓取像素与 ravens/ravens/models/matching.py旋转匹配模块。这几个模块共同构成了「先 attention 定位、再 transport 旋转匹配」的两阶段 Transporter 推理管线是理解论文方法在实际代码中落地的关键入口。结语Ravens 提供了一套完整、可复现的视觉操作学习实验框架从 10 个具备 oracle 与部分奖励的仿真任务到数据采集、训练、评估、绘图的流水线脚本再到多种 agent 与模型的源码实现覆盖了模仿学习与强化学习两种研究范式。你可以直接复用官方预训练模型与数据集快速复现论文结果也可以基于 ravens/ravens/tasks/task.py 的基类自定义新任务或基于 ravens/ravens/agents/init.py 的注册表接入自己的新算法将其作为视觉操作研究的统一实验平台。赞分享人工智能深度学习NLP计算机视觉强化学习【免费下载链接】google-researchGoogle Research项目地址https://gitcode.com/gh_mirrors/go/google-research点击查看免费下载相关推荐Isaac Lab Mimic 合成数据生成与模仿学习实战从遥操作采数据到训练 BC RNN 策略Isaac Lab Mimic 合成数据生成与模仿学习实战从遥操作采数据到训练 BC RNN 策略 本指南围绕 Isaac Lab Isaac Lab Mi人工智能强化学习机器人具身智能深度学习创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
觉得有用,分享给同行:

为您的企业打造数字门面

稳重轻奢商务风格,端正雅致视觉,长效耐看不易过时。

立即咨询 →