上个月我在调一个机械臂插USB口的demo,光是给机械臂录“接近—对准—插入”这一条技能的数据,就折腾了一个多星期。遥操作录了几十条,手动筛选掉失败轨迹,再逐帧标注接触状态,最后能用的不到一半。正当我准备在交流群里抱怨“机器人学习就是数据堆砌”的时候,有朋友转来一个刚公开的开源项目——某高校与某头部芯片厂商联合发布的Point-Null,标题栏写得很直接:不用一条机器人操作数据,仅靠3D动态预训练,就在6/7个操作任务上超过了用机器人数据预训练的模型。
第一反应是不太相信。做操作学习的人都知道,真机数据又贵又慢,仿真数据又存在巨大的域差距,怎么可能完全绕开机器人数据反而效果更好?但翻完技术方案和实验设定之后,我意识到这件事背后的逻辑其实非常顺:机器人操作失败,很多时候不是因为策略网络不够大,而是因为模型根本不懂物体在物理世界里是怎么运动的。而“动态”这件事,并不一定非得用机械臂轨迹才能学会。
这篇文章我想从一个做机器人学习的人的角度,把Point-Null拆开讲清楚:它说的“零机器人数据”到底是什么含义,3D动态预训练内部是怎么设计的,6/7这个成绩单要怎么读,以及如果你也想复现类似思路,从零开始需要准备什么、会踩到哪些坑。不打算逐段复述论文,而是把我认为最有价值的几个点揉碎了聊。
1. 为什么“零机器人数据”能成为操作学习的重磅信号
1.1 机器人数据到底贵在哪
先说一个所有做操作学习的人都绕不开的问题:为什么机器人数据这么稀缺?真机数据的采集链条远比很多人想象中繁琐。你需要的不是一台机械臂,而是一整套包括夹爪、力传感器、多视角相机、控制工控机在内的采集环境。采集一条干净的示教轨迹,要通过遥操作设备逐帧记录关节角度和末端位姿,过程中手一抖、夹具没对准,这条轨迹基本就废了。
我见过一个很典型的数据处理流程:一组人花两周时间采集了400条原始轨迹,经过自动质检加人工逐帧审查,最终进入训练集的只有100条左右。这中间还要处理手眼标定误差、传感器时间戳不同步、不同相机视角下同一个动作的标注口径不一致等问题。换句话说,100条可用数据背后的实际人力成本,是很多人没概念的那种。
所以整个行业才会拼命往“预训练+微调”的方向走。问题是,过去几年大家做的大多是2D视觉预训练或视觉-语言预训练,让机器人模型去理解互联网图片、视频、文本。这些模型确实能让机器人“看懂”物体是什么,但当它需要回答“这个杯子握住之后往左转会不会倒”的时候,仅凭静态外观和语义标签是不够的。
1.2 主流路线与Point-Null的分岔口
目前的主流路线大概有三类。第一类是直接在真机数据上做模仿学习,数据质量高但规模受限;第二类是用仿真器生成海量数据再迁移到真机,规模大但sim-to-real gap始终存在;第三类是近两年比较热的视觉-语言-动作模型,把互联网图文知识融进策略网络里,泛化语义理解能力强,但物理交互细节依然薄弱。
Point-Null走的是另一条路线:它不引入任何机械臂轨迹,也没有让机器人物理实体参与预训练数据采集,而是直接用大量“3D动态过程数据”做自监督预训练。这里所谓的3D动态过程数据,指的是带有几何结构变化的连续时空数据,比如人类手部操作物体的视频经过3D重建得到的点云序列,或者在仿真世界中被随机外力推动的物体运动轨迹。
这个分岔口的本质区别在于预训练阶段学习的目标是什么。传统预训练让模型记住“这是什么”,Point-Null让模型体会“它在怎么变”。同样是看一个杯子,前者学会把杯子识别成一种可抓取的容器,后者学会杯子在运动、接触、堆叠时会发生什么样的几何与动力学响应。后者明显更接近操作任务真正需要的那种“物理直觉”。
1.3 澄清边界:零机器人轨迹,不等于零数据
这里必须泼一盆冷水,避免被“不用一条机器人数据”这个说法带偏。Point-Null的意思是不使用任何“机械臂执行轨迹”作为预训练输入,不代表它没有使用数据。它依然需要大规模的3D动态序列数据,只是这些数据可以来自人类视频重建、仿真器合成、深度传感器采集等非机器人来源。
这个边界很重要。因为如果只把它理解为“不需要数据”,那就完全误解了这个工作的价值。它的实际价值在于证明了:机器人策略所需要的部分物理知识,可以从与机器人完全无关的动态数据中蒸馏出来,而且蒸馏出来的表征可以直接迁移到操作策略上。这个结论对很多拿不到大规模真机数据的中小团队来说,意义非常大。
2. 拆开Point-Null:3D动态预训练的训练目标到底在学什么
2.1 从“看照片”到“看过程”:2D预训练和3D动态预训练的区别
我之前做过一个对比实验,用ImageNet预训练的ResNet初始化一个抓取策略网络,效果比随机初始化好一点,但好得有限。后来换成在大量RGB视频上做MAE(掩码自编码)预训练的特征,抓取成功率有了明显提升,但对物体姿态变化剧烈、遮挡严重的场景依然无能为力。
我当时的结论是:2D预训练学到的是像素级别的纹理和轮廓,它对“物体是什么”敏感,对“物体处于什么空间状态、后续会发生什么位移”不敏感。而操作任务恰恰是后者驱动的。机械臂要做的不是看图说话,而是根据当前的3D几何布局预测下一个动作序列。
Point-Null的核心就是把预训练的表征空间从“2D语义空间”挪到“3D动态空间”。在这个空间里,一个物体不仅有自己的外观属性,还拥有几何形状、空间坐标、运动轨迹、接触关系这些更贴近物理过程的信息。从3D动态数据中预训练出来的特征,天然更适配策略网络后续要做的空间推理和运动规划。
2.2 输入端的3D动态token是怎么构造的
具体到模型输入,Point-Null不会直接把原始RGB视频丢进网络,而是把每一帧转换为3D表征。常见做法是把深度图反投影成点云,或者用体素化方式转成稀疏3D网格,也可以把RGB-D多视角数据融合成带颜色的点云序列。然后在这段点云序列上做token化:先在空间上通过最远点采样选出一批关键点,每个关键点聚合周围邻域的特征,再叠加上时间步的位置编码,形成一个包含空间坐标、时间索引、局部几何特征的三维token序列。
这一步非常关键,因为它决定了模型看到的世界是什么形态。如果只做空间token化,模型看到的是“一帧独立的3D快照”;加上时间维度之后,模型看到的是一段“连续演化的3D过程”。机械臂执行操作时,本身就是一个动态过程,输入表征的时间连续性很大程度上决定了后续预测任务能否学到运动规律。
我想强调一点:3D动态token构造的难点不在于网络结构,而在于数据对齐。RGB图像、深度图、点云三者之间的坐标系必须统一,时间戳必须对齐,否则token序列里会出现物体位置跳变、几何撕裂这些伪动态。很多复现失败的案例,最终定位到的根因都是预处理阶段的对齐问题,而不是模型本身。
2.3 两层预训练目标:掩码重建与未来状态预测
Point-Null的预训练目标可以拆成两个任务来理解,一个是空间层面的掩码重建,另一个是时间层面的未来状态预测。
掩码重建的思路和MAE一脉相承:随机挖掉3D token序列中的一部分,让模型根据上下文补全被挖掉的几何结构和运动轨迹。这迫使模型学会物体的完整几何形状、表面对应关系、局部与整体的空间依赖。注意这里补全的不是RGB像素,而是3D点云几何和运动特征,难度比2D重建高不少,但也正因为如此,学到的表征更接近操作所需的物理结构理解。
未来状态预测则更直接:给定前T帧的3D动态token,让模型预测T+ΔT之后的场景状态。这个任务要求模型在内部建立一种“运动预演”能力——它看到杯子当前在桌沿,就能推测下一时刻杯子会掉落、平移还是保持静止。这类预测能力在开放世界操作里几乎是刚需,因为机械臂不可能每一步都重新规划,很多时候必须基于对未来的预判来生成动作序列。
这两层目标在训练中通常会配一个权重比例,我自己的经验是重建任务权重略高于预测任务会更稳。如果未来预测任务权重太高,模型容易走捷径:把预测结果退化成对上一帧状态的简单复制;如果重建任务权重太高,模型又容易只学会几何结构,忽略时间演化的运动信息。Point-Null的做法大概率也是在两者之间做过比较系统的消融,才确定了一个相对合理的平衡点。
2.4 预训练结果如何转接到下游策略
预训练完成之后,模型的骨干网络作为初始化权重交给下游策略网络使用。下游策略通常是一个从3D观测序列到动作输出的映射,动作空间可能是关节角度增量、末端位姿或力控制指令。预训练部分冻结或微调都可以,取决于任务数据量的大小。
我比较认可的一点是,Point-Null把“感知表征学习”和“策略学习”解耦了。预训练阶段负责建立对物理动态的表征理解,下游策略阶段只需要在这个表征基础上学习动作映射。这相当于先让模型去“通识教育”,再去学“专业技能”,比一上来就在任务数据里从零学起高效得多。实际效果也印证了这一点:使用Point-Null预训练初始化的策略,在少量真机微调下就能快速收敛,而随机初始化的策略在这个数据量下基本学不出来。
3. 不用机器人数据,训练数据从哪里来
3.1 三类替代数据源对比
既然不依赖机械臂轨迹,那预训练用的3D动态数据总得有个出处。我梳理了一下,能支撑这类预训练的数据源主要有三个方向。
| 数据源 | 规模潜力 | 成本 | 学到什么 | 主要问题 |
|---|---|---|---|---|
| 人类操作视频重建 | 较大 | 中 | 人手与物体交互的运动模式 | 3D重建误差大,遮挡多 |
| 仿真器合成动态数据 | 极大 | 低 | 精确的几何与动力学 | 与真实物理存在域差距 |
| 深度相机/激光雷达野外采集 | 大 | 中 | 物体自然运动与场景几何 | 交互稀疏,动态事件少 |
人类操作视频是目前看起来最有潜力的来源,因为互联网上有海量的“手在操作物体”的视频,经过姿态估计和3D重建可以转成点云动态序列。这样做的好处是数据里天然包含真实的接触、摩擦、重力响应,坏处是重建质量参差不齐,尤其是手与物体接触的区域经常出现深度空洞。
仿真器合成数据的优势是能精确控制物体属性、光照、相机视角,可以自动生成百万级别的动态轨迹。但合成数据同样面临sim-to-real的问题,虽然预训练阶段对数据真实度要求比策略微调阶段低一些,但完全不考虑域差距也是不行的。
3.2 数据清洗与片段切分的坑
我处理过不少视觉序列数据,这里分享几个非常实际的坑。第一个坑是不做运动筛选。原始的3D动态数据里有大量静止片段,比如一个场景放了10秒没有任何物体移动,这些片段对预训练动态理解毫无帮助,还会拖慢收敛速度。实践中可以先计算每一帧点云之间的运动幅度,低于阈值就直接整段丢弃。
第二个坑是片段切分的粒度。3D动态序列不是越长越好,通常一个训练样本控制在几十帧左右就能覆盖一次完整的物体位移事件。切太短学不到完整的运动因果,切太长则容易出现事件中断、内存爆炸的问题。比较实用的做法是先用一个动作检测器识别出“事件边界”,再按事件边界切分片段。
第三个坑是尺度不一致。不同来源的数据,物体尺寸差异巨大,如果不做尺度归一化,模型会把绝对尺寸当成特征来学习,导致泛化能力大幅下降。我在做类似实验时会把所有点云统一归一化到一个固定包围盒内,再在token里保留相对尺度信息作为提示。
3.3 域差距为什么没有成为致命问题
一个很自然的疑问是:用这些“非机器人数据”预训练出来的表征,真能用在机器人策略上吗?无论人类视频重建还是仿真合成数据,和机械臂视角都存在明显的域差距。
Point-Null处理这个问题的思路,我认为比单纯堆数据更值得借鉴。它不去强行让预训练数据分布对齐机器人数据分布,而是通过预训练目标本身来抽象掉外观层面的差异。重建和预测的对象都是几何与运动,而不是纹理与颜色。换句话说,模型学到的是“一坨东西从桌边掉下去会翻倒”这种物理规律,至于那坨东西是塑料杯还是金属块,策略层根本不需要关心。
这里就体现出3D动态预训练相比2D预训练的优势。2D预训练很容易把外观特征和物理特征耦合在一起,导致模型换个环境就失灵;而3D动态预训练的输入本身已经剥离了大量外观语义,模型被迫把注意力放在几何结构、空间关系、运动轨迹这些跨域稳定的信息上。
3.4 工程落地:这套预训练要烧多少资源
说实话,完整复现Point-Null的预训练体量,对普通团队来说不是一件轻松的事。处理3D动态序列的显存占用远高于同等长度的RGB视频。我评估下来,如果用完整精度在单张消费级显卡上训练,一个小的预训练模型跑通全流程都需要以周为单位。
比较现实的工程策略是分层推进。先在小规模数据(比如几千个动态片断)上验证训练流程和损失曲线是否正常,再逐步扩展数据量和模型规模。数据加载尽量用内存映射或异步流水线,点云坐标用半精度存储,token序列做预计算缓存,可以显著降低IO和显存压力。大规模预训练阶段通常需要多卡并行或者借助云端TPU资源,个人研究者建议先不要一上来就追求全量复现。
4. “6/7操作任务”这个成绩单应该怎么读
4.1 操作任务套件的难度梯度
任何涉及“几个任务”的成绩单,先要看清楚任务套件本身的构成。常见的操作评测任务通常覆盖从简单到复杂的多个梯度:单物体抓取与放置、多物体堆叠整理、插孔对接、开门拉抽屉、倒水倒液体、布料整理、工具使用等。
单物体抓取主要考验接触建模和抓取点位选择;插孔对接考验精密空间对准;倒水倒液体考验连续运动控制和对流体动力学的隐性理解;布料整理则对柔性体建模提出了极高要求。不同任务的底层能力需求差异非常大,一个预训练模型能拿下其中六个,说明它在几何推理和通用动态理解上的确具备扎实基础。
4.2 两种评估模式:零样本与少量微调
“6/7”这个成绩要区分两种评估模式来看。第一种是零样本模式,也就是预训练权重直接用于策略网络初始化,不做任何下游任务数据微调,直接评估任务成功率。这种模式最能反映预训练表征本身的质量,但通常任务成功率不会太高,因为策略头没有见过具体任务的奖励信号,只能依赖预训练过程中学到的通用运动规律。
第二种是少量微调模式,也是Point-Null标题里真正引人注目的一种:只用极少量的下游任务数据(甚至只有几百条轨迹)对策略进行微调,就能达到很高的成功率。这个模式下的“6/7”含金量远高于前者,因为它证明了预训练可以显著降低下游策略的数据需求,而这正是产业界最关心的问题。
4.3 拖后腿的“第7个任务”通常输在哪
如果七个任务里有一个没能做到领先水平,以我的经验,最可能出现在对接触力敏感的精细任务或者柔性物体任务上。这两个方向有一个共同特点:它们依赖的动态信息不完全是“宏观运动轨迹”,还需要微观层面的力反馈和形变响应。
宏观运动,比如物体被推动、被拿起、被放下,这些信息通过3D动态预训练可以学得很好,因为视频重建和仿真数据里就有大量这类事件。但微观接触过程,比如插销入孔的瞬间力变化、布料被捏起时的褶皱变形,对数据精度和时间分辨率的要求高得多。3D重建数据往往在接触部位存在遮挡和深度误差,仿真数据则很难精确模拟柔体接触。这不是Point-Null的方法有缺陷,而是整个数据生态在物理拟真度上还没有到位。
4.4 评估口径比成功率数字更值得较真
我在看这类评测结果时,会特别较真三个细节。第一,成功率是严格从初始状态到最终目标状态判定,还是允许中途人为干预和重置;第二,任务是否允许策略通过“尝试-修正-再尝试”的过程完成任务,也就是所谓的修复式容错;第三,失败时是否能自动恢复并进入下一个episode,这直接影响有效成功率的统计口径。
同一个“6/7”的数字,在不同评估口径下代表的意义可能截然不同。所以如果读者想认真评估Point-Null或者类似工作,建议先去看它的任务构建说明和评测代码,搞清楚它的成功率定义、允许的尝试次数、失败处理策略。这些细节往往比标题里那个数字更能说明方法的真实水平。
5. 自己复现这套路线:最小可行方案与典型失败
5.1 技术栈选型
如果你看完前面的分析,想在自己项目里尝试类似路线,我建议先想清楚技术栈。主框架用PyTorch肯定是最顺手的,3D数据处理方面Open3D和trimesh足够完成点云读取、体素化、最远点采样这些常规操作,不需要重复造轮子。
模型骨架建议先用现成的3D稀疏卷积模块或3D-ViT结构,不要一开始就自己设计新tokenizer。数据加载推荐用WebDataset或者LMDB做流式读取,把预处理后的token序列缓存成二进制格式,训练时直接随机读取,能省掉大量时间。如果要用仿真器生成数据,MuJoCo和Isaac Sim都是成熟选项,优先考虑和点云渲染接口兼容性好的版本。
5.2 一个能先跑通流程的最小实验设计
复现的第一步不要直接奔着“打比赛”去,先搭建一个最小闭环:把一个仿真环境中生成的简单动态场景(比如桌面上的立方体多次被随机力推倒)转成点云序列,然后用小型3D-ViT做掩码重建和未来预测的预训练。整个流程控制在单卡数小时内跑通,重点验证loss曲线是否正常下降、重建出的点云轮廓是否接近原物体、预测未来帧是否产生合理的位移。
跑通之后,再评估预训练表征的质量。一个很实用的检验方法是在下游接一个最简单的抓取策略网络,分别用随机初始化和预训练权重初始化,在下游数据上微调相同数量的step,对比两者的收敛速度和最终成功率。如果预训练权重没有明显优势,多半是预训练目标配比、数据质量或tokenizer出了问题,需要回头调整。
5.3 训练循环的简化骨架
这里给一个简化到只剩核心逻辑的预训练循环示意,方便你快速理解整体结构。实际项目里需要在数据加载、梯度累积、混合精度、分布式通信这些环节补很多工程细节,但核心骨架就是这个样子。
# 3D动态预训练循环的简化骨架(概念示例) for batch in dynamic_dataloader: # batch["frames"]: (B, T, N, C) 点云token序列 tokens = tokenize_3d(batch["frames"]) # 空间token化 tokens = add_temporal_encoding(tokens) # 加入时间位置编码 masked_tokens, mask = random_mask(tokens, ratio=0.6) recon_out = model.reconstruct(masked_tokens) rec_loss = l2_loss(recon_out, tokens, mask) # 掩码重建损失 context = tokens[:, :T_ctx, :, :] future = tokens[:, T_ctx:, :, :] pred_out = model.predict(context) dyn_loss = l2_loss(pred_out, future) # 未来状态预测损失 loss = rec_loss + 0.5 * dyn_loss loss.backward() optimizer.step()5.4 最容易踩的四个坑
第一个坑是tokenizer的输入归一化方向不统一。有的框架把点云归一化到相机坐标系,有的归一化到世界坐标系,如果预训练和下游策略用了不同的坐标系,迁移效果会大打折扣。我建议所有阶段统一使用世界坐标系,并把重力方向固定对齐到Z轴。
第二个坑是时序步长设置过小。如果两帧之间的时间间隔太短,物体几乎没有位移,模型很容易学会“复制上一帧”这种投机取巧的解法,未来预测任务就失去了意义。步长要保证一个运动事件在相邻帧之间有明显的位移和姿态变化。
第三个坑是掩码比例和重建目标不匹配。3D token的掩码比例如果参照2D MAE直接设得很高,会导致模型面对的重建任务过于困难,尤其在动态序列里,局部几何信息高度冗余,但运动特征并不冗余,过高的掩码比例会让运动预测完全失效。我试下来动态序列的掩码比例在0.4到0.6之间比较合适。
第四个坑是未来预测任务权重过大。前面也提到过,预测权重一旦压过重建权重,模型会倾向于输出平滑但空洞的预测结果,对接触事件的预测变得非常钝感。训练时可以监控一下预测帧里接触点附近的点云密度,如果密度显著下降,说明模型在避免接触建模,需要降低预测权重或者调整预测目标。
6. 我的判断:它改变的不只是数据预算
6.1 从“学习行动”到“学习动态”的范式变化
Point-Null这类工作的长期价值,我认为不在“省了几条机器人数据”,而在于它给操作学习提供了一个新的范式坐标:机器人策略可以建立在对物理动态的理解之上,而不是只建立在对行为动作的模仿之上。
模仿学习本质上是在复现“人在某个物体状态下做出的动作”,它没有强迫模型理解物体为什么会发生这样的变化。而3D动态预训练强迫模型在大量与机器人无关的动态过程中提取因果结构,这种结构一旦被学到,迁移到具体操作任务时就不再需要从头学习“世界是怎么运转的”,只需要学习“我的机械臂该如何介入这个世界”。这两个层次的复杂度完全不同。
6.2 眼前的瓶颈与后续值得跟进的方向
当然,这个路线离解决所有操作问题还有相当距离。最大的瓶颈是3D动态数据的规模和拟真度。互联网上虽有海量视频,但高质量、带精确3D重建、包含完整运动事件的数据依然稀缺。另一个瓶颈是计算成本,完整规模的3D动态预训练对绝大多数团队不现实,如何在不牺牲表征质量的前提下压缩数据和模型规模,是值得跟进的工程方向。
再往后看,我非常期待两个方向的探索。一是把语言条件也融入3D动态预训练,让模型不仅能理解物理动态,还能理解任务语义,把“拿起杯子放到水槽”的意图和“杯子翻倒水流出来”的动态后果联合建模。二是研究预训练表征如何与在线学习结合,让机器人部署之后能利用自身经历持续更新动态模型。这两个方向如果能走通,操作机器人离通用化就更近了。
6.3 留给团队实验的几条线索
最后说一点个人体会。我在自己项目里试过类似的思路——先用仿真器合成大量动态点云序列做预训练,再用少量真机数据微调抓取策略。虽然我的实验规模比Point-Null小很多,但趋势非常一致:预训练权重初始化的策略收敛速度大约是随机初始化的三到四倍,最终成功率也稳定高出一截。这说明“先学动态、再学操作”的思路在小规模场景下同样有效,不是只能靠超大规模算力支撑的空中楼阁。
如果接下来有团队想在Point-Null这个方向上做进一步实验,我会建议从三条线索入手:一是对比不同数据来源(人类视频重建、仿真合成、真实深度扫描)对下游任务泛化的贡献差异,这直接决定了数据获取策略;二是系统研究预训练目标权重配比在不同任务类别上的敏感性,这个结论可以写进所有后续工作的实验配置里;三是尝试把3D动态预训练和视觉语言模型做特征层面的融合,很多语义级操作任务单靠动态理解是不够的,两者结合的空间非常大。
这类工作真正打动我的地方,是它把“机器人数据太少”这个长年被当成宿命的约束,变成了一道可以被巧妙绕开的工程问题。哪怕离量产还有距离,但至少让人看到了一个不靠堆真机数据也能把操作模型做好的方向。我后面会继续跟进这个项目,也打算把这次梳理的技术路线整理成一份内部实验手册,给团队里做操作学习的同学当参考。