论文笔记
| Key | Value |
|---|---|
| 标题 | MimicPlay Long-horizon imitation learning by watching human play |
| 期刊名称 | Conference on Robot Learning (CoRL) |
| 作者团队 | Stanford University |
| 时间 | 2023 |
| DOI | 10.48550/arXiv.2302.12422 |
| Code | https://github.com/j96w/MimicPlay |
1 目标问题
从人类演示中学习,是教授机器人操作技能的一种很有前途的方法。
目前大多数模仿学习算法仍然局限于学习短期的操作,例如开门或抓取特定物品。
而关于长期任务的研究,目前有两个方向:分层模仿学习和从演示数据中学习。分层学习旨在通过端到端实现高级规划到低级运动控制的学习。从演示数据中学习是指人类通过遥控机器人于环境互动来收集数据。
本文提出了一个分层学习框架,从大量人类演示数据中学习潜在的计划,来指导机器人在少量演示中实现视觉运动控制。
2 主要方法

2.1 收集人类数据
人类在用手与环境互动的过程中,创造了一个手的轨迹。本文使用两台经过校准的相机来跟踪人类演示数据中的3D手轨迹,手部位置检测使用现有的库。
2.2 从人类数据中学习3D潜在规划
问题:给定一个由目标图像表示的长期任务,策略产生以目标为条件的行动。
将该问题转化为分层学习策略,其中高级规划器从目标图像中提取关键特征,并转化成低维的规划,利用这些规划引导运动控制器动作。为了训练高级规划器,本文使用廉价的数据源(人类演示数据)
(1)多模式潜在计划学习
利用收集的人类演示数据和对应的3D手部轨迹,将学习规程转化为目标条件的3D轨迹生成任务。即将人类演示图像,目标图像处理为低维特征,利用MLP编码为潜在计划向量,利用潜在计划向量和手的位置,利用MLP解码为3D手部轨迹的预测。
为了解决不同人演示同一任务的差异,使用基于MLP的高斯混合模型来对潜在计划的轨迹分布进行建模。
(2)处理人类演示数据和机器人之间的视觉差异
本文考虑人与机器人在同一环境中,需要解决机器人与人类外观不同导致的视觉差异。通过计算人类和机器人的视觉编码器的特征嵌入的分布,最小化两者距离(此步骤机器人与人类视频不需要是对应的)
2.3 多任务模仿学习
(1)用于潜在计划生成的视频提示
使用单镜头视频作为目标指定提示,发送给训练好的潜在规划器,生成机器人可执行的潜在计划。
规划器将视频分成多个帧,每个时间步长,规划器从序列中取一个图像帧作为目标图像,生成潜在规划引导机器人动作。
(2)基于Transformer的计划引导与模仿
在执行复杂任务时,仅使用高层规划是不够的,还需要考虑底层的细节。因此考虑将机器人腕部相机和本体感觉都转换成低维特征向量,与潜在计划进行结合,利用Trasformer架构(因为其擅长管理长期运动生成)进行处理。
(3)多任务
在同一环境中的所有任务中共享相同的规划器和策略模型。
算法复现
1 环境搭建
(1)进入所下载代码环境
cd MimicPlay
(2)创建 conda 环境
conda create -n mimicplay python=3.8 -y
conda activate mimicplay
(3)安装 MuJoCo
pip install mujoco==2.3.0
如果出现问题:
imgaug 0.4.0 requires XXXXXX, which is not installed.解决方法如下:
- 安装报错提示的imgaug所需的依赖项:
pip install imageio matplotlib Pillow scikit-image six opencv-python- 重新安装mujoco:
pip install mujoco
(4)安装robosuite
git clone https://github.com/ARISE-Initiative/robosuite.git
cd robosuite
git checkout v1.4.1_libero
pip install -r requirements.txt
pip install -r requirements-extra.txt
pip install -e .
第一次安装失败,然后
git checkout v1.4.1_libero之后才安装成功
(5)安装BDDL
cd ..
git clone https://github.com/StanfordVL/bddl.git
cd bddl
pip install -e .
(6)安装LIBERO
cd ..
git clone https://github.com/Lifelong-Robot-Learning/LIBERO.git
cd LIBERO
pip install -r requirements.txt
pip install -e .
(7)安装robomimic
cd ..
git clone https://github.com/ARISE-Initiative/robomimic
cd robomimic
git checkout mimicplay-libero
pip install -e .
第一次安装失败,然后
git checkout mimicplay-libero之后才安装成功
(8)安装MimicPlay
cd ..
git clone https://github.com/j96w/MimicPlay.git
cd MimicPlay
pip install -e .
2 数据准备(从虚拟机器人动作数据中学习机器人动作)
2.1 官方数据集
训练集和测试视频在此处下载。训练集是一系列没有指定特定任务(没有标签)的人类演示视频。
作者推荐下载原始数据demo.hdf5,然后在本地电脑上将其处理为具有图像观察的训练数据集demo_image.hdf5,因为这样可以很好的检查环境库是否安装正确,具体步骤如下:
(1)将下载的数据集移动到mimicplay/datasets
例如:
cd MimicPlay/mimicplay
mkdir -p datasets/playdata
mv ~/Downloads/demo.hdf5 ./datasets/playdata/
(2)将原始数据转换为图像数据集
# 示例
cd MimicPlay/mimicplay
python scripts/preprocess_hdf5.py -i ./datasets/playdata/demo.hdf5 -o ./datasets/playdata/demo_modified.hdf5
python scripts/dataset_states_to_obs.py --dataset 'datasets/playdata/demo_modified.hdf5' --done_mode 0 --camera_names agentview robot0_eye_in_hand --camera_height 84 --camera_width 84 --output_name image_demo_local.hdf5 --exclude-next-obs
如果出现问题:
ileNotFoundError: [Errno 2] No such file or directory: 'patchelf'解决方法如下:sudo apt-get install patchelf
(3)提取末端轨迹用于上层规划器的训练
python scripts/dataset_extract_traj_plans.py --dataset 'datasets/playdata/image_demo_local.hdf5'
(4)检查数据:重新播放数据集中的图像,保存成视频
python scripts/playback_robomimic_dataset.py --dataset 'datasets/playdata/image_demo_local.hdf5' --use-obs --render_image_names agentview_image --video_path image_demo_local_replay.mp4
2.2 自制数据集
(1)使用BDDL文件收集数据
python scripts/collect_playdata.py --bddl-file 'scripts/bddl_files/KITCHEN_SCENE9_playdata.bddl' --device 'keyboard'
收集的原始数据可以在robosuite/robosuite/models/assets/demonstrations/路径下找到。
(2)将原始数据转换成robomimic格式
python scripts/convert_playdata_to_robomimic_dataset.py --dataset 'path_to_your_data'
(3)现在有了robomimic格式的数据,按照#1.3 公共数据集中的步骤生成特定任务的视频提示
3 数据准备(从人类演示中学习机器人动作)
3.1 配置人手检测模型
(1)配置开源的 hand_object_detector
conda create --name handobj python=3.6
conda activate handobj
conda install pytorch=1.0.1 torchvision cudatoolkit=10.0 -c pytorch
cd mimicplay/scripts/human_playdata_process
git clone https://github.com/ddshan/hand_object_detector && cd hand_object_detector
pip install -r requirements.txt
cd lib
python setup.py build develop
(2)下载fast_rcnn模型,并放置在指定位置
从Google Drive中下载faster_rcnn_1_8_132028.pth (361M),移动到下面的路径
cd hand_object_detector
mkdir -p models/res101_handobj_100K/pascal_voc
mv faster_rcnn_1_8_132028.pth models/res101_handobj_100K/pascal_voc/.
(3)将mimicplay的python脚本放入人手检测器的目录下
cd mimicplay/scripts/human_playdata_process/
cp demo_mp4.py hand_object_detector/
3.2 从人类演示生成数据集
(1)复制两个示例视频
cp vis_1.mp4 hand_object_detector/
cp vis_2.mp4 hand_object_detector/
(2)生成hdf5数据文件
cd hand_object_detector/
python demo_mp4.py
(3)可视化数据集
cd scripts/human_playdata_process/
python vis_processed_human_play_data.py
4 训练
4.1 训练高级规划器
cd MimicPlay/mimicplay
python scripts/train.py --config configs/highlevel.json --dataset 'datasets/playdata/image_demo_local.hdf5'
训练结束后,选择评估分数最高的checkpoint,将其路径作为
4.2 训练低级机器人控制器
参考:
- Mimicplay: Long-horizon imitation learning by watching human play. [Project](MimicPlay | Long-Horizon Imitation Learning by Watching Human Play (mimic-play.github.io)) Code, arXiv
评论