4、多模态数据标注:图像标注、文本指令标注、动作序列标注

多模态数据标注,说白了就是给机器人喂「三合一」的养料。图像告诉它世界长什么样,文本告诉它要干什么,动作序列告诉它怎么干。这三者缺一不可,少了任何一个,模型就是个偏科生。

我个人习惯把标注工作分成三个独立管线来跑。为什么?因为每个模态的标注工具、标注规范、质检标准都不一样,混在一起容易乱。你想想看,让一个标注员同时画框、写指令、标轨迹,不出错才怪。

4.1 图像标注:目标检测与语义分割

图像标注是VLA模型感知世界的眼睛。我见过太多团队在这上面栽跟头——标注精度不够,模型学出来的特征全是错的。

4.1.1 目标检测标注

目标检测标注的核心是「框」。但框怎么打,大有讲究。

  • 边界框(Bounding Box):用矩形框住目标物体。注意,框要贴着物体边缘,不能留太多空白。我在项目中遇到过,标注员为了省事,框打得松松垮垮,结果模型把背景也学进去了。
  • 旋转框(Rotated Box):对于长条形物体(比如机械臂、螺丝刀),用旋转框更准。普通框会包进大量无关像素。
  • 关键点(Keypoint):标注物体的关键部位,比如机械臂的关节、夹爪的指尖。这个对后续动作预测特别重要。

避坑指南:我曾经在一个项目中,标注员把「遮挡物体」的框打得特别小,只标了露出来的部分。结果模型推理时,遇到遮挡物体就只检测到一半。正确的做法是:即使物体被遮挡90%,也要用完整框标注,并加一个「遮挡」属性标签。

4.1.2 语义分割标注

语义分割比目标检测更细——它要标到像素级。每个像素都要有一个类别标签。

常用的标注方式有两种:

  • 多边形标注:沿着物体边缘打点,围成一个封闭区域。点越多,边缘越精细,但标注成本也越高。我建议:对于规则物体(比如桌子、箱子),用8-12个点就够了;对于不规则物体(比如布料、线缆),用20-30个点。
  • 刷子标注:像PS里的画笔一样,在物体上涂抹。适合大面积、纹理简单的区域。但注意,刷子标注容易漏掉小孔和缝隙。
标注方式 精度 效率 适用场景
多边形标注 精细物体、边缘复杂物体
刷子标注 大面积、纹理简单区域

小技巧:对于语义分割,我建议先做目标检测,再用检测框裁剪出物体区域,最后在裁剪区域内做分割标注。这样能减少标注员的工作量,也能提高标注一致性。

4.2 文本指令标注:任务描述与约束条件

文本指令是VLA模型的「大脑」。它告诉模型:你要做什么,以及不能做什么。

4.2.1 任务描述标注

任务描述要简洁、明确、无歧义。我见过最糟糕的标注是:「把那个东西拿过来」——哪个东西?从哪里拿?放到哪里?全是模糊的。

好的任务描述应该包含三个要素:

  • 动作:抓取、放置、推动、旋转……
  • 对象:红色杯子、蓝色方块、金属螺丝……
  • 目标位置:放到托盘上、插入孔中、推到左侧……

举个例子:

❌ 坏标注:「把杯子放好」
✅ 好标注:「抓取桌上的红色陶瓷杯,放到右侧的白色托盘中央」

为什么会这样?因为模型没有常识。它不知道「放好」是什么意思,但知道「放到托盘中央」是一个明确的空间位置。

4.2.2 约束条件标注

约束条件比任务描述更难标。它要告诉模型「不能做什么」。

常见的约束类型:

  • 安全约束:不能碰撞人、不能超过力矩上限、不能进入禁区
  • 操作约束:抓取时不能挤压易碎品、放置时不能倾斜
  • 顺序约束:必须先抓A再抓B、不能同时操作两个物体

注意:约束条件标注最容易出现「标注冲突」。比如,任务描述说「快速抓取」,但约束条件说「力矩不超过5Nm」。快速抓取往往需要大力矩,这两个条件放在一起就是矛盾的。我建议:标注约束条件时,一定要和任务描述放在一起审核,确保逻辑自洽。

