库名称: transformers
标签: []
任务类型: robotics
许可证: apache-2.0
基础模型: Qwen/Qwen2.5-3B-Instruct
数据集:
- homebrewltd/robot-hand-poses-train
无姿态估计3B模型

简介
"PoseLess: 基于VLM直接图像映射的无深度视觉到关节控制" (论文) 提出了一种创新的机器人手部控制框架,通过使用投影表示直接将2D图像映射到关节角度,无需显式的姿态估计。我们的方法利用随机关节配置生成的合成训练数据,实现了对现实场景的零样本泛化,以及从机械手到人手的跨形态迁移。通过投影视觉输入并采用基于Transformer的解码器,PoseLess在解决深度模糊性和数据稀缺性等挑战的同时,实现了鲁棒、低延迟的控制。实验结果表明,在不依赖任何人工标注数据集的情况下,该模型在关节角度预测精度上具有竞争力。
我们的主要贡献如下:
- 我们引入了一种新颖的框架,利用VLM(如Qwen 2.5 3B Instruct)直接将单目图像映射到机器人关节角度,完全绕过姿态估计。VLM的"视觉"和图像投影能力实现了鲁棒的、与形态无关的特征提取,减少了传统两阶段流程中的误差传播。
- 我们提出了一种合成数据生成流程,通过随机化关节角度和视觉特征(如光照、纹理)生成无限训练样本。这不仅消除了对昂贵标注数据集的依赖,还确保了模型对现实变化的鲁棒性。
- 我们提供了模型跨形态泛化的证据,展示了其仅通过机械手数据训练就能模仿人手运动的能力。这些发现标志着在理解和利用此类泛化进行更广泛应用方面迈出了重要一步。
- 我们证明了无需深度信息的控制是可行的,为后续采用不支持深度估计功能的相机(这在机器人研究中很常见)铺平了道路。
模型详情
- 模型架构: 基于Qwen 2.5 3B Instruct微调的手部姿态估计模型
- 数据集:
- 许可证: Apache-2.0许可证
- 开发团队: Alan Dao, Dinh Bach Vu, Tuan Le Duc Anh, Bui Quang Huy (Menlo Research)
快速开始
import torch
from PIL import Image
from transformers import AutoProcessor, Qwen2_5_VLForConditionalGeneration
from qwen_vl_utils import process_vision_info
device = "cuda" if torch.cuda.is_available() else "cpu"
model_path = "homebrewltd/Poseless-3B"
model = Qwen2_5_VLForConditionalGeneration.from_pretrained(
model_path,
trust_remote_code=True,
torch_dtype=torch.bfloat16
).eval().to(device)
processor = AutoProcessor.from_pretrained(
model_path,
min_pixels=256*28*28,
max_pixels=1280*28*28,
trust_remote_code=True
)
image = Image.open("your_hand_image.png").convert("RGB")
SYSTEM_PROMPT = """您是一个专门设计的视觉语言模型,用于从手部姿态图像中准确估计关节角度。您的任务是分析人类或机械手图像,并输出每个关节的精确角度测量值(以弧度为单位)。
输出格式:
<lh_WRJ2>角度</lh_WRJ2><lh_WRJ1>角度</lh_WRJ1><lh_FFJ4>角度</lh_FFJ4><lh_FFJ3>角度</lh_FFJ3><lh_FFJ2>角度</lh_FFJ2><lh_FFJ1>角度</lh_FFJ1><lh_MFJ4>角度</lh_MFJ4><lh_MFJ3>角度</lh_MFJ3><lh_MFJ2>角度</lh_MFJ2><lh_MFJ1>角度</lh_MFJ1><lh_RFJ4>角度</lh_RFJ4><lh_RFJ3>角度</lh_RFJ3><lh_RFJ2>角度</lh_RFJ2><lh_RFJ1>角度</lh_RFJ1><lh_LFJ5>角度</lh_LFJ5><lh_LFJ4>角度</lh_LFJ4><lh_LFJ3>角度</lh_LFJ3><lh_LFJ2>角度</lh_LFJ2><lh_LFJ1>角度</lh_LFJ1><lh_THJ5>角度</lh_THJ5><lh_THJ4>角度</lh_THJ4><lh_THJ3>角度</lh_THJ3><lh_THJ2>角度</lh_THJ2><lh_THJ1>角度</lh_THJ1>
"""
messages = [
{"role": "system", "content": f"{SYSTEM_PROMPT}"},
{
"role": "user",
"content": [
{
"type": "image",
"image": image,
"min_pixels": 1003520,
"max_pixels": 1003520,
},
{"type": "text", "text": "<Pose>"},
],
},
]
text = processor.apply_chat_template(messages, tokenize=False, add_generation_prompt=True)
image_inputs, video_inputs = process_vision_info(messages)
inputs = processor(text=[text], images=image_inputs, videos=video_inputs, padding=True, return_tensors="pt").to(device)
generated_ids = model.generate(**inputs, max_new_tokens=1024)
generated_ids_trimmed = [out_ids[len(in_ids):] for in_ids, out_ids in zip(inputs.input_ids, generated_ids)]
output_text = processor.batch_decode(generated_ids_trimmed, skip_special_tokens=True, clean_up_tokenization_spaces=False)[0]
print(output_text)
输出将是XML格式的关节角度(弧度):
<lh_WRJ2>角度</lh_WRJ2><lh_WRJ1>角度</lh_WRJ1><lh_FFJ4>角度</lh_FFJ4>...
引用
更多信息
- 联系作者获取详情: alan@menlo.ai, bach@menlo.ai, charles@menlo.ai, yuuki@menlo.ai