SKT: Integrating State-Aware Keypoint Trajectories with Vision-Language Models for Robotic Garment Manipulation
核心思想
机器人叠衣服是一个经典难题。现有方法为每种衣物类型训练单独的模型(T恤一个、毛巾一个、短裤一个),成本高且不能泛化。
SKT 提出用一个统一的 VLM 处理所有类型的衣物操控:
- 状态感知成对关键点表征 → 统一描述衣物的抓取和放置位置
- 大规模合成数据集(20,000 张)→ 模拟各种衣物状态(展平、折叠、变形)
- 两阶段 VLM 微调 → 先学关键点检测,再学动作轨迹生成
背景知识
衣物操控为什么难
| 挑战 | 说明 |
|---|---|
| 高度可变形 | 衣物的状态空间几乎无限 |
| 自遮挡 | 折叠的衣物部分被自身遮盖 |
| 多样性 | T恤、裤子、毛巾结构完全不同 |
| 状态依赖 | 同一件衣物展平和折叠时,操控方式完全不同 |
什么是成对关键点
不是检测单个特征点,而是检测成对的点——表示”从这里抓,放到那里”:
\[\{(x_1, y_1), (x_2, y_2)\} = \text{抓取点} \to \text{放置点}\]双臂操控时,输出两组动作元组:
- 左臂:$LA((x_1^l, y_1^l), (x_2^l, y_2^l))$
- 右臂:$RA((x_1^r, y_1^r), (x_2^r, y_2^r))$
方法详解
1. 合成数据集生成
1.1 衣物网格生成
- 根据衣物类型模板创建 2D 边界顶点
- 用贝塞尔曲线连接顶点生成光滑轮廓
- 1cm 边长约束三角化 → 得到衣物网格
- 生成 UV 贴图用于纹理映射
- 在折叠各阶段跟踪顶点 → 自动标注关键点
1.2 衣物变形模拟
使用 Blender 物理仿真:
- 随机朝向 + 自然下落 → 生成褶皱
- 圆形抓取动作模拟折叠
- 随机物理属性(弯曲刚度、拉伸、摩擦、阻力)
- 重点生成逼真的折叠模式
1.3 图像渲染
- 使用 PolyHaven 纹理贴衣物和环境
- 放置 Google Scanned Objects 的干扰物
- 随机相机位置和光照
- Cycles 渲染引擎生成逼真图像
- 总共 20,000 张合成图像
1.4 关键点标注
使用光线投射验证顶点可见性:如果顶点的 2-ring 邻域中有任何顶点在渲染图中可见,则该关键点标记为可见。
2. VLM 架构
基于 SPHINX-X 框架(LLaMA2 语言骨干),使用多编码器融合:
| 编码器 | 功能 |
|---|---|
| CLIP | 全局特征 |
| DINOv2 | 局部语义信息 |
| QFormer | 全局特征摘要 |
Any Resolution 策略:将输入图像分割为子图像 → 各编码器提取特征 → 通道级拼接局部和全局特征 → 投影层对齐视觉和语言 token。
3. 两阶段微调
Phase 1:关键点检测
- 训练视觉投影层
- 提示:“Please detect the keypoints used to manipulate the [garment-type]”
- 输出以
<kp>token 标记 - 让 VLM 先理解衣物的空间结构
Phase 2:动作元组生成
- 训练视觉投影层 + 语言模型
- 提示:“Please provide actions for folding the [garment-type]”
- 输出以
<action>token 标记 - 减少关键点检测任务比例,聚焦于将点对与动作关联
两阶段的必要性:Phase 1 作为”桥梁”连接预训练 VQA 能力和新的操控任务;直接训练 Phase 2 效果差。
4. 训练配置
| 参数 | 值 |
|---|---|
| GPU | 8 × A100 (80GB) |
| Epochs | 3 |
| 训练时间 | ~4 小时 |
| Batch size | 4 |
| 学习率 | 2×10⁻⁵ |
| 视觉编码器 | 冻结 |
实验结果
评估指标
- mAP:L2 距离阈值 2/4/8 像素下的平均精度
- AKD:平均关键点距离(像素,越低越好)
Sim-to-Real(仅用合成数据)
| 衣物类型 | 方法 | mAP₂,₄,₈ | AKD (像素) |
|---|---|---|---|
| T恤 | 专用检测器 | 58.2 | 14.0 |
| T恤 | SKT | 63.3 | 8.7 |
| 短裤 | 专用检测器 | 51.4 | 27.3 |
| 短裤 | SKT | 56.7 | 10.9 |
| 毛巾 | 专用检测器 | 83.2 | 13.1 |
| 毛巾 | SKT | 83.9 | 3.4 |
SKT 的 AKD 比专用模型低 40-60%,且只用一个模型覆盖所有类型。
合成+真实数据联合训练
| 衣物 | 专用检测器 AKD | SKT_KP AKD | SKT AKD |
|---|---|---|---|
| T恤 | 8.3 | 6.8 | 8.1 |
| 短裤 | 11.2 | 7.9 | 7.1 |
| 毛巾 | 6.8 | 2.0 | 3.0 |
SKT_KP(仅关键点)在所有类型上优于专用模型。
消融实验
| 高分辨率 | KP 任务 | 两阶段训练 | mAP₂,₄,₈ | AKD |
|---|---|---|---|---|
| ✗ | ✗ | ✗ | 55.7 | 12.2 |
| ✓ | ✗ | ✗ | 64.7 | 9.8 |
| ✓ | ✓ | ✗ | 65.3 | 8.9 |
| ✓ | ✓ | ✓ | 67.9 | 7.7 |
每个组件都有贡献:高分辨率最重要(-2.4 AKD),两阶段训练提供额外改善。
泛化能力
- 长裤(从短裤泛化):强——跨类别推理成功
- 长袖(训练中未出现):弱——复杂折叠超出训练分布
个人思考
- “一个模型做所有衣物” 是正确的方向:成对关键点是衣物无关的操控表征,VLM 的语义理解负责区分不同衣物类型。
- 合成数据的有效性:仅用合成数据就在真实世界表现良好(AKD 3.4-10.9 像素)→ Blender 物理仿真生成的变形足够逼真。
- 两阶段微调的桥梁作用:先学”看”(关键点在哪里)再学”做”(如何折叠)→ 这种渐进策略避免了从 VQA 到操控的巨大跨越。
- 高分辨率输入的关键性:衣物关键点是小目标(如衣领角、袖口),低分辨率下无法精确定位——这在消融中体现最明显。
- 局限性坦诚:对训练中未出现的衣物类型(长袖)泛化不佳——说明当前合成数据的覆盖范围还需扩展。