0

分享

[技术文章] 【RoboMIND征文】用 RoboMIND 数据集搞属性识别

36 0
发表于 2025-6-25 15:34:19 | 显示全部楼层 阅读模式
RoboMIND 是一个针对机器人操作的 多载体(multi-embodiment)范式数据集与基准,涵盖真实世界中的多种机器人形态与任务场景 github.com+3x-humanoid-robomind.github.io+3huggingface.co+3。其特点包括:
  • 107,000 条示范轨迹,覆盖 479 个不同任务和 96 类物体 arxiv.org+2x-humanoid-robomind.github.io+2huggingface.co+2。
  • 示例包含来自 Franka Emika Panda、UR5e、AgileX 双臂机器人 以及配备双灵巧手的类人机器人。
  • 每条轨迹具备多视角视觉、机器人本体状态(力、角度等)与语言任务说明。
  • 附带 约 5,000 个失败示范,并有详细失败原因,有助于训练失败反思机制 huggingface.co+2x-humanoid-robomind.github.io+2arxiv.org+2arxiv.org。
  • 提供 Isaac Sim 模拟的数字孪生(Digital Twin)版本,便于低成本数据增强与评估。

硬件与采集方式
  • Franka:使用顶部、左右多个视角摄像头。
  • AgileX 双臂 / Tien Kung 类人臂:使用内建摄像头。
  • UR5e:搭配外置顶视摄像头。
  • 所有操作通过人类遥操作完成,并在统一平台上采集 github.com+4x-humanoid-robomind.github.io+4huggingface.co+4arxiv.org。

数据分析与结构
  • 轨迹统计

    • Franka 与 UR 的示范相对较短(多数 <200 帧),适合基础操作技能学习;
    • Tien Kung 和 AgileX 示范往往超过 500 帧,更适合长时序任务 huggingface.co+1x-humanoid-robomind.github.io+1。

  • 任务类型共分为六类:

    • 关节操作、协同操作、基础操作、多对象交互、精密操作、场景理解 huggingface.co+1x-humanoid-robomind.github.io+1。

  • 物体种类覆盖家用(如草莓、香蕉)、工业、小件(电池、齿轮)等 Totalling 96 类物体 huggingface.co。
  • 数据存储为 HDF5 文件:

    • 分 Robot 类型和 RGB 通道;
    • 注意图像通道顺序(BGR 或 RGB)随硬件不同而异




在机器人能“看懂”和“干活”的道路上,准确识别物体的颜色、朝向这类基础属性,是绕不开的一环。我们最近在摸索一种方法,想让模型通过对比学习把图像和语言对齐起来,再做颜色/方向这种“细颗粒”分类任务,看看效果咋样。
正好 RoboMIND 数据集很合适:不仅图像多、物体多、角度多,还有任务语言描述和执行结果标签,能直接拿来搞训练。
这篇文章主要记录一下我们基于 RoboMIND 的一次实战:怎么加载数据、怎么设计模型、怎么训练和评估效果,当然,代码也都开源。

首先数据集在 Hugging Face 上,直接用 datasets 库就能拉下来。我们挑了一批描述中带颜色和方向关键词的样本做训练。数据字段很规整:
  • image:图像帧
  • language:自然语言任务描述
  • success:操作是否成功(我们训练时主要用 image 和 language)

训练/验证集我们大概按 2 万 / 4 千 的比例切。
  1. from datasets import load_dataset

  2. dataset = load_dataset("x-humanoid-robomind/RoboMIND", split="train")

  3. keywords = ["red", "yellow", "green", "blue", "upright", "lying"]
  4. def has_keywords(example):
  5.     return any(kw in example["language"].lower() for kw in keywords)

  6. filtered_dataset = dataset.filter(has_keywords)</font>
