Blog · 2026-08-19

从 Flow Matching 原理出发的机器人数据采集指导

Flow Matching action head 对数据采集有什么特殊要求?如何从训练目标理解数据质量?

核心结论

从 Flow Matching action head 的训练目标出发,机器人示教数据采集最重要的原则是:

优先扩大"状态覆盖",同时尽量降低无意义的"同条件动作冲突"。

理想的数据集应当同时满足:

  • 横向覆盖广:覆盖更多真实部署中会遇到的状态、扰动、任务阶段和恢复场景
  • 纵向监督干净:在给定 observation / task / subtask 条件下,动作应当具有稳定、合理、可解释的结构
  • 保留真正的多模态:如果多种动作策略都合理,就保留
  • 减少不可解释的随机性:操作员抖动、犹豫、时延、标定漂移等不应被当成"有益多样性"

1. Flow Matching action head 到底在学什么

设真实动作 chunk 为 A∈RH×daA \in \mathbb{R}^{H\times d_a},其中 HH 是 action horizon,dad_a 是单步动作维度。

训练时采样高斯噪声 ϵ∼N(0,I)\epsilon \sim \mathcal{N}(0,I),并在真实动作 AA 与噪声 ϵ\epsilon 之间构造条件路径:

Xτ=τϵ+(1−τ)A,τ∈[0,1]X_\tau = \tau \epsilon + (1-\tau)A, \qquad \tau\in[0,1]

对 τ\tau 求导得到条件速度标签:

uτ=dXτdτ=ϵ−Au_\tau = \frac{dX_\tau}{d\tau} = \epsilon - A

速度网络接收 (Xτ,o,ℓ,τ)(X_\tau, o, \ell, \tau),其中 oo 是 observation,ℓ\ell 是 task/subtask condition,输出 vθ(Xτ,o,ℓ,τ)v_\theta(X_\tau, o, \ell, \tau)。

训练目标:

L=E[∥vθ(Xτ,o,ℓ,τ)−uτ∥2]\mathcal{L} = \mathbb{E}\left[\|v_\theta(X_\tau, o, \ell, \tau) - u_\tau\|^2\right]

所以训练数据真正决定的是:

pdata(A∣o,ℓ)\boxed{p_{\mathrm{data}}(A \mid o, \ell)}

即:在给定机器人观测和任务条件时,数据集认为"合理动作应该如何分布"。

2. 为什么数据采集质量会直接影响速度场

对 MSE 回归,理论最优解为:

v∗(x,o,ℓ,τ)=E[uτ∣Xτ=x,o,ℓ,τ]\boxed{v^*(x,o,\ell,\tau) = \mathbb{E}[u_\tau \mid X_\tau=x, o, \ell, \tau]}

网络并不是简单记忆某一条 demonstration,而是在同一条件下,对所有可能的局部速度监督进行条件平均。

如果数据中存在大量互相冲突、但又无法通过输入条件解释的动作,网络就必须对这些冲突进行平均或建模。

这导出数据采集最重要的原则:

不要无目的地增加 H(A∣o,ℓ)H(A \mid o, \ell),即给定条件下的动作熵。

2.1 有价值的多样性

例如:

  • 左侧有障碍,所以从右侧绕
  • 杯子姿态不同,所以抓取姿态不同
  • 物体被碰偏后,采用恢复动作
  • 相同任务有两种都合理且都值得部署的抓取策略

这些差异是:state / intent difference⇒action difference\text{state / intent difference} \Rightarrow \text{action difference},应该保留。

2.2 无价值的多样性

例如:

  • 不同操作员随意使用不同动作风格
  • 操作员犹豫、停顿、抖动
  • 控制器 latency 不一致
  • 相机和 action timestamp 错位
  • 标定漂移导致相同状态记录出不同动作
  • 同一任务中存在大量效率很差但"勉强成功"的轨迹

这些差异无法被 observation 或 task condition 解释,却会直接扩大 H(A∣o,ℓ)H(A \mid o, \ell),让 action head 更难学。

3. 第一原则:优先扩大状态覆盖