4.3 动作序列标注:轨迹与力矩

动作序列是VLA模型的「手脚」。它记录了机器人每一步该怎么动。

4.3.1 轨迹标注

轨迹标注就是记录机器人末端执行器(比如夹爪)在空间中的运动路径。通常用两种方式:

  • 示教再现:人拉着机器人走一遍,机器人记录下每个时间点的位置和姿态。这是最常用的方式,但有个问题——人的手会抖,录出来的轨迹不够平滑。
  • 遥操作标注:用游戏手柄或触控设备远程控制机器人运动。这种方式更稳定,但操作员需要训练。

轨迹数据通常保存为时间序列:

timestamp, x, y, z, roll, pitch, yaw
0.000, 0.12, 0.34, 0.56, 0.01, 0.02, 0.03
0.010, 0.13, 0.35, 0.57, 0.01, 0.02, 0.03
0.020, 0.14, 0.36, 0.58, 0.02, 0.02, 0.04
...

嗯,这里要注意:轨迹的采样频率要统一。我见过有人用100Hz采样,有人用50Hz,结果模型训练时对不齐时间轴,直接崩了。

4.3.2 力矩标注

力矩标注比轨迹标注难一个量级。因为力矩不能直接「看」到,只能通过传感器测量。

标注力矩时,要记录的是:

  • 关节力矩:每个电机输出的扭矩
  • 末端力矩:夹爪施加在物体上的力
  • 接触力:机器人与环境接触时的反作用力

个人经验:我曾经在一个项目中,力矩传感器坏了,但标注员没发现,录了一堆全是0的数据。模型训练完,机器人一抓东西就碎——因为它以为抓东西不需要用力。从那以后,我要求每次标注前先做传感器校准,标注过程中实时监控力矩值,一旦发现异常立刻停止。

力矩标注的难点在于「对齐」。轨迹和力矩必须严格同步——轨迹告诉模型「手在哪里」,力矩告诉模型「手用了多大力」。如果时间轴对不上,模型学到的就是错的因果关系。

4.4 多模态数据对齐

三个模态的数据都标好了,最后一步是对齐。说白了,就是让图像、文本、动作序列在时间上「对上号」。

举个例子:

  • 第0秒:图像显示「杯子在桌上」,文本指令说「抓取杯子」,动作序列显示「机械臂开始移动」
  • 第2秒:图像显示「夹爪接近杯子」,文本指令说「抓取杯子」,动作序列显示「夹爪闭合」
  • 第3秒:图像显示「杯子被抓起」,文本指令说「抓取杯子」,动作序列显示「机械臂抬起」

对齐的方式有两种:

  • 硬对齐:每个时间点都标注三个模态的数据。精度高,但成本也高。
  • 软对齐:只在关键时间点标注,中间用插值补全。成本低,但精度稍差。

我个人建议:对于精细操作(比如装配、手术),用硬对齐;对于粗放操作(比如搬运、码垛),用软对齐就够了。

避坑指南:我曾经犯过一个错误——把图像和动作序列对齐了,但忘了对齐文本指令。结果模型训练时,看到「抓取杯子」的图像,却执行了「放置杯子」的动作。因为文本指令的时间戳比图像晚了0.5秒。所以,对齐的时候,三个模态的时间戳一定要用同一个时钟源。

多模态数据标注流程 图像数据 目标检测/语义分割 文本指令 任务描述/约束条件 动作序列 轨迹/力矩 多模态数据对齐 时间戳同步 · 模态关联 · 冲突检测 标注完成的多模态数据集 图像 + 文本 + 动作序列(已对齐) 每个模态独立标注,最后统一对齐

多模态数据标注,说到底是个「脏活累活」。没有捷径,只有细心和规范。我见过太多团队在标注阶段偷懒,结果训练阶段花十倍的时间去清洗数据。嗯,这笔账,你自己算算。