机器人训练的数据从哪来:最常见的采集翻车点
机器人训练的数据从哪来:最常见的采集翻车点
我们团队去年帮一家制造业客户跑具身智能实验,原计划用机械臂在仓库里捡货。结果前两周数据采集就卡住了——不是机器不动,是采回来的数据根本用不上。后来才明白,数据采集不是把摄像头对准机器人就完事,里面藏着不少看不见的坑。今天把我们踩过的几个常见翻车点说出来,希望能帮正在做数据采集的同行少走弯路。
第一个坑:光线变化让模型看不清东西
去年夏天我们在一个物流中心做采集,白天阳光直射进来,下午又有货架遮挡。同一只箱子,早上采集的图片是亮白色,下午就变成灰蒙蒙的一片。后来训练出来的模型,白天能认出箱子,一到下午就经常把它当成空气。我们当时没意识到问题出在光线,一直在调模型参数,结果越调越糟。后来才学会在采集的时候同步记录环境光强度,并把不同时间段的数据分开存。训练时强制模型看到早晨、中午、傍晚三种光线下的同一物体,识别率才稳住了。其实这事说白了就是:如果你没把光线变化当成数据的一部分,模型看到的世界就只有半天。
我们后来查了当时的采集日志,发现上午十点到十二点之间,光照强度在8000勒克斯左右波动;下午两点到四点,由于货架遮挡和阳光角度变化,光照骤降到3000勒克斯以下,且伴随明显的色温偏黄。这时候如果只用上午的数据训练模型,模型对低光照环境下的边缘特征完全没有感觉,导致下午的误识率高达四成。更麻烦的是,这种问题在模型验证阶段很难被发现——因为验证集往往也是早上采的,看起来一切正常,等到真部署到仓库下午班才露馅。我们后来在训练管线里加入了光照均匀化的数据增强模块,但效果远不如在采集端就把光照变化纳入采集计划来得彻底。现在我们所有室外或半室外采集任务,都要求配备光照记录仪,并强制在不同时间段采集等量数据,哪怕这意味着要多花一天时间等待合适的光照窗口。
第二个坑:动作太快,采集设备跟不上节奏
有次我们让机械臂做快速抓取动作,每秒完成三次抓放。结果高速摄像机只能跑到每秒二十帧,动作中间的关键帧全丢了。训练数据里,机械臂要么就在原地,要么就突然出现在目的地,中间的运动轨迹就像被删掉了一段。后来换了更高帧率的设备,才把完整的动作链采集回来。这个教训很现实:你以为在录视频,其实你是在采样时间序列。如果采样频率低于动作变化速度,你得到的不是连续运动,是一串跳帧的幻觉。现在我们采集前都会先用秒表测一下最快动作需要多长时间,再据此决定设备参数。
我们后来做了一个对比实验:用二十帧每秒和一百帧每秒分别采集同样的抓取动作,然后训练两个模型去预测机械臂的关节角度变化。低帧率模型在预测中间阶段的误差平均达到十五度,而高帧率模型控制在三度以内。更严重的是,低帧率数据导致模型学会了“跳过”动作——它以为机械臂可以瞬间从点A跳到点B,而在实际控制中,这种假设会引发伺服电机过流或机械冲击。我们后来在采集流程里加入了一个强制检查步骤:必须用高速摄像机录制一段十秒的参考动作,然后用软件自动检测帧间位移是否超过设定阈值(比如五毫米),如果超过,就自动报警并建议提高帧率。现在我们的采集设备清单里,所有涉及快速运动的场景,最低帧率要求是目标动作频率的五倍,而不仅仅是两倍——这是在吃过亏之后才加的保守策略。
第三个坑:忽略了采集现场的背景噪音
去年冬天我们在一个装配车间做语音交互采集,想让机器人响应工人的语音指令。结果发现录进去的音频里,一直夹着冲压机的嗡嗡声和叉车倒车的哔哔声。后来训练出来的语音模型,在安静办公室能听懂指令,一到车间就把“拿螺丝刀”听成“拿螺丝帽”。我们当时以为只要降噪算法够强就行,结果发现现场噪音太复杂,事后处理反而把语音本身也损伤了。后来改为在采集时就佩戴定向麦克风,并同步记录环境噪音谱,训练时让模型在带噪音和不带噪音的条件下都学习。其实道理很简单:如果你没把现场声音当成数据的一部分,模型听到的就只有实验室里的安静版本。
我们后来把车间录音的频谱图拿出来分析,发现冲压机的主频在六十赫兹,带着强烈的倍频成分;叉车倒车雷达则是一千赫兹左右的周期性哔哔声,持续时间只有零点二秒但重复频率高。这些噪音恰恰掩盖了人声中“s”和“sh”音的关键频段(四到六千赫兹),导致模型在辨认“丝”和“帽”时混淆。我们曾尝试用深度学习降噪模型事后处理,但发现虽然噪音被压下去了,语音的爆破音(如“b”、“p”、“t”)也被过度抑制,词错误率反而从百分之十二升到了百分之十八。后来我们改为现场采集双通道音频:一通道用定向枪式麦克风聚焦在讲话者嘴部,另一通道用全向麦克风记录环境声。训练时,我们显式地将环境噪音谱作为一个条件变量输入模型,让它学会在不同噪音底盘下解析语音。现在我们的语音采集规范里,明确要求必须同步记录环境噪音的短时傅里叶变换(STFT)谱图,并且在训练批次中,至少有百分之四十的样本带有真实场景噪音。
第四个坑:标注不一致,导致模型学歪了
有次我们让三个标注员标注同一批抓取数据,结果有人把“夹住物体”标为成功,有人认为必须把物体举起来十厘米才算。最后训练出来的模型,在有些场景下反复夹紧又松开,不知道自己什么时候算完成了任务。后来我们才意识到,标注规则必须写死,而且要拿几十个典型案例反复确认。比如我们后来规定:只要机械臂末端力传感器读数超过两牛顿且持续超过零点五秒,就标为成功抓取。这个标准看起来机械,但省掉了无尽的争论。现在我们所有采集项目开始前,都要花半天时间把标注口径对齐,否则后面返工的时间更长。
我们后来把标注分歧的具体案例列出来:比如抓取一个光滑的塑料盒子,力传感器显示一牛顿八,但视觉上盒子已经脱离了托盘;还有抓取一个带毛边的金属零件,力传感器显示两牛顿三,但零件其实卡在了夹爪的缝隙里,根本没稳固。这些边界情况如果不提前说清楚,标注员就会凭感觉判断,导致标注不一致率高达百分之三十五。我们后来引入了一个标注一致性检验机制:每批数据必须由三人独立标注,然后计算 Fleiss’ kappa 值,只有当这个值超过零点六时才允许进入训练管线。如果低于这个阈值,就必须召开标注会议,重新解析规则并重新标注有争议的样本。现在我们的标准操作程序里,明确要求所有基于力传感器的成功判定,必须同时满足力阈值和时间持续条件,并且要求标注员在标注前必须通过一个包含二十个边界案例的在线测试,得分不低于八十五分才能上岗。
第五个坑:只采集成功案例,把失败当成没数据
早期我们总觉得,采集数据就是要展示机器人多厉害,所以只记录成功抓取、成功导航的片段。结果模型训练出来后,一遇到意外情况就毫无办法——比如物体突然滑落,或者地面有水渍导致打滑。后来我们才明白,失败才是最宝贵的数据。后来我们专门设计了一些“陷阱场景”:比如在传送带上放置易滑物料,或者故意遮挡部分视野。虽然这些片段看起来没什么用,但它们教会了模型什么时候该停下来重试,什么时候该换一种抓取方式。现在我们的采集清单里,失败案例的占比被要求不低于百分之三十。
我们后来统计了失败数据的具体作用:在加入失败样本后,模型在遇到未见过的滑动物体时,正确触发重试机制的概率从百分之四十五提升到了百分之八十二;在地面有水渍的情况下,自动切换到低速、大力度抓取策略的比例从百分之二十八升到了百分之七十六。更有趣的是,失败数据还帮助模型学会了“主动探索”——比如在视线被 partially 遮挡时,它会学会先小幅度移动夹爪来探测物体位置,而不是直接盲目抓取。我们后来在采集现场专门设置了一个失败数据采集站:传送带上会随机投放带有硅胶涂层的工件(模拟油渍),或者用可移动的挡板随机遮挡相机视野百分之二十到百分之四十。这些场景虽然看起来是“制造麻烦”,但它们产生的数据,在后续的强化学习微调阶段,贡献了超过四十%的性能提升。现在我们的采集计划里,失败场景的设计必须由场景工程师和算法工程师共同评审,并且每个失败类型都需要有明确的触发条件和期望行为描述,否则不允许进入采集队列。
我们踩过的这些坑,说到底都是把数据采集当成了技术活,而忽略了它其实是场景活。数据不是在干净的实验室里采出来的,而是在真实光线变化、设备有延迟、现场有噪音、人有分歧、任务会失败的地方才能采到有用的。如果你正在搭建数据采集流程,不妨先检查一下这五点:光线是否被记录?帧率是否匹配动作速度?背景噪音是否同步采集?标注规则是否写死且被确认?失败案例是否被有意收集?把这些基础做实了,模型训练才有可能少走弯路。
可自检清单:
- 采集时是否同步记录环境光强度或噪音谱?
- 设备帧率是否超过目标动作变化速度的两倍?
- 标注规则是否以可测量的物理量为基础?
- 是否刻意设计了失败场景来采集数据?
- 是否将不同时间段、不同工况的数据分开存储并用于训练?
文|深圳衡羽科技技术团队
本文由深圳衡羽科技技术团队整理。深圳衡羽科技专注具身智能场景落地,业务方向覆盖企业级 AI agent 工程实施、多机协同调度与内容自动化流水线。
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐



所有评论(0)