有限采集预算下,更值得增加的是状态覆盖,而不是简单增加 episode 数量。

与其重复采集 500 次几乎完全相同的抓杯子轨迹,不如主动变化:

  • 物体位置、姿态
  • 机器人初始关节姿态、末端执行器初始位置
  • 光照、背景、遮挡
  • 容器位置、桌面高度
  • 不同目标实例、不同任务阶段
  • 发生轻微失败后的状态
  • 物体被碰偏、滑动、倾倒后的状态

建议从如下覆盖矩阵来设计采集:

Task×Object Config×Robot State×Task Phase×Perturbation×Recovery Type\text{Task} \times \text{Object Config} \times \text{Robot State} \times \text{Task Phase} \times \text{Perturbation} \times \text{Recovery Type}

目标不是让几个 easy cell 里堆满数据,而是让 deployment 可能进入的重要 cell 都有高质量示教。

4. 第二原则:给定条件下,示教动作应尽可能稳定、流畅、可解释

Flow Matching 可以表达多模态,但不意味着数据越杂越好。

在同一个 observation / task condition 下,如果两个 action chunk 差别很大,应逐一判断:

4.1 两种行为是否都正确

如果 A1A_1 流畅、低风险、稳定完成,而 A2A_2 犹豫、碰撞、绕路、勉强完成,那么用于最终 action-head 训练时,通常应优先保留 A1A_1,降低 A2A_2 的权重或直接过滤。

4.2 差异是否能被输入条件解释

理想情况是:o1≠o2⇒A1≠A2o_1 \neq o_2 \Rightarrow A_1 \neq A_2

例如:左边有障碍 → 右绕;右边有障碍 → 左绕。这是模型应该学习的条件依赖。

4.3 两种策略是否都值得部署

如果 observation 几乎相同,但两种策略都值得部署,则这是有价值的多模态,可以保留。

如果答案是"否",则这种差异只是在增加无意义动作熵。

5. 第三原则:真正的多模态应该保留

假设同一状态下,左抓和右抓都安全、有效,则 p(A∣o,ℓ)p(A \mid o, \ell) 天然可能是多峰分布。

普通 action MSE 回归容易得到 A^=E[A∣o,ℓ]\hat{A} = \mathbb{E}[A \mid o, \ell],这可能产生一个介于两种策略之间、反而不合理的"平均动作"。

Flow Matching 的优势之一,就是可以建模完整的条件动作分布。

因此:

不要因为担心 velocity averaging 就把所有真实多模态都删掉。

真正应该减少的是:无法通过条件解释、且没有部署价值的模式冲突,而不是所有 multimodality。

6. 第四原则:尽可能通过 condition 消除"伪多模态"

如果同一个视觉状态对应多个动作,首先检查:

是否其实缺少了某个决定动作的条件变量?

例如,同一画面中机器人可能下一步抓杯子、移动勺子、或把碗推到左边。

如果只条件于视觉 p(A∣o)p(A \mid o) 会非常混乱。加入 task/subtask 后 p(A∣o,ℓ)p(A \mid o, \ell) 会明显更简单。

应尽可能让 action head 条件于:

  • task instruction、subtask、skill id、task phase
  • object-of-interest、mode / control context
  • 必要的历史状态

其本质是降低 H(A∣o,ℓ)H(A \mid o, \ell)。

7. 第五原则:警惕 partial observability 造成的 state aliasing

有时"同状态对应不同动作"并不是行为天然多模态,而是 observation 不够。

例如单帧 RGB 看起来一样,但实际上:

  • 轨迹 A 正在"向上抬"阶段
  • 轨迹 B 已经抬到位,下一步准备"向右移动"

如果 action head 只看到当前单帧视觉和当前关节状态,这两个状态可能几乎无法区分。这实际上是 state aliasing,而不是有价值的 multimodality。

解决方法不是简单增加更多数据,而是增强 conditioning:

  • frame history、proprioceptive history、previous action
  • subtask / phase、object state、contact state
  • force / tactile 信息

判断标准:

