LeRobot 数据增强完整指南:快速让机器人视觉更鲁棒
【免费下载链接】lerobot🤗 LeRobot: Making AI for Robotics more accessible with end-to-end learning项目地址: https://gitcode.com/GitHub_Trending/le/lerobot
如果你的抓取策略在实验室里稳定运行,但换个灯光、相机角度一变就频繁失误,LeRobot 的训练期图像数据增强会很有用:它在训练时对相机画面做随机扰动,模型不必重录数据就能变得更抗扰。下文讲如何跑通与调参。
它解决了什么问题:用训练期随机扰动换泛化
一句话原理:LeRobot 的数据增强在每次取训练样本时,对相机帧随机叠加一组"干扰"——光照变化、传感器噪声、运动模糊、遮挡——逼模型学会忽略这些无关因素。
值得用它的理由有三点。一是数据不浪费:录制的数据永远以原始形式保存,增强只在训练读取时发生,换一套增强策略不用重新采数据。二是即开即用:默认配置自带亮度、对比度、饱和度、色相、锐度、仿射共 6 组变换,lerobot-train加一个开关就能跑。三是可调可控:每个算子有独立的采样权重和参数区间,还能用可视化脚本先"看"效果再训练,而不是一上来就烧几个 epoch 才发现增强过头。
核心概念速览:配置、采样、算子三层
整套机制分三层,理解这三层后所有参数都不难记。
- 配置层:
ImageTransformConfig描述单个变换(weight 权重、type 类型名、kwargs 参数区间);ImageTransformsConfig描述整体(是否启用、每帧最多用几个、顺序是否随机、包含哪些变换)。 - 采样层:
RandomSubsetApply是一个"抽签器"——按归一化后的权重做不放回多项式采样,每帧最多抽max_num_transforms个变换依次执行。注意:enable=False或一个变换都抽不到时,整条流水线退化为恒等操作,图像原样通过。 - 算子层:既能用 torchvision
v2的全部现成变换,也内置了 9 个面向机器人场景的自研算子(噪声、模糊、压缩伪影、色温等),实现见 src/lerobot/transforms/。
核心特性按场景分组
按"什么时候会遇到这类干扰"来选算子,比按名字逐个试要高效得多。
🌅 场景一:光照不稳定——色彩与曝光抖动
做什么:默认配置里的 4 个ColorJitter(brightness/contrast/saturation/hue)管整体色彩;GammaCorrection模拟相机自动曝光的差异,采样是对数对称的,保证变亮和变暗概率相当,不偏移动态;PlanckianJitter则沿普朗轨迹(黑体辐射颜色轨迹)采样 3000K–15000K 的色温,模拟白炽灯到日光之间的大跨度色偏。
什么时候用:录制环境固定但部署环境灯光不可控,比如白天窗边、晚上车间。
怎么配:kwargs 给 (min, max) 区间即可,训练时按均匀分布采样。默认区间偏保守(如 brightness 在 0.8–1.2),确认场景后逐步放宽。
📷 场景二:成像质量退化——传感器与传输模拟
做什么:GaussianNoise模拟 ADC 读出噪声(std 在 0–255 像素尺度上取,默认 (5, 25)),针对低光照腕部相机;MotionBlur沿随机方向(0–360°)生成 3–11 像素的单向模糊,模拟快速运动;JPEGCompression按 15–75 的质量因子做真实的 JPEG 编解码,复刻网络传图时的块状伪影和色带;SharpnessJitter每次调用重新采样一个锐度因子(0 为模糊、1 为原图、2 为两倍锐化),比固定因子更随机。
什么时候用:机器人动作快、相机光线差、画面经视频流传输到训练机时。
怎么配:这类算子计算成本高于纯色彩调整(JPEG 需要逐帧编码解码,模糊需要卷积),低配机器上建议只挑一两个进tfs。
🚧 场景三:视野被打断——遮挡与不均光照
做什么:CoarseDropout随机挖掉最多 8 个小矩形(默认边长约为图像 7%),模拟手、线缆、托盘从镜头前经过;GaussianPatchBrightness叠加 1–4 个高斯亮斑,模拟顶部多光源造成的明暗不均;RandomShadow加一条带平滑边缘的竖直明暗带,方向随机正负,避免整体统计漂移。
什么时候用:工作站内经常有物体闯入相机视野的抓取、装配工位。
怎么配:遮挡比例宁小勿大,max_height_frac默认只有 0.07,过大可能让模型学会"无视缺失区域"而误伤真实遮挡判断。
🎲 组合策略:权重、数量与顺序
做什么:weight决定每个变换被抽中的相对概率(自动归一化);max_num_transforms控制每帧叠加多少层(默认 3);random_order控制抽中后是乱序还是按 torchvision 建议顺序执行。
什么时候用:调参阶段。想"多来点对比度、少来点锐度",就调对应 weight。
怎么配:还可以跳过这套配置,把任意torchvision.transforms.v2变换(如v2.Compose([...]))直接传给数据集的image_transforms参数,完全自定义。
从零到跑通:三步最小实现
核心结论:Python API 和 CLI 两条路都只需"打开开关 + 传配置",十分钟内可跑通。
第一步,代码中加载数据集时传入增强对象(默认enable=False,必须显式打开):
from lerobot.datasets import LeRobotDataset from lerobot.transforms import ImageTransforms, ImageTransformsConfig # 训练期增强:打开开关,每帧最多随机叠加 2 个变换 cfg = ImageTransformsConfig(enable=True, max_num_transforms=2) dataset = LeRobotDataset("your-username/your-dataset", image_transforms=ImageTransforms(cfg))第二步,命令行训练则给lerobot-train追加参数即可,例如--dataset.image_transforms.enable=true、--dataset.image_transforms.max_num_transforms=4,自定义算子用--dataset.image_transforms.tfs=...传入 JSON(参考 groot 训练文档里的用法)。
第三步,正式开训前先预览效果:
# 生成增强前后对比图,输出到 outputs/image_transforms/ lerobot-imgtransform-viz \ --repo_id=lerobot/pusht \ --episodes='[0]' \ --image_transforms.enable=True该脚本会对每个变换分别输出 min/max/mean 三档效果图,脚本源码在 src/lerobot/scripts/lerobot_imgtransform_viz.py。三个完整示例(默认配置、自定义配置、纯 torchvision 管线)见 examples/dataset/use_dataset_image_transforms.py。
进阶调参与取舍
核心结论:从默认保守区间起步、逐个验证、再逐步放宽,比一步拉满稳得多。
| 参数 / 决策点 | 作用 | 取值与注意 |
|---|---|---|
enable | 总开关 | 默认False,不开则恒等通过 |
max_num_transforms | 每帧最多叠加几层 | 默认 3;越大增强越强,训练也越慢 |
weight | 单个变换的相对命中概率 | 归一化后按多项式采样,≤0 会被直接剔除 |
random_order | 抽中后是否乱序执行 | 默认False,按 torchvision 建议顺序 |
kwargs区间 | 参数采样范围 | 区间越窄扰动越小;(x, x) 即固定值 |
| 算子选择 | 计算成本差异 | JPEG/模糊类比纯色彩调整贵,低配环境慎用 |
两个容易忽略的取舍点:其一,评估集在训练管线中被刻意设为不加增强,所以你对比"开/关增强"时的验证曲线,指标口径是一致的,可以放心比较。其二,GaussianPatchBrightness、RandomShadow、GammaCorrection的设计都刻意保持"变亮/变暗对称",就是为了不挪动 BatchNorm 这类归一化层的统计量——自己加自定义算子时,也建议守住这条线。
常见问题与踩坑
Q:明明设了enable=True,图像却没变化?依次检查:max_num_transforms是否为 0(0 层等于没加);所有变换的weight是否都 ≤0(会被全部剔除);kwargs 区间是否写成了上下限相等的固定值且恰好在"无感"范围。
Q:增强会写坏我录制好的数据集吗?不会。增强只发生在训练加载时刻,原始数据保持原样,这也是随时更换增强策略的前提。
Q:为什么验证指标看不到增强的"副作用"?这是刻意的:训练管线给 eval 数据集传的image_transforms=None,评估始终用干净图像,保证指标可比。
Q:怎么确认某个算子到底做了什么?用lerobot-imgtransform-viz,它会为每个变换单独保存 min/max/mean 三档输出,配合组合效果图一起看,调区间时心里有数。
Q:必须用它内置的算子吗?不必。image_transforms参数接收任意可调用对象,v2.Compose([v2.ColorJitter(...), v2.RandomRotation(degrees=10)])这类纯 torchvision 管线可以直接传入。
小结
LeRobot 的数据增强 = "按权重随机抽 N 层"的采样器 + 6 组默认色彩变换 + 9 个面向机器人场景的自研算子,全部只在训练期生效,原始数据不受影响。建议路径:先开默认配置跑通,用lerobot-imgtransform-viz预览,再按实际场景(光照/退化/遮挡)逐个增补算子并放宽区间。更多细节可查官方文档 docs/source/lerobot-dataset-v3.mdx 的 Image transforms 章节、示例脚本 examples/dataset/use_dataset_image_transforms.py 与源码 src/lerobot/transforms/;想跟进项目后续规划,关注仓库的发布说明即可。
【免费下载链接】lerobot🤗 LeRobot: Making AI for Robotics more accessible with end-to-end learning项目地址: https://gitcode.com/GitHub_Trending/le/lerobot
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考