Blog · 2026-08-19

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

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

核心结论

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

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

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

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

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

设真实动作 chunk 为 ARH×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(Ao,)\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(Ao,)H(A \mid o, \ell),即给定条件下的动作熵。

2.1 有价值的多样性

例如:

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

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

2.2 无价值的多样性

例如:

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

这些差异无法被 observation 或 task condition 解释,却会直接扩大 H(Ao,)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 差异是否能被输入条件解释

理想情况是:o1o2A1A2o_1 \neq o_2 \Rightarrow A_1 \neq A_2

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

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

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

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

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

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

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

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

因此:

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

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

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

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

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

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

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

应尽可能让 action head 条件于:

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

其本质是降低 H(Ao,)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 在同一个时间基准上正确对齐。

例如如果图像实际对应 t150 mst-150\text{ ms},proprioception 对应 t20 mst-20\text{ ms},action chunk 却从 t+50 mst+50\text{ ms} 开始,那么模型看到的经验分布会人为变成 p(Ao~)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+H1]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. 第九原则:主动采恢复轨迹

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

因此应主动构造:

PerturbationRecoverySuccess\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}}:关键状态空间覆盖度
  • 条件一致性 CactionconditionC_{\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(Ao,)\boxed{\text{扩大 } \mathrm{support}(p(o,\ell)) \quad\text{同时控制}\quad H(A\mid o,\ell)}

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