如果正确动作依赖某个变量,而模型输入里没有这个变量,那么再多 demonstration 也只能让模型学习一个更混乱的条件分布。

8. 第六原则:timestamp 对齐是硬约束

训练监督本质上是 (ot,At:t+H)(o_t, A_{t:t+H})。必须确保图像、proprioception、force/tactile、action、controller 的 timestamp 在同一个时间基准上正确对齐。

例如如果图像实际对应 t−150 mst-150\text{ ms},proprioception 对应 t−20 mst-20\text{ ms},action chunk 却从 t+50 mst+50\text{ ms} 开始,那么模型看到的经验分布会人为变成 p(A∣o~)p(A \mid \tilde{o}),其中 o~\tilde{o} 已经不是动作真正对应的状态。

从 Flow Matching 的角度看,这会直接制造无意义的条件动作熵:

时间同步错误 = 人为制造 velocity supervision 冲突\boxed{\text{时间同步错误 = 人为制造 velocity supervision 冲突}}

建议在数据采集系统层面:

  • 所有传感器统一时钟,记录原始 timestamp
  • 不依赖"到达主进程的时间"代替真实采样时间
  • 明确 action command 与实际 actuator 生效之间的延迟
  • 训练前进行 latency calibration

9. 第七原则:action chunk 的整体质量比单步动作质量更重要

Flow Matching action head 通常生成的是完整 action chunk:At=[at,at+1,…,at+H−1]A_t = [a_t, a_{t+1}, \dots, a_{t+H-1}]

因此一个训练标签是整个局部轨迹,而不是单个 action。需要重点检查:

  • 控制频率是否稳定、是否存在丢帧或重复帧
  • action 是否有 spike、controller 是否中途切换
  • 坐标系是否切换、是否存在不连续的 mode transition
  • episode 尾部 padding 是否合理
  • chunk 跨越 task boundary 时是否仍有明确语义

一个单步看起来正常的数据点,如果其后 30 步发生不合理跳变,那么整个 action chunk 都可能变成低质量监督。

10. 第八原则:统一 action 语义、单位、坐标系和尺度

必须明确每个 action dimension 的物理意义。不要不加区分地混合:

  • absolute joint position / joint delta / joint velocity
  • end-effector absolute pose / delta pose
  • base velocity / gripper position / gripper binary command

需要统一:action representation、坐标系、角度单位、长度单位、rotation representation、gripper convention、delta 定义、normalization、clipping/saturation 规则。

还应统计每个 action dimension 的 min/max、quantile、mean/std、saturation ratio、spike ratio、zero ratio、derivative distribution。

11. 第九原则:主动采恢复轨迹

部署时机器人必然会偏离训练轨迹。如果训练数据只覆盖标准初始状态 → 标准成功轨迹,那么一旦发生轻微偏差,模型可能进入数据分布之外。

因此应主动构造:

Perturbation→Recovery→Success\boxed{\text{Perturbation} \rightarrow \text{Recovery} \rightarrow \text{Success}}

例如:抓取点偏移、物体被碰偏、夹爪第一次未完全夹住、末端执行器轨迹被阻挡、物体轻微滑动、接触位置错误、放置失败后重新调整。

关键不是"多采失败",而是:多采可恢复的异常状态及其正确恢复动作。

12. 第十原则:控制不同任务、策略和 rare case 的采样比例

Flow Matching 最终学习的是经验数据分布。如果某类数据占比为 95%,模型自然会优先拟合这类模式。

需要特别关注:

  • rare-but-important recovery、小物体操作、极端姿态
  • 少见但高风险状态、边界 workspace、长尾任务
  • 特殊接触状态

建议对数据 mixture 做:task balancing、scenario balancing、recovery oversampling、duplicate trajectory downsampling、operator balancing、hard-case weighting。

目标不是让数据集看起来"自然",而是让训练分布支持真实部署需求。

13. 实用判断流程

当发现同一条件附近存在明显不同的 action chunk 时:

相似 condition 下动作不同
          ↓
两种动作都正确吗?
    /             \
  否               是
  |                |
