前言
我最近一直在看各种人形paper(本文起笔于24年10.23日,后续多次更新),很多工作都想尝试,但有些系统开源了 但代码不全,而且不同的工作 换个人形 还不一定好work
- 正因为这里面的坑比较多,所以我一直在看各家的算法,看看他们是怎么解决一系列落地问题的,毕竟很多问题大家都会遇到
- 刚好我自己在视频号上看到了iDP3(且友人丁研究员也和我说了这个iDP3),于此便有了本文
如此文《UMI——斯坦福刷盘机器人:通过手持夹爪革新数据收集方式,且使用Diffusion Policy预测动作(含代码解读)》的开头所说,我司于24年12月份起 一直想借助iDP3做通用化改写,使得一套策略控制各种机器人
即
- UMI对硬件的解耦不够,故为做国产替代,有两种方法:
1) 相对直接粗暴的是更改通讯脚本 以匹配目标机械臂,比如可以根据UR5e的更改——做硬解耦,当然 缺点也很明显,即每来一套机械臂,就得比较费劲的写对应的通讯脚本
2) 相对从长计议的是改造通讯方式- 而后者改造通讯方式又存在两种路径,一个是改成ROS,一个是做通用化改写
对于ROS,因为UMI的脚本不是基于ROS的,而是单独通讯的
为了解除这种强依赖,可以尝试ROS,使得所有机械臂都能用(避免每来一套机械臂,就得比较费劲的写对应的通讯脚本),且还能和Isaac sim集成性非常好,可以做强化学习,当然,缺点是实时性比较差
ROS之外,第二种则是针对每家机器人的TCP/IP通讯协议做通用化改写,具体而言是:实际改写时 目标是去适配iDP3,从而借助iDP3达到对外通用化的目的,使得能直接控制电机,使得一套iDP3的策略操纵多种机械臂
- 如何理解这个「实际改写时 目标是去适配iDP3,从而借助iDP3达到对外通用化的目的」呢?
换言之,我们是借助iDP3的代码来做通用化改写的,其本质在于iDP3 留好了一个和各种机械臂通讯的接口——比如此文里分析的deploy.py以及其他部分,使得不论对接哪种机械臂,只需要发送对应信息 就可以接收了「相当于虽然还是得根据机器人写对应通讯脚本,但工作量小很多,且也模块化了」,而不是UMI只能在上位机硬改
故我们 准备再落地下斯坦福的这个iDP3,也算是在机械臂之外,进一步布局人形研发
- 具体的研发计划如下表所示(截止到25年1月中旬,以下9项已完成前4项)
包括如上面所说的,24年12月份起,我们一直在想办法把各个模型/算法整合到一个统一的框架中,欢迎人形厂商、科研机构一块合作搞(有意私我) - 然天不负有心人,终于在25年1.12日,我们idp3的复现迎来大进展,idp3架构拆解完了
且在idp3的基础上优化出来了一个适配各种数据、各种机械臂的通用策略框架——相当于可以同时跑umi、dexcap、dp3、ipd3这4个模型,更可以同一套策略控制各种机器人
该工作虽然算不上特别重大,但至少在国内也称得上是独创且首创了,具体而言是在ipd3框架的基础上做通用化改造:涉及数据流适配(比如打造一个数据转换器,使得其他模型如dexcap的数据可以统一作为idp3的训练数据)、通讯协议、网络架构
然后,过年之前找下机器,看年前是否来得及实际部署到真机
总之,我司在机器人这个方向目前侧重:国内外顶级前沿成果的复现,及在实际业务场景的落地——按需做二次或定制开发
另,考虑到绝大部分工厂都将在今2025年开始做一系列智能升级、智能改造,故人形之外,25年上半年,在24年工作的基础上,我司七月在线南京团队领头,继续不断优化以下4大场景:
- 物料无序分拣
- 线缆插拔 (项目组里包含清华、国防科大等院校的博士生)
- 零部件智能装配 (和国科大一教授团队合作)
- 打螺钉
第一部分 DP3:3D扩散策略(3D Diffusion Policy)
24年3月,来自上海期智研究院、上交、清华大学、上海AI实验室的研究者提出了3D Diffusion Policy——将3D视觉表示与扩散策略「关于扩散策略,详见此文:Diffusion Policy——斯坦福机器人UMI所用的扩散策略:从原理到其编码实现(含Diff-Control、ControlNet详解)」相结合,其通过简单的 3D 表征实现可推广的视觉运动策略学习
- 作者团队包括Yanjie Ze1∗、Gu Zhang12∗、Kangning Zhang12、Chenyuan Hu13、Muhan Wang13、Huazhe Xu314等人
值得一提的是,一作Yanjie Ze目前是斯坦福博士生,其目前的指导老师是吴嘉俊(且他俩和其他研究者后续又提出了针对DP3的改进iDP3,详见下文第二部分),此前,曾受王小龙、徐华哲等人指导 - 其对应的论文为:3D Diffusion Policy: Generalizable Visuomotor Policy Learning via Simple 3D Representations
- 其对应的项目地址为:3d-diffusion-policy.github.io,其对应的GitHub为:YanjieZe/3D-Diffusion-Policy
至于数据层面,则开源了仿真数据和真实数据
总之,DP3使用简单高效的MLP编码器将稀疏采样的点云编码为紧凑的3D表示。随后,DP3将随机噪声去噪为连贯的动作序列,该序列依赖于此紧凑的3D表示和机器人姿态「DP3 encodes sparsely sampled point clouds into a compact 3D representation using a straight forward and efficient MLP encoder. Subsequently,DP3 denoises random noise into a coherent action sequence,conditioned on this compact 3D representation and the robot poses.」
1.1 三大相关工作:扩散模型、视觉模仿学习、灵巧技能
1.1.1 机器人中的扩散模型
扩散模型是一类生成模型
- 通过逐步将随机噪声转化为数据样本,在高保真图像生成方面取得了巨大成功 [23-DDPM, 63, 51-SD奠基论文High-resolution image synthesis with latent diffusion models, 62-DDIM]
- 由于其卓越的表现力,扩散模型最近被应用于机器人领域,包括
强化学习 [70-Diffusion policies as an expressive policy class for offline reinforcement learning, 2-Is conditional generative modeling all you need for decision-making?]
模仿学习 [10- Diffusion policy, 39-Imitating human behaviour with dif fusion models, 50- Goal-conditioned imitation learning using score-based diffusion policies, 72, 64,41- Consistency policy: Accelerated visuomotor policies via consistency distillation]
奖励学习 [25-Diffusion reward: Learning rewards via conditional video diffusion, 37]
抓取 [71- Learning score-based grasping primitive for human-assisting dexterous grasping, 66, 61]
运动规划 [52-Edmp: Ensemble-of-costs-guided diffusion for motion planning, 27- Planning with diffusion for flexible behavior synthesis] 等领域
在本项工作中,作者专注于将视觉运动政策表示为条件扩散模型,称为扩散政策,遵循 [10, 39] 中建立的框架。与主要关注图像和状态作为条件的先前方法不同,作者开创性地将三维条件引入扩散政策中
1.1.2 视觉模仿学习
模仿学习为机器人获取类似人类的技能提供了一种高效的方法,通常依赖于专家演示的大量观察-动作对
鉴于在现实世界中准确估计物体状态的挑战,图像等视觉观察已成为一种实用的替代方案。尽管基于2D图像的策略[38, 11, 10-Diffusion policy, 35, 16,56, 68, 15]在该领域占据主导地位,但3D的重要性正日益受到重视[60, 82, 80-Visual reinforcement learning with self-supervised 3d representations, 14- Rvt: Robotic view transformer for 3d object manipulation, 13, 28, 69]
- 最近的基于3D的策略,包括PerAct [60]、GNFactor [82]、RVT [14]、ACT3D [13]和NeRFuser [74],在低维控制任务中展示了显著的进展
然而,这些工作面临两个主要挑战:
1 不切实际的设置。这些方法将模仿学习问题转换为使用关键帧姿态提取的预测和规划范式。虽然有效,但这种公式化不太适合高维控制任务
2 推理速度慢。这些方法的复杂架构导致推理速度缓慢。例如,PerAct [60]的推理速度为2.23 FPS,使其难以处理需要密集指令的任务,如高度动态的环境 - 另一个密切相关的工作3D Diffuser Actor [28- 3d diffuser actor: Policy diffusion with 3d scene representations]主要由于使用语言token的注意力和任务设置的不同,运行速度为1.67 FPS
推理速度取决于多个因素,例如使用的摄像机视角数量、像素输入观测大小、扩散时间步数和预测的时间范围
由于两篇论文在不同的设置上进行测试,3D Diffuser Actor的作者[28]使用了DP3的代码在CALVIN上进行设置,这是一个多任务语言条件设置。他们为DP3配备了对语言token的注意力,与他们的模型相同,以便进行公平比较
他们使用了两个摄像机进行反投影以获得点云。他们在同一台NVIDIA 2080 Ti GPU上运行了DP3和3D Diffuser Actor
3D DiffuserActor的推理时间为600ms,预测6个动作步骤
DP3的推理时间为581ms,预测4个动作步骤
因此,3D Diffuser Actor在CALVIN上的控制频率高于DP3
总之,与这一系列工作相比,作者努力开发一种通用且快速的3D策略,能够解决更广泛的机器人任务范围,涵盖高维和低维控制任务「顺带说句,如论文第7页左下角所述——(f) 在低维控制任务中,DPM-solver++[32]作为噪声采样器与DDIM具有竞争力,而DPM-solver++在处理高维控制任务时表现不佳」
1.1.3 学习灵巧技能
在机器人领域中,实现类似人类的操作技能一直是机器人研究人员追求的长期目标
- 强化学习在这一努力中发挥了关键作用,使得拥有灵巧手的机器人能够掌握各种任务
例如倒水 [47, 81]、开门[49, 21, 8]、旋转物体 [44, 76, 78, 45]、重新定位物体 [18, 7, 6]、旋转笔 [33]、抓取工具 [1]、执行交接任务 [83, 24] 和搭建乐高积木 [9] - 模仿学习则提供了另一条途径
诸如 DIME [3] 和DexMV [47,详见此文《从根据视频学习的SeeDo(VLM生成规划和代码),到人形OKAMI、Harmon(重定向中VLM校正动作)》的1.2节] 等方法通过重定目标将人类手部动作转化为机器人动作,并通过人类视频进行学习
然而,DP3的工作与这些特定的设计中心方法有所不同。他们展示了,通过改进模仿学习算法本身,可以通过最少的演示来获得这些复杂技能
1.2 DP3的整体方法:先感知后决策
给定一小组包含复杂机器人技能轨迹的专家演示,作者希望学习一个视觉运动策略,将视觉观测
映射到动作
,使得我们的机器人不仅能再现技能,还能超越训练数据进行泛化
为此,作者引入的3D扩散策略(DP3),主要由两个关键部分组成「如下图所示,上:在训练阶段,DP3使用专家演示以端到端的方式同时训练其感知模块和决策过程。在评估期间,DP3基于环境的视觉观测来确定动作。下:DP3通过单视点云感知其环境。这些通过一个轻量级的MLP编码器被转换为紧凑的3D表示。随后,DP3基于这些3D表示和机器人的状态,使用基于扩散的骨干网络生成动作」:
- 感知
DP3通过点云数据感知环境,并通过高效的点编码器将这些视觉观测处理成视觉特征 - 决策
DP3利用富有表现力的扩散策略[10]作为动作生成的骨干,它在3D视觉特征条件下生成动作序列
为了更好地说明DP3的泛化能力,作者首先给出一个简单的例子
他们使用MetaWorld Reach任务[77]作为他们的测试平台。在此任务中,目标是让机械手准确到达指定的目标点。为了评估模仿学习算法不仅在拟合训练数据方面的有效性,还能泛化到新场景,他们在三维空间中可视化了训练点和成功的评估点,如下图图3所示
- 他们观察到,仅用五个训练点,DP3就能到达分布在三维空间中的点,而对于基于二维的方法,Diffusion Policy[10]和IBC[11]学习在类似平面的区域内到达,而BCRNN[35]未能覆盖空间,这个例子展示了DP3的优越泛化性和效率,尤其是在可用数据有限的情况下
- 总之,当使用3D数据时,机器人对空间的感知能力显著提高,能够更好地达到均匀分布在空间中的目标点。而使用2D数据时,机器人只能在某个平面上聚焦,无法在整个空间内均匀分布,这证明了3D数据在空间理解上的优势
1.2.1 感知:使用轻量级的MLP网络将点云编码为紧凑的3D表示
简而言之,按照原论文的附录A所说,DP3的输入包括视觉观测和机器人姿态。视觉观测是一个无颜色的点云,通过最远点采样(FPS)从原始点云下采样得到。在所有模拟和真实世界任务中,作者使用512或1024个点。且使用作者设计的DP3编码器将点云编码为紧凑的表示
具体而言,DP3专注于仅利用单视角相机进行策略学习所有任务,这与之前的工作[10, 18]不同,之前的工作是在机器人周围设置多个摄像头。这主要是为了在实际任务中具有实用性
- 用点云表示3D场景(涉及3D表示的选择)
3D场景可以用不同的方式表示,例如RGB-D图像、点云、体素[7]、隐函数[36]和3D高斯[29]
The 3Dscene could be represented in different ways, such as RGB-D images, point clouds, voxels [7], implicit functions [36],and 3D gaussians [29].
其中,DP3使用稀疏点云作为3D表示「DP3 uses sparse pointclouds as the 3D representation.」
因为如作者的消融实验所示(见下表表IV-即表4),点云被发现比其他显式表示更有效,例如RGB-D、深度和体素Voxels
故对于模拟和现实世界,作者从单个摄像头获取大小为84×84的深度图像。然后使用摄像头的外参和内参将深度转换为点云
再进一步说明下,如原论文第6页左下角所示消融实验所称,为了比较不同的3D表示选择,作者还实现了其他3D表示——包括RGB-D、深度和体素。且还与oracle状态进行比较,oracle状态包括物体状态、target goals和机器人速度——除了机器人姿势之外
RGB-D和深度图像使用与Diffusion Policy相同的图像编码器进行处理,而体素表示则使用VoxelCNN,如[7]中实现的那样。如上表表IV所示,这些替代的3D表示不及DP3
另,注意到RGB-D和深度图像是接近的,但与点云不可比,表明深度信息的正确使用是至关重要的。此外,作者观察到点云和oracle状态非常具有竞争力,表明点云可能有助于从示范中学习最佳策略
此外,为了更好的外观泛化,不使用颜色通道「如论文第7页左下角所述——(e) 移除颜色通道确保了外观的稳健泛化」
We then convert depth into point clouds with camera extrinsics and intrinsics. We do not use color channels for better appearancegeneralization - 点云处理
由于从深度转换的点云可能包含冗余点,例如来自桌子和地面的点,作者裁剪掉这些点,只保留在边界框内的点「因为通过作者的实验证明(论文第7页左下角)——(a)裁剪点云有助于大幅提高准确性」
且进一步通过最远点采样(FPS,[42])对点进行下采样,这有助于充分覆盖3D空间,并减少点云采样的随机性,与均匀采样相比
另,在实践中,作者发现下采样512或1024点足以满足模拟和现实世界中的所有任务 - 将点云编码为紧凑表示(涉及到点云编码器的选择)
然后作者使用轻量级的MLP网络将点云编码为紧凑的3D表示,如图2所示
该网络被称为DP3编码器,概念上简单:它由一个三层MLP、一个最大池化函数作为order-equivariant操作操作来池化点云特征,以及一个投影头将特征投影到紧凑向量中——如论文第7页左下角所述——(d) DP3编码器中的投影头通过将特征投影到低维度来加速推理,而不影响准确性
The network, termed as DP3 Encoder, is conceptually simple: it consists of a three-layer MLP, a max-pooling function as an order-equivariant operation to pool point cloud features, and aprojection head to project the features into a compact vector
且LayerNorm层交错使用以稳定训练[22]「(如作者实验证明(论文第7页左下角)——(b) 引入LayerNorm层可以帮助在不同任务中稳定训练[22, 4]」,最终的3D特征 记为,只有64维
总之,这个简单的编码器——几层线性加几层非线性的MLP,甚至可以超越预训练的点编码器point encoders,如PointNeXt [46-Pointnext: Revisiting pointnet++ with improved training and scaling strategies,是处理无序点集合的经典方法]
而这与[20-On pre-training for visuo-motor control:Revisiting a learning-from-scratch baseline]的观察结果一致,即精心设计的小编码器在视动控制任务中优于预训练的大编码器「where a properly designed small encoder is better than pre-trained large encoders in visuomotor control tasks.」
其实,对于点云编码器的选择
- 在消融实验中,作者还对比了PointNet [42]、PointNet++ [43]、PointNeXt [46] 和Point Transformer [84],且还包括了PointNet++和PointNeXt的预训练模型
结论是这些复杂模型和预训练模型确实都无法与DP3编码器竞争——如下表表V-即表5 所示
- 此外,为了阐明DP3编码器与常用点云编码器(例如PointNet)之间的性能差异,作者甚至逐步修改PointNet以使其与DP3编码器对齐
比如通过下表VI-表6中展示的大量实验「Conv:使用卷积层或线性层。w/ T-Net:有或没有T-Net。w/ BN:有或没有BatchNorm层。1024 Dim:在投影层之前将特征维度设置为1024或256」作者发现PointNet中的T-Net和BatchNorm层是其效率的主要抑制因素。通过省略这两个元素,PointNet获得了72.3的平均成功率,与DP3编码器实现的78.3相当
对于T-Net的一个合理解释是,作者的控制任务使用固定摄像头,不需要T-Net的特征变换
且进一步用低维特征替换高维特征不会对性能造成太大影响(72.5 72.3),但会提高速度
最终,下表表VII-表7汇总了DP3的全部优秀设计——来自论文第7页左下角
- (a)裁剪点云有助于大幅提高准确性
- (b) 引入LayerNorm层可以帮助在不同任务中稳定训练[22, 4]
- (c) 噪声采样器中的样本预测带来更快的收敛速度——此点下文会介绍,不急
- (d) DP3编码器中的投影头通过将特征投影到低维度来加速推理,而不影响准确性
- (e) 移除颜色通道确保了外观的稳健泛化
- (f) 在低维控制任务中,DPM-solver++[32]作为噪声采样器与DDIM具有竞争力,而DPM-solver++在处理高维控制任务时表现不佳
1.2.2 决策:基于卷积网络的扩散策略——将随机高斯噪声转化为连贯的动作序列
简而言之,按照原论文的附录A所说,在实现细节上,从点云和机器人姿态编码的表示被连接成一个维度为128的表示
随后,决策主干在此表示的条件下生成动作。决策主干是一个基于卷积网络的扩散策略,将随机高斯噪声转化为连贯的动作序列
- 在实现中,作者使用了[10-扩散策略]提供的官方PyTorch框架。实际上,该模型设计用于根据Nobs观察到的时间步预测一系列H动作,但在推理过程中只执行最后的Nact动作
且作者设置H=4,Nobs=2,Nact=3用于DP3和基于扩散的基线 - 原始扩散策略通常采用较长的时间跨度,主要是因为其任务中的时间步更密集
在下表表XV中,作者展示了在作者的任务中短时间跨度和长时间跨度之间没有显著差异
此外,考虑到现实世界机器人操作中可能出现的突然干扰,作者选择采用较短的时间跨度 - 归一化
作者将每个动作维度和每个观察维度的最小值和最大值独立缩放到[-1,1]。将动作归一化到[-1,1]是DDPM和DDIM预测的必要条件,因为它们会将预测剪裁到[-1,1]以保持稳定性
具体而言
在条件动作生成上
- DP3中的决策模块被设计为一个条件去噪扩散模型[23-DDPM, 10- Diffusion policy, 39-Imitating human behaviour with diffusion models],该模型基于3D视觉特征
和机器人姿态
进行条件化,然后将随机高斯噪声去噪为动作
- 具体来说,从高斯噪声
开始,去噪网络
进行
次迭代,逐步将随机噪声
去噪为无噪声的动作
其中是高斯噪声,
、
和
是
的函数,并依赖于噪声调度器。这个过程也被称为反向过程[23]
在训练目标上
为了训练去噪网络,作者从数据集中随机采样一个数据点
并在数据点上进行扩散过程[23]以获得在第
次迭代
时的噪声
训练目标是预测添加到原始数据上的噪声
其中和
是执行一步噪声添加的噪声计划[23]
在实现细节上
作者使用基于卷积网络的扩散策略[10],且使用DDIM[62]作为噪声调度器,并使用样本预测代替epsilon预测「因为如论文第7页左下角所述——(c) 噪声采样器中的样本预测带来更快的收敛速度,如下图7所示」,以便更好地生成高维动作,训练时使用100个时间步长,推理时使用10个时间步长
由于MetaWorld任务的简单性,作者训练1000个周期,而对于其他模拟和现实世界任务,作者训练3000个周期,DP3和所有基线的批量大小为128
1.3 实验背后的设置:仿真实验与真实世界实验
1.3.1 仿真实验
对于仿真基准测试
尽管如今的仿真环境越来越逼真[34, 73, 65, 85],但仿真与现实场景之间仍然存在显著差距[80, 30, 7]
这一差异突出了两个关键方面:(a) 真实机器人实验的重要性和(b) 进行大规模多样化仿真任务以实现更科学的必要性
- 因此,对于模拟实验,作者总共收集了来自7个领域的72个任务,涵盖了多种机器人技能。这些任务从复杂场景如双手操作[8]、可变形物体操作[31]和关节物体操作[5],到较简单的任务如平行夹持器操作[77]
- 这些任务使用不同的模拟器构建,包括MuJoCo[65]、Sapien[73]、IsaacGym[34]和PlasticineLab[26],确保作者的基准测试不受模拟器选择的限制。MetaWorld[77]中的任务根据[55]被分类为不同的难度级别
下表表III展示了一个简要概述,包含DP3 的任务集,包括 Adroit [49]、Bi-DexHands[8]、DexArt [5]、DexDeform [31]、DexMV [47]、HORA [44]、MetaWorld [77]
至于3D观察结果则如图4所示「模拟中的3D视觉观察。我们对一些模拟任务进行了采样,并展示了这些任务中的下采样点云」
对于专家演示
在DexDeform中使用人工遥控数据;在MetaWorld中使用脚本策略;其他领域的轨迹是通过使用强化学习RL算法训练的代理收集的,其中在Adroit中使用VRL3 [67];在所有其他领域中使用PPO [53]
且作者使用RL代理生成成功的轨迹,并确保所有模仿学习算法都使用相同的演示。专家的成功率在附录C中给出
对于基线
本研究的主要重点是强调3D模态在扩散策略中的重要性。为此,主要基线是基于图像的扩散策略[10],简称为扩散策略
此外,作者还与IBC [11]、BCRNN [35]及其3D变体进行比较。然而,鉴于这些算法在我们的挑战性任务中显示出有限的效果,作者仅在10个任务上对其进行评估(参见表II)。我们强调,在所有实验中,所有2D和3D方法的图像和深度分辨率是相同的,以确保公平比较
对于评估指标
作者为每个实验运行3个种子,种子编号为0,1,2。对于每个种子,每200个训练周期评估20个回合,然后计算最高5个成功率的平均值。最终,报告3个种子中成功率的均值和标准差
1.3.2 真实世界实验
DP3在两种不同的机器人上进行四项任务的评估,包括一个Allegro手和一个夹持器,且使用一个RealSense L515相机来获取真实世界的视觉观测
所有任务在下图图10中可视化
并在表III中总结——真实机器人任务,有ActD: 该领域的最高动作维度。#Demo: 该领域中每个任务使用的专家演示数量。Art: 关节物体。Deform: 可变形物体
最后,再说下两个泛化:——实例泛化、视图泛化
- 实例泛化
其实,实现对形状、大小和外观不同的多种实例的泛化,与仅仅是外观泛化相比,提出了更大的挑战
在下表表XI中,作者展示了DP3如何有效管理各种日常物品。这一成功主要归功于点云的固有特性
具体而言,使用点云可以使策略不易混淆,尤其是在这些点云被下采样时。这一特性显著增强了模型适应不同实例的能力 - 视图泛化。在不同视图中泛化基于图像的方法尤其具有挑战性[75],而从多个视图中获取训练数据可能耗时且昂贵[82, 58]
作者在表XII中展示了DP3有效地解决了当相机视角稍微改变时的泛化问题。需要注意的是,由于相机视角发生变化,作者手动变换点云并调整点云的裁剪空间
由于网络的鲁棒性,精确的变换不是必需的。然而,重要的是要承认,尽管网络可以在相机视角的小变化中实现泛化,但处理显著的变化可能会很困难
这点,也算是DP3本身的局限性,所以才有了后来即如下文所述的:斯坦福iDP3——改进3D扩散策略以赋能人形机器人的训练:不再依赖相机校准和点云分割
第二部分 iDP3:Improved 3D Diffusion Policy
24年10.14日,来自斯坦福大学、西蒙弗雷泽大学、宾夕法尼亚大学、伊利诺伊大学厄巴纳-香槟分校、卡内基梅隆大学的研究者们(Yanjie Ze1、Zixuan Chen2、Wenhao Wang3、Tianyi Chen3、Xialin He4、Ying Yuan5、Xue Bin Peng2、Jiajun Wu1),提出了改进的3D扩散策略iDP3
- 其对应的论文为《Generalizable Humanoid Manipulation with Improved 3D Diffusion Policies》
- 其对应的项目网址为:humanoid-manipulation.github.io
这是其对应的learning代码:Improved-3D-Diffusion-Policy,这是其对应的遥操作代码:Humanoid-Teleoperation - 至于数据层面的话,idp3 并未把数据开源,故我司七月在复现这个iDP3时
一方面,通过VR实际采集所需的真实数据
二方面,用上DP3(如上文第一部分所述,DP3开源了仿真数据和真实数据),和dexcap开源的数据
update,作者后来于24年11月4日开源了他们收集的完整数据和对应的checkpoint(全部 3 个任务):drive.google.com/drive/folders/1f5Ln_d14OQ5eSjPDGnD7T4KQpacMhgCB
而iDP3的训练数据示例training_data_example.zip见:training_data_example.zip
相当于原始数据示例存储在 Google Drive 中
通过数据转换流程转换之后便可得到iDP3格式的训练数据(训练数据示例也存储在 Google Drive 中)
2.1 iDP3与之前扩散策略、3D扩散策略的不同
2.1.1 视觉运动策略学习
最近,越来越多的趋势是通过端到端方式学习视觉运动策略来解决机器人问题[12],[17-3d diffusion policy: Generalizable visuomotor policy learning via simple 3d representations],[25]–[28],其中主要有两种途径:
- 模仿学习[12,即Diffusion policy],[15]–[21],[29]–[34]
- sim-to-real 的强化学习[35]–[44],其中第41篇所述的UMI on Legs,详见此文第一部分
在此之前
- 基于图像的模仿学习方法,例如Diffusion Policy[12],已经取得了显著的成功[10], [17], [22],[30], [45],但其有限的泛化能力限制了它们在复杂真实环境中的应用
- 最近的一些工作旨在解决这些限制[17], [22], [45]–[47]。其中,3D扩散策略(DP3,[17])展示了显著的泛化能力和在多样化机器人任务中的广泛适用性[10], [11],[22], [23]
尽管如此,3D视觉运动策略本质上依赖于精确的相机校准和细粒度的点云分割,比如[17],[18], [21], [39], [47],这限制了它们在类人机器人等移动平台上的部署 - 另与iDP3类似的工作也有一些,比如Maniwhere [37]通过大规模模拟数据实现了真实场景的泛化。然而,由于显著的模拟到现实的差距,他们仅展示了在未见过的场景中推送等任务,而不是像拾取和放置这样的富含接触的任务
机器人实用模型[48-Transic: Sim-toreal policy transfer by learning from online correction]也通过模仿学习将技能泛化到新环境中,而他们必须使用从20个场景收集的数据进行场景泛化,相比之下iDP3只使用1个场景
此外,VISTA [47]使用视图合成模型展示了令人印象深刻的视图泛化。与他们复杂的流程相比,iDP3的自我中心3D表示自然地实现了稳健的视图不变性
2.1.2 iDP3所在系统的概述
iDP3所在的系统主要由四个部分组成:人形机器人平台、数据收集系统、视觉运动策略学习方法、现实世界的部署,如下图所示
在学习部分,作者开发了改进的3D扩散策略(iDP3)作为通用机器人的视觉运动策略
2.1.3 iDP3是如何对3D扩散策略做改进的
如前所述,3D扩散策略是一种有效的3D视觉-运动策略,将稀疏点云表示与扩散策略相结合。尽管DP3在广泛的操作任务中展示了令人印象深刻的结果,但由于其固有依赖于精确的相机校准和细致的点云分割,无法直接部署在通用机器人上,如类人机器人或移动操作器
此外,为在更复杂的任务中有效执行,DP3的准确性需要进一步提高
最终作者改进的算法被称为改进的3D扩散策略(iDP3),其重点做了以下改进
- 以自我为中心的3D视觉表示——相当于将世界坐标调整成以机器人为中心的坐标系
DP3利用世界坐标系中的3D视觉表示,便于目标对象的分割[17],[53]。然而,对于类人机器人等通用机器人,相机安装位置并不固定,使得相机校准和点云分割变得不切实际
为了解决这个问题,作者提出直接使用相机坐标系中的3D表示,如下图所示
作者将这类3D表示称为以自我为中心的3D视觉表示
再说一下背后的深层含义
首先,DP3的缺陷是需要进行坐标校准,即在世界坐标系下标定相机坐标
而iDP3将相机的坐标系从世界坐标转换为相机自身的坐标系,这个视角的改变让这个坐标以机器人为中心,而不是以环境为中心。这意味着当环境发生变化时,对系统的影响会显著降低 - 扩展视觉输入:增加样本点的数量以捕获整个图像场景
利用以自我为中心的3D视觉表示在消除多余点云(如背景或桌面)时存在挑战——特别是在不依赖基础模型的情况下,为此,作者提出了一种简单但有效的解决方案:扩展视觉输入
其与之前的系统[17-DP3],[22-Equibot],[53-Dexcap,详见《DexCap——斯坦福李飞飞团队泡茶机器人:带灵巧手和动作捕捉的数据收集系统(含硬件改进VIVE)》]中使用标准稀疏点采样不同,他们显著增加了样本点的数量以捕获整个图像场景 - 改进的视觉编码器
作者将DP3中的MLP视觉编码器替换为金字塔卷积编码器(pyramid convolutional encoder)
因为他们发现,在从人类数据中学习时,卷积层比全连接层产生更平滑的行为,并且结合来自不同层的金字塔特征进一步提高了准确性
We find that convolutional layers produce smoother behaviors than fully-connected layers when learning from human data,and in corporating pyramid features from different layers further enhances accuracy. - 更长的预测视野
人类专家的抖动和噪声传感器在从人类示范中学习时表现出很大的困难,这导致DP3在短期预测上遇到困难。通过延长预测视野,作者有效地缓解了这个问题 - 实现细节的一系列优化
对于优化,他们使用AdamW [55]训练iDP3和所有其他方法,总计300个epoch
对于扩散过程,他们使用DDIM [56]进行50个训练步骤和10个推理步骤
对于点云采样,他们用一系列体素采样和均匀采样的替换DP3 [17]中使用的最远点采样FPS「For the point cloud sampling, we replace farthest point sampling (FPS) used inDP3 [17] with a cascade of voxel sampling and uniform sampling」,这确保了采样点覆盖3D空间并具有更快的推理速度
2.2 iDP3相关的硬件配置、数据采集、学习与部署
2.2.1 人形机器人相关的硬件配置
- 在人形机器人的选择上,他们使用Fourier GR1 [5],这是一款全尺寸人形机器人,配备了两个InspireHands [57]
本来该人形有32个自由度,但他们只启用了整个上半身{ 头部、腰部、手臂、手}——对应25个自由度(DoF),然后禁用了下半身(即禁用了下半身的7个自由度)以保持稳定,并使用推车进行移动 - 激光雷达相机
为了捕捉高质量的3D点云,他们使用了RealSense L515 [58],这是一款固态激光雷达相机。相机安装在机器人头部以提供自我中心视觉
先前的研究表明,深度感知精度较低的相机,如RealSense D435 [59],可能导致DP3 [17], [60-Rise: 3d perception makes real-world robot imitation simple and effective]的性能不佳
换言之,作者之所以选择RealSense L515相机,在于其能够提供相对准确的点云数据。如果换成另一种更常用且便宜的D435相机,它只能提供大致的深度信息,但深度的准确度较低,导致点云质量很差「所以用D435相机运行他们的算法,会发现其在现实世界中的效果不如预期」
当然了,其实即便是RealSense L515也无法产生完全精确的点云
然后有意思的是,dexcap中「详见此文:DexCap——斯坦福李飞飞团队泡茶机器人:带灵巧手和动作捕捉的数据收集系统(含硬件改进VIVE)的第2.2节」
在dexcap最早的24年2月份硬件版本中,胸前挂着一个L515相机、一个T265相机,左右两只手套上各戴一个T265相机
考虑到英特尔Realsense T265和L515相机已停产,加之T265偶尔会出现姿态漂移
故他们在后来24年8月份的新硬件版本中,胸前则换成了一个D435相机、一个VIVE Tracker,且左右两只手套上各戴一个VIVE Tracker「VIVE 追踪器可以提供更准确的追踪 」 - 高度可调推车
将操作技能推广到现实世界环境的一个主要挑战是场景条件的广泛变化,特别是桌面高度的不同。为了解决这个问题,作者使用了一个高度可调的推车,消除了对复杂全身控制的需求
2.2.2 数据采集
- 为了遥操作机器人的上半身,作者采用了Apple Vision Pro(简称AVP,[61]),该设备能够精确跟踪人手、手腕和头部的姿态[62-Using apple vision pro to train and control robots]。机器人使用Relaxed IK [63]来准确地跟随这些姿态
且他们还将机器人的视觉流回传至AVP。与[9-Open-television]不同,他们将腰部纳入了遥操作流程,从而实现了更灵活的工作空间 - 遥操作的延迟
使用LiDAR传感器会显著占用机载计算机的带宽/CPU,导致遥操作延迟大约为0.5秒。他们还尝试了两个LiDAR传感器(一个额外安装在手腕上),这引入了极高的延迟,因此使得数据收集变得不可行 - 对于用于学习的数据
在遥操作过程中,他们收集了观察-动作对的轨迹,其中观察由两部分组成:
1)视觉数据,如点云和图像
2)本体感觉数据,如机器人关节位置。动作由目标关节位置表示。且他们还尝试使用末端执行器姿态作为本体感觉/动作,发现性能没有显著差异
2.2.3 学习与部署
最终,他们在收集的人类演示数据上训练 iDP3
值得注意的是,由于不依赖之前提到的相机校准或手动点云分割。因此,他们认为他们的iDP3策略可以无缝转移到新场景,而无需额外的校准/分割等工作
2.3 实验效果及与各个相似策略的对比
在测试中,让机器人完成下图所示的三个任务:拾取/放置、倒水和擦拭
他们为每个任务收集了10次演示
- 对于拾取和放置任务,每次演示包含10条拾取和放置的轨迹。在每次演示中,物体的姿态是随机的,限制在10cm×10cm的区域内
- 且没有在更大的区域内收集数据,因为他们发现更大的任务区域需要更多的数据[65-ALOHA unleashed: A simple recipe for robot dexterity]
此外,由于使用了AVP,收集大规模数据并不可行
2.3.1 iDP3与几个的基线的比较
作者将iDP3与几个强大的基线进行比较,包括:
- DP:带有ResNet18编码器的扩散策略[12];
- DP(❄R3M):带有冻结R3M [64-R3m: A universal visual representation for robot manipulation,详见此文《基于人类视频的模仿学习与VLM推理规划:从DexMV、MimicPlay、SeeDo到人形OKAMI、Harmon(含R3M的详解)》]编码器的扩散策略;
- DP (✶R3M):带有微调R3M编码器的扩散策略
- iDP3 (DP3编码器):使用DP3编码器[12]的iDP3
所有基于图像的方法都使用与iDP3相同的策略骨干,并采用随机裁剪和颜色抖动增强来提高鲁棒性和泛化能力,且RGB图像的分辨率是224×224(从RealSense相机的原始图像调整而来)
如下表所示「在四种设置下训练Pick&Place任务:{1st-1, 1st-2, 3rd-1, 3rd-2}。“1st”使用自我中心视角,而“3rd”使用第三人称视角。后面的数字表示用于训练的示范次数,每个示范由20轮成功执行组成,比如1st-2中的2 即代表示范次数为40次」
- iDP3显著优于普通DP、带冻结R3M编码器的DP以及带DP3编码器的iDP3
- 然而,我们发现带微调R3M的DP是一个特别强的基线,在这些设置中优于iDP3。作者认为这是因为微调预训练模型通常比从头开始训练更有效[26-On pre-training for visuo-motor control: Revisiting a learning-from-scratch baseline],而目前没有类似的用于机器人技术的预训练3D视觉模型
尽管DP+微调R3M在这些设置中更有效,但作者发现基于图像的方法过拟合于特定场景和对象,无法推广到一些比较极端的场景之下
作者在论文中表示,他们还进行了 iDP3 与 DP (✶R3M)(简称为 DP)之间的更多比较,并证明 iDP3 在具有挑战性和复杂性的现实世界中更具适用性
具体如下表所示
iDP3和DP在训练环境中对训练对象都取得了很高的成功率,并具备以下三个更好的属性
- 属性1:视图不变性View Invariance
iDP3的自我中心3D表示展示了令人印象深刻的视图不变性
如下图所示iDP3即使在视图发生较大变化时也能始终抓取物体,而DP即使是训练对象也难以抓取。DP仅在视图发生轻微变化时偶尔取得成功
值得注意的是,与最近的工作[22],[45],[47]不同,他们没有采用特定的设计来实现等变性或不变性- 属性2:对象泛化性
他们评估了训练杯之外的新型杯子/瓶子,如下图所示由于使用了颜色抖动增强,DP偶尔可以处理未见过的对象,但成功率很低。相比之下,iDP3由于使用了3D表示,自然能够处理广泛的对象
- 属性3:场景泛化性
他们进一步在各种真实世界场景中部署了iDP3的策略,如下图所示
2.3.2 iDP3的几个消融研究
最后,作者对DP3的几项修改进行了消融研究,包括改进的视觉编码器、缩放的视觉输入和更长的预测范围
实验表明如果没有这些修改,DP3要么无法有效地从人类数据中学习,要么表现出显著降低的准确性
更具体地说,他们观察到
- 他们改进的视觉编码器可以同时提高策略的平滑度和准确性
- 缩放视觉输入是有帮助的,但在他们的任务中更多的点数会使性能饱和(while the performance gets saturated in our tasks with more points)
- 一个合适的预测时间范围是关键,如果没有这个,DP3无法从人类演示中学习
论文中提到,iDP3的训练时间,与DiffusionPolicy相比,显示出显著的减少。这种效率即使在点云数量增加到DP3的几倍时仍然保持
最后,总结一下,本研究提出了一种模仿学习系统,使全尺寸的人形机器人能够将实际操作技能推广到多样化的真实环境中,而这些技能仅在实验室中收集的数据进行训练。关键在于改进的3D扩散策略——iDP3,这是一种用于通用机器人的新型3D视觉运动策略
当然,目前它的局限性也比较多
- 使用AVP进行远程操作设置简单,但对人类远程操作员来说很累,使得数据扩展不可行
- 深度传感器产生噪声点云,限制了iDP3的性能
- 由于AVP远程操作,收集细粒度的操作技能(如旋转螺丝)耗时
- 我们避免使用机器人的下半身,因为保持平衡仍然具有挑战性
总体而言,扩大高质量数据是主要瓶颈。未来,作者希望探索如何通过更多高质量数据来扩大3D视动策略的训练
第三部分 iDP3的训练部署与源码解析
注意,跑iDP3的整个流程分为:数据采集、数据转换、数据预处理,然后做训练、部署、可视化,具体而言,iDP3开源了两个代码仓库,一个是学习,一个是摇操作,其中
- 数据的采集,然后再进行数据转换,这都是在这种摇操作里进行的
- 而转换完的数据如何做可视化、如何训练,再如何部署是在学习的代码库里
3.1 iDP3的训练与部署
如上所说,作者于24年11月4日开源了他们收集的完整数据和对应的checkpoint(全部 3 个任务):drive.google.com/drive/folders/1f5Ln_d14OQ5eSjPDGnD7T4KQpacMhgCB
- 对于训练机器,可以使用配备 Nvidia RTX 4090(24G 内存)的本地计算机
- 对于部署机器,可以使用 Fourier GR1 中的机载计算机的 CPU
- 且按照作者建议,可以使用RealSense L515作为深度摄像头
至于RealSense D435 提供的深度数据非常不精确,不建议用于训练 3D 策略
3.1.1 为训练机和部署机安装相应的环境
如iDP3的GitHub所述,首先需要为学习机器和部署机器安装 conda 环境 和包:
- 激活conda环境idp3
# 删除名为idp3的conda环境 conda remove -n idp3 --all # 创建新的conda环境idp3,指定python版本为3.8 conda create -n idp3 python=3.8 # 激活conda环境idp3 conda activate idp3 # 适用于CUDA版本大于等于12.1,安装PyTorch 2.1.0 pip3 install torch==2.1.0 torchvision --index-url https://download.pytorch.org/whl/cu121 # 否则,安装与CUDA版本匹配的PyTorch版本 # pip3 install torch torchvision
- 安装额外的依赖包
比如安装3d diffusion policy所需的各种包
再比如,安装一些本地包# 进入third_party目录 cd third_party # 进入visualizer目录并安装 cd visualizer && pip install -e . && cd .. # 安装额外的依赖包 pip install kaleido plotly open3d tyro termcolor h5py # 返回上一级目录 cd .. # 安装3d diffusion policy所需的各种包 pip install --no-cache-dir wandb ipdb gpustat visdom notebook mediapy torch_geometric natsort scikit-video easydict pandas moviepy imageio imageio-ffmpeg termcolor av open3d dm_control dill==0.3.5.1 hydra-core==1.2.0 einops==0.4.1 diffusers==0.11.1 zarr==2.12.0 numba==0.56.4 pygame==2.1.2 shapely==1.8.4 tensorboard==2.10.1 tensorboardx==2.5.1 absl-py==0.13.0 pyparsing==2.4.7 jupyterlab==3.0.14 scikit-image yapf==0.31.0 opencv-python==4.5.3.56 psutil av matplotlib setuptools==59.5.0
# 进入Improved-3D-Diffusion-Policy目录并安装本地包 cd Improved-3D-Diffusion-Policy pip install -e . cd .. # 安装timm 0.9.7用于图像-based policy pip install timm==0.9.7 # 进入r3m目录并安装本地包 cd third_party/r3m pip install -e . cd ../..
其次,安装 realsense 包用于部署:
# 首先,安装realsense驱动程序
# 查看适用于RealSense L515的此版本: https://github.com/IntelRealSense/librealsense/releases/tag/v2.54.2
# 还要安装Python接口
pip install pyrealsense2==2.54.2.5684
3.1.2 数据转换:从raw_data_example到training_data_example
使用脚本将原始数据转换为训练格式
- 首先在脚本中指定数据路径,例如在 humanoid_teleoperation/convert_data.sh 中设置:
# 原始数据路径 demo_path=/home/ze/projects/Humanoid-Teleoperation/humanoid_teleoperation/scripts/demo_dir/raw_data_example # 转换后数据保存路径 save_path=/home/ze/projects/Humanoid-Teleoperation/humanoid_teleoperation/scripts/demo_dir/training_data_example
- 然后在终端中运行脚本:
cd humanoid_teleoperation bash convert_data.sh
转换完成后,可以使用数据进行训练
3.1.3 使用:策略训练与真机部署
由于iDP3的作者直接提供了已经转换好了的训练数据示例training_data_example.zip「详见:drive.google.com/file/d/1c-rDOe1CcJM8iUuT1ecXKjDYAn-afy2e/view」,相当于可以直接用——以便可以在不收集数据的情况下尝试训练模型
比如,作者将数据集放在
/home/ze/projects/Improved-3D-Diffusion-Policy/training_data_example 中,那么便可以把这个代码文件 scripts/train_policy.sh 中的路径设置为:
dataset_path=/home/ze/projects/Improved-3D-Diffusion-Policy/training_data_example
之后,便可以训练策略并部署它
- 首先,运行训练策略的脚本:
# 3d policy bash scripts/train_policy.sh idp3 gr1_dex-3d 0913_example # 2d policy bash scripts/train_policy.sh dp_224x224_r3m gr1_dex-image 0913_example
- 其次,训练完策略后,便可以使用以下命令部署策略「如缺少软件包communication.py,请参阅Humanoid-Teleoperation存储库」
# 3d policy bash scripts/deploy_policy.sh idp3 gr1_dex-3d 0913_example # 2d policy bash scripts/deploy_policy.sh dp_224x224_r3m gr1_dex-image 0913_example
在其中,修改代码以适合您自己的机器人——任何带有摄像头的机器人都可以
此外,还可以通过运行以下命令来可视化训练数据示例(记得设置数据集路径)
bash scripts/vis_dataset.sh
在其中,可以指定vis_cloud=1渲染点云——如在论文中所说的那样,或详见此文《iDP3的训练与部署代码解析:从数据可视化vis_dataset.py、训练脚本train.py到部署脚本deploy.py》的第一部分
3.2 源码剖析:含数据采集、数据转换,和Learning、训练、部署代码
3.2.1 iDP3整个源码分析的三篇文章
如本部分开头所述,iDP3的整个源码分析已独立成以下这三篇文章
- iDP3的人形遥操代码分析:从数据收集、数据转换到VR安装、人形机器人遥控
- iDP3的Learning代码解析:逐步分解iDP3的数据集、模型、动作预测策略代码(包含2D和3D两个版本)
- iDP3的训练与部署代码解析:从数据可视化vis_dataset.py、训练脚本train.py到部署脚本deploy.py
3.2.2 表格汇总:iDP3源码分析三篇文章的总目录
为方便让大家从整体全局的角度看待各个部分——包括彼此的调用、依托关系,我把上面三篇文章的目录汇总在一个表格里,如下所示,好一目了然
iDP3的人形遥操代码分析:从数据收集、数据转换到VR安装、人形机器人遥控 | iDP3的Learning代码解析:逐步分解iDP3的数据集、模型、动作预测策略代码(包含2D和3D两个版本) | iDP3的训练与部署代码解析:从数据可视化vis_dataset.py、训练脚本train.py到部署脚本deploy.py |
前言 第一部分 人形遥操代码部署 第二部分 人形遥操代码解析humanoid_teleoperation 2.1 humanoid_teleoperation/scripts 2.1.1 scripts/action_util.py 2.1.2 scripts/collect_data.py 2.1.3 scripts/convert_demos.py:将演示数据集转换并保存为Zarr格式 2.1.4 scripts/multi_realsense.py 2.1.5 scripts/rotation_util.py:处理旋转和四元数 2.1.6 scripts/silverscreen_multicam.py 2.1.7 scripts/stream.py 第三部分 humanoid_teleoperation/teleop-zenoh解析 2.1 teleop-zenoh/communication.py:与机器人的上半身、手部及VR设备通信 2.2.1 UDPServer类 2.2.2 UpperBodyCommunication类:与机器人的上半身进行通信 2.2.3 VRCommunication类:与VR设备进行通信 2.2.4 HandCommunication类:与机器人的手部进行通信 2.2 teleop-zenoh/config_GR1_T2.yaml | 第一部分 数据集与配置:diffusion_policy_3d的common、config、dataset、workspace 1.1 diffusion_policy_3d/common 1.1.1 common/gr1_action_util.py:转换和处理与关节和末端执行器EEF相关的数据 1.1.3 common/multi_realsense.py:管理和处理多个 RealSense 摄像头的数据流 1.2 diffusion_policy_3d/config:决定是用2D策略还是3D策略 1.2.1 config/task:gr1_dex-3d.yaml(相当于具体的任务)、gr1_dex-image.yaml 1.2.2 config/dp_224x224_r3m.yaml 1.2.3 config/idp3.yaml:相当于配置文件 1.3 diffusion_policy_3d/workspace 1.3.1 workspace/base_workspace.py 1.3.2 workspace/dp_workspace.py 1.3.3 workspace/idp3_workspace.py:相当于实现文件(很重要) 1.4 diffusion_policy_3d/dataset:各种数据集及相关处理 1.4.1 dataset/base_dataset.py:低维、图像、点云、通用等4类数据集 1.4.2 dataset/gr1_dex_dataset_3d.py:处理 3D 数据集 1.4.3 dataset/gr1_dex_dataset_image.py:处理图像和深度信息 第二部分 扩散模型与3D点云编码器的实现:diffusion_policy_3d/model 2.1 model/common 2.2 model/diffusion:涉及五个代码文件 2.2.1 diffusion/conditional_unet1d.py:再涉及3个代码子文件,分别实现交叉注意力、条件残差块、条件U-Net 网络 2.2.1.1 CrossAttention 类:实现交叉注意力 2.2.1.2 ConditionalResidualBlock1D 类:条件残差块,在一维卷积网络中实现条件处理 2.2.1.3 ConditionalUnet1D:条件一维 U-Net 网络,在一维数据上实现条件生成任务 2.2.2 diffusion/conv1d_components.py:涉及一维卷积、下采样、上采样 2.2.3 diffusion/ema_model.py:实现模型权重的指数移动平均EMA 2.2.4 diffusion/mask_generator.py 2.2.5 diffusion/positional_embedding.py:为输入数据添加位置信息 2.3 model/vision 2.4 model/vision_3d 2.4.1 vision_3d/multi_stage_pointnet.py:对点云数据进行编码 2.4.2 vision_3d/point_process.py:针对点云的打乱/填充/采样操作(含NumPy和PyTorch实现) 2.4.3 vision_3d/pointnet_extractor.py:包含点云编码器iDP3Encoder的实现 第三部分 基于图像和点云的扩散策略:diffusion_policy_3d/policy(相当于包含2D和3D两个版本) 3.1 policy/base_policy.py:基类策略模型 3.2 2D版本——policy/diffusion_image_policy.py:基于图像的扩散策略 3.2.1 __init__ 3.2.2 forward:根据输入的观察字典 obs_dict 生成动作 3.2.3 conditional_sample:给定条件下的采样 3.2.4 predict_action:根据输入的观察字典obs_dict预测动作 3.2.5 compute_loss:计算给定批次数据的损失 3.3 3D版本——policy/diffusion_pointcloud_policy.py:基于点云的扩散策略(与3.2节有相似) 3.3.1 __init__ 3.3.2 forward:根据输入的观察字典 obs_dict 生成动作 3.3.3 conditional_sample:在给定条件下进行采样 3.3.4 predict_action:根据输入的观察字典 obs_dict 生成动作(与forward类似) 3.3.5 compute_loss:计算给定批次数据的损失 | 第一部分 iDP3的数据可视化:vis_dataset.sh、vis_dataset.py 1.1 scripts/vis_dataset.sh 1.2 Improved-3D-Diffusion-Policy/vis_dataset.py 第二部分 iDP3的训练:train_policy.sh、train.py 2.1 scripts/train_policy.sh 2.2 Improved-3D-Diffusion-Policy/train.py:调用对应的yaml文件 2.3 管理配置库Hydra与训练流程小结 2.3.1 管理配置库Hydra:动态配置Python项目 2.3.2 训练流程:train_policy.py 从 idp3.yaml 中获取类,并实例化idp3_workspace 第三部分 iDP3的部署:deploy_policy.sh、deploy.py 3.1 scripts/deploy_policy.sh 3.2 Improved-3D-Diffusion-Policy/deploy.py:部署全流程 3.2.1 各种库函数的应用:含通讯模块zenoh 3.2.2 类 GR1DexEnvInference:用于机器人部署 3.2.3 主函数main 3.3 Realsense L515 测试脚本 |
后记:让每一个读者喜欢读我写的文章
为了写清楚本文中涉及的DP3、iDP3算法,我还是花了不少心思和精力的,特别是还分享了部分我司在实际业务场景中的落地与实践
- 十年前,我告诫自己,大家学习算法和AI,如果看书费劲 则可以看我博客
- 十年后,我告诫自己,如果大家想更快、更好的读好代表最前沿技术的paper,及其落地实践,则可以继续看我博客
无论十年前还是十年后,我都希望可以帮到很多人,且不断提升我个人和我司在业界和圈内的技术影响力