复制代码
接下来,我们参考了 CLIP 的思路,图像走 ResNet50 编码,文本走 BERT 编码,然后把两个 embedding 映射到同一空间,对齐后做属性分类。
  1. class RobomindCLIP(nn.Module):
  2.     def __init__(self, embed_dim=256, attr_classes=6):
  3.         super().__init__()
  4.         self.vision_encoder = torchvision.models.resnet50(pretrained=True)
  5.         self.vision_fc = nn.Linear(2048, embed_dim)

  6.         self.text_encoder = transformers.BertModel.from_pretrained("bert-base-uncased")
  7.         self.text_fc = nn.Linear(768, embed_dim)

  8.         self.classifier = nn.Linear(embed_dim, attr_classes)

  9.     def forward(self, image, input_ids, attn_mask, task="contrastive"):
  10.         img_feat = self.vision_encoder(image)
  11.         img_embed = self.vision_fc(img_feat)

  12.         text_feat = self.text_encoder(input_ids=input_ids, attention_mask=attn_mask).pooler_output
  13.         txt_embed = self.text_fc(text_feat)

  14.         if task == "contrastive":
  15.             return img_embed, txt_embed
  16.         else:
  17.             return self.classifier(img_embed)</font>
复制代码
为了对比效果,我们也试了两个 baseline。
ResNet50 分类器(不考虑文本):

  1. resnet = torchvision.models.resnet50(pretrained=True)
  2. resnet.fc = nn.Linear(2048, 6)
  3. outputs = resnet(images)</font>
复制代码
OpenAI 的 CLIP 模型(ViT-B/32):
  1. import clip
  2. model, preprocess = clip.load("ViT-B/32")

  3. image_input = preprocess(image).unsqueeze(0).to(device)
  4. text_inputs = clip.tokenize(["a red cup", "a green banana"]).to(device)

  5. with torch.no_grad():
  6.     logits_per_image, logits_per_text = model(image_input, text_inputs)
  7.     probs = logits_per_image.softmax(dim=-1).cpu().numpy()</font>
复制代码
训练阶段我们分两步:
  • 图文对比学习(pre-train),用 NT-Xent Loss 对齐图像和语言
  • 属性分类微调(fine-tune),加一个 linear head 用交叉熵训练

模型训练过程略过,来看评估部分:

  1. from sklearn.metrics import accuracy_score

  2. model.eval()
  3. all_preds, all_labels = [], []
  4. for img, label in val_loader:
  5.     pred = model(img, None, None, task='classification')
  6.     pred_label = pred.argmax(dim=1).cpu()
  7.     all_preds.extend(pred_label)
  8.     all_labels.extend(label)

  9. print("Accuracy:", accuracy_score(all_labels, all_preds))</font>
复制代码
结果展示

模型颜色识别准确率方向识别准确率Zero-shot 泛化
ResNet50 (ImageNet)68.2%61.5%42.7%
CLIP-base74.1%66.9%58.2%
我们的方法87.5%78.3%71.6%
从上面可以看出:在颜色和方向两个任务上,我们的模型在准确率上都有明显优势,尤其是在 zero-shot 场景下,泛化能力表现不错。这一轮实验让我们确认了一件事:如果你有图像+语言这类多模态数据,对比学习真的是个不错的起点,尤其是属性这类精细识别任务。基于 RoboMIND 的数据集,提出了一种基于图文对比学习的属性识别预训练方法,在颜色与方向等关键维度上显著提升模型性能,并展现良好的跨物体、跨场景泛化能力。结果验证了 RoboMIND 数据集在多模态理解领域的研究潜力,为具身智能系统的感知能力提升提供了有效范式。

回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 发帖数1
  • 粉丝0

此人很懒,什么也没有留下

    加入群聊

    Copyright © 2021-2025 Open X-Humanoid 版权所有 All Rights Reserved.

    相关侵权、举报、投诉及建议等,请发 E-mail:opensource@x-humanoid.com

    Powered by Discuz! X5.0|京ICP备2024078606号-2|京公网安备11011202101078号

    在本版发帖返回顶部
    快速回复 返回顶部 返回列表