过滤/降权      差异能被 condition 解释吗?
                  /              \
                是                否
                |                 |
           正常保留        两种策略都值得部署吗?
                              /           \
                            是             否
                            |              |
                       保留多模态      增加 condition
                                      或过滤/降权

这个流程比简单的"成功轨迹全部保留"更适合 Flow Matching action head。

14. 数据采集的核心指标

不建议仅以"100 小时"、"10000 episodes"、"100 万 transitions"作为数据质量指标。

更值得关注:

  • 状态覆盖 CstateC_{\text{state}}:关键状态空间覆盖度
  • 条件一致性 Caction∣conditionC_{\text{action}\mid\text{condition}}:给定 condition 后动作是否稳定、合理
  • 恢复覆盖 CrecoveryC_{\text{recovery}}:异常状态及恢复策略覆盖度
  • 时间质量 QsyncQ_{\text{sync}}:observation-action 时间同步质量
  • 动作质量 QtrajQ_{\text{traj}}:action chunk 的平滑性、成功率、效率和安全性

最终:

有效数据量≠原始 trajectory 数量\boxed{\text{有效数据量} \neq \text{原始 trajectory 数量}}

最终总结

从 Flow Matching 的训练目标 v∗(x,o,ℓ,τ)=E[uτ∣x,o,ℓ,τ]v^*(x,o,\ell,\tau) = \mathbb{E}[u_\tau \mid x,o,\ell,\tau] 可以直接得到机器人数据采集最重要的工程指导:

  1. 优先扩大状态覆盖:主动增加初始状态、物体配置、环境变化、任务阶段、扰动、恢复场景
  2. 保证条件动作的一致性:减少操作员随机风格、犹豫、抖动、时间错位、标定漂移、不必要的低质量策略
  3. 保留真正有价值的多模态:只要多种策略都正确、安全、值得部署,就不应该因为"动作不唯一"而删除
  4. 用 condition 解释动作差异:优先增加 task、subtask、history、phase、robot state、contact information
  5. 把 timestamp 和 action semantics 当作训练目标的一部分:错误的时间对齐或 action 定义会直接污染 velocity field
  6. 主动采 recovery-success:相比重复 nominal success,更有价值的是异常状态 → 正确恢复 → 成功

一句话版本

Flow Matching action head 的数据采集,不应追求"同一种轨迹采得更多",而应追求"更多有意义的状态 + 每个状态下高质量、可解释的动作分布"。

从数学上说:

扩大 support(p(o,ℓ))同时控制H(A∣o,ℓ)\boxed{\text{扩大 } \mathrm{support}(p(o,\ell)) \quad\text{同时控制}\quad H(A\mid o,\ell)}

这是 Flow Matching 原理对机器人示教数据采集最直接的指导。

补充:来自数据多样性实证研究的三点修正

上面的原则是从 Flow Matching 的训练目标反推出来的,属于「按训练目标应该怎样」。这篇论文在 AgiBot World(100 万条真机轨迹、217 个任务、87 种原子技能,全部来自单一 AgiBot G1 平台)上做了 控制变量实验,把其中几条从推理变成了可量化的结论,并修正了一条。

需要先说明适用范围:论文的策略是 GO-1 和 RDT,不是 Flow Matching action head。但三者都是 action chunk 级别的 imitation learning,都通过条件期望吸收同条件下的监督冲突,因此下面关于 数据分布的结论可以迁移;关于具体模型性能的数字不能。

一、状态覆盖要再拆一层:场景多样性 > 技能多样性

上面的第一原则只说「优先扩大状态覆盖」。论文把它拆成两个正交的轴:

  • skill diversity:任务指令里的原子技能(pick / place / pour / fold …)覆盖多少
  • scene diversity:同一技能下的场景、物体配置、光照、空间布局变化多少

然后在数据量完全相同(都取 10%)的前提下比较三种采样:

采样策略构造方式平均得分
scenario-based随机取 10% 场景0.33
task-based人工挑 10% 与下游最相关的任务0.36
episode-based每个任务各随机取 10% episode0.46

值得注意的是 episode-based 采样里,与下游评测相关的原子技能占比反而更低(59.2% 对 71.1%)—— 也就是说它用更少的相关技能样本赢了 0.1 分。

更关键的是分布偏移下的差距:

视觉干扰:      episode 比 scenario 高 0.13,比 task 只高 0.09
物体-环境泛化: episode 比 scenario 高 0.13,比 task 只高 0.08
                                          (p < 0.05)

两种多样性在 in-domain 上收益接近,但一旦进入分布偏移,场景多样性的优势稳定大于技能多样性。 换句话说,上面「优先扩大状态覆盖」这条原则里,p(o)p(o) 的横向覆盖比 ℓ\ell 的语义覆盖更值钱。

在任务多样性足够的前提下,继续加数据仍然有效,而且服从幂律。把 optimality gap 定义为 1−normalized score1-\text{normalized score}:

Y=βXα,y=1.24 x−0.08,r=−0.99Y=\beta X^{\alpha},\qquad y=1.24\,x^{-0.08},\qquad r=-0.99

对应的绝对得分是 0.28(无预训练)→ 0.47(10 万)→ 0.53(25 万)→ 0.58(100 万)。指数 −0.08-0.08 很小,这是对「加数据」这条路的一个定量提醒:在多样性已经足够时,再要提升一个台阶需要的 数据量是指数级的 —— 这正是下面第二点的价值所在。

二、伪多模态有了一个可计算的坐标轴:action rate

上面第 4、5 原则区分了「有价值的多样性」和「无价值的多样性」,但判据是靠人去问「这个差异能不能 被 condition 解释」。论文把 expert diversity 拆成两个可分离的维度,其中一个可以直接算:

  • spatial multimodality:从左边绕还是从右边绕 —— 真实的策略分歧,应当保留
  • action rate multimodality:同一条轨迹执行得快或慢 —— 应当消除

为什么后者对 action chunk 训练是有害的?因为 chunk 是固定长度的时间窗。同一条 A→DA\rightarrow D 的空间轨迹,快慢不同会落成完全不同的标签:

Demo 1(慢)  chunk = [A → B]
Demo 2(快)  chunk = [A → B → C → D]
 
观测几乎相同,监督完全不同

空间上等价的运动被当成两个不同训练样本 —— 这就是上面第 8 原则讲的「人为制造 velocity supervision 冲突」在时间轴上的形式。timestamp 错位是观测与动作之间的错位,action rate 偏置是 同一条动作序列在时间上的伸缩;两者都在扩大 H(A∣o,ℓ)H(A\mid o,\ell),而且都不是真实的策略多模态。

论文给出的速度度量很朴素:把末端执行器相对位移各维归一化到 [−1,1][-1,1],再取 L1 范数

v(at:t+T)=∥at:t+Teef∥1v(a_{t:t+T})=\left\|a^{\text{eef}}_{t:t+T}\right\|_1

纠偏方式是先学一个 ARM (Action Rate Model):冻结的 SigLIP 视觉编码器加一个 MLP,从 observation 预测该状态下的期望速度

LARM=E(ot,at:t+T)∼D∥ARM(ot)−v(at:t+T)∥22\mathcal L_{\text{ARM}}=\mathbb E_{(o_t,a_{t:t+T})\sim D} \left\|\mathrm{ARM}(o_t)-v(a_{t:t+T})\right\|_2^2

训练策略时,不再直接用固定长度 TT 的 chunk,而是先找出与期望速度最匹配的实际长度

L=arg⁡min⁡L∣ARM(ot)−v(at:t+L)∣,L∈[0.5T, 1.5T]L=\arg\min_L\left|\mathrm{ARM}(o_t)-v(a_{t:t+L})\right|, \qquad L\in[0.5T,\ 1.5T]

再把 at:t+La_{t:t+L} 插值回长度 TT。于是相似观测下的样本被拉到一致的速度上,空间信息保持不变。 冻结视觉编码器是刻意的:让 ARM 学「相似观测的平均速度」,而不是记住具体画面。

效果(4 个真机任务平均分):

预训练数据微调数据平均分
biasedbiased0.46
debiasedbiased0.49
biaseddebiased0.50
debiaseddebiased0.53

两阶段都纠偏得到 +15%,相当于把预训练数据放大 2.5 倍;倒水任务从 0.20 到 0.32(+60%), 叠衣服 +23%。数据效率上,纠偏后 60 条示教超过原方法 120 条;数据越少收益越大(15 条示教时, Make Sandwich 从 0.35 到 0.52)。微调阶段的幂律指数也更陡(Wipe Table 从 −0.67-0.67 到 −1.01-1.01), 即同样的数据能更快压掉 optimality gap。

这里有一个对上面第 13 节流程图的实质修正。那张图把「无法被 condition 解释的差异」一律导向 「过滤或降权」。但对 action rate 这一类偏置,过滤会连同轨迹里的空间信息一起丢掉,而论文的做法是 第三条路:重参数化。同时论文也验证了两种更直觉的做法为什么不行 ——

  • 全部归一化到统一速度:精细任务(插拔对齐)本来就需要慢,倒水本来就需要停顿,速度是任务要求的 一部分
  • 把每条 episode 缩放到相同时长:episode 内部各段速度本来就异构,而且不同初始条件下合理时长本就 不同

所以正确的目标不是「把速度压平」,而是「让速度成为 observation 的函数」—— 这和上面第 6 原则 (用 condition 消除伪多模态)是同一个思路,只是这里的 condition 不是加进模型输入,而是用来 重整标签。

关键洞察

判断一种动作差异该保留还是该消除,看它是否能被 observation 解释;判断该过滤还是该纠偏, 看丢掉它是否会连带丢掉别的有效监督。速度偏置属于后者:它和空间轨迹纠缠在同一段数据里,所以正确 做法是把速度对齐,而不是把这条轨迹删掉。

两个使用前提值得记住:插值改变了动力学,需要高精度控制器才能跟得上,否则要改成让策略预测 reached pose(实际到达位姿)而不是 commanded pose;另外对乒乓球这类速度本身参与环境交互的动态 任务,这套纠偏不适用。

三、本体多样性:一致性比覆盖更重要

上面的原则没有讨论这个维度。论文用单一本体(AgiBot G1)的高质量数据预训练,再迁移到形态、动作 空间、相机配置都不同的平台:

模型预训练数据真机 Agilex 平均分
RDT-OXEOXE (Open X-Embodiment),22 种本体0.38 ± 0.03
RDT-AWBAgiBot World,单一本体0.43 ± 0.04

而且评测环境的控制方式和相机配置本来就出现在 OXE 训练集里,对 OXE 一方有利。作者明确说这只是 existence proof,不是证明单本体普遍更优。

对采集的指导是保守但有用的:不要为了「将来要跨本体」而提前把预算摊薄到多个平台。跨本体能力 更多来自微调阶段,而预训练阶段更值钱的是采集协议的一致性 —— 统一的本体、相机、标定和验收流程。 这与上面第 10 原则(统一 action 语义、单位、坐标系)指向同一件事:一致性本身就是数据质量。

仍然没有解决的部分

论文自己列出的遗留问题,恰好是上面第 4 原则里最难自动化的那一类:

采集中无意义的停顿
次优行为模式(可能让机器人进入死循环)

这些同样属于「无法被 condition 解释、也没有部署价值」的模式,但目前没有像 action rate 这样 可计算的度量,仍然依赖人工筛查和评分。

与上面原则的对应关系

上面的原则这篇论文提供的
优先扩大状态覆盖实证支持,并拆成 scene / skill 两轴:分布偏移下 scene 更关键
减少无意义的动作熵给出一个可计算的子集(action rate)和纠偏方法,+15% ≈ 2.5× 数据
保留真正的多模态支持:spatial multimodality 必须保留,压平速度不等于压平策略
用 condition 解释动作差异扩展:condition 不只是喂进模型,也可以用来重整标签
不可解释的差异就过滤或降权修正:先看能不能纠偏,过滤会连带丢掉空间监督
统一 action 语义与坐标系提升为预训练阶段的首要项:一致性优先于本体覆盖