论文笔记

1 目标问题

从人类演示中学习,是教授机器人操作技能的一种很有前途的方法。

目前大多数模仿学习算法仍然局限于学习短期的操作,例如开门或抓取特定物品。

而关于长期任务的研究,目前有两个方向:分层模仿学习和从演示数据中学习。分层学习旨在通过端到端实现高级规划到低级运动控制的学习。从演示数据中学习是指人类通过遥控机器人于环境互动来收集数据。

本文提出了一个分层学习框架,从大量人类演示数据中学习潜在的计划,来指导机器人在少量演示中实现视觉运动控制。

2 主要方法

image.png

2.1 收集人类数据

人类在用手与环境互动的过程中,创造了一个手的轨迹。本文使用两台经过校准的相机来跟踪人类演示数据中的3D手轨迹,手部位置检测使用现有的库。

2.2 从人类数据中学习3D潜在规划

问题:给定一个由目标图像表示的长期任务,策略产生以目标为条件的行动。

将该问题转化为分层学习策略,其中高级规划器从目标图像中提取关键特征,并转化成低维的规划,利用这些规划引导运动控制器动作。为了训练高级规划器,本文使用廉价的数据源(人类演示数据)

(1)多模式潜在计划学习

利用收集的人类演示数据和对应的3D手部轨迹,将学习规程转化为目标条件的3D轨迹生成任务。即将人类演示图像,目标图像处理为低维特征,利用MLP编码为潜在计划向量,利用潜在计划向量和手的位置,利用MLP解码为3D手部轨迹的预测。

为了解决不同人演示同一任务的差异,使用基于MLP的高斯混合模型来对潜在计划的轨迹分布进行建模。

(2)处理人类演示数据和机器人之间的视觉差异

本文考虑人与机器人在同一环境中,需要解决机器人与人类外观不同导致的视觉差异。通过计算人类和机器人的视觉编码器的特征嵌入的分布,最小化两者距离(此步骤机器人与人类视频不需要是对应的)

2.3 多任务模仿学习

(1)用于潜在计划生成的视频提示

使用单镜头视频作为目标指定提示,发送给训练好的潜在规划器,生成机器人可执行的潜在计划。

规划器将视频分成多个帧,每个时间步长,规划器从序列中取一个图像帧作为目标图像,生成潜在规划引导机器人动作。

(2)基于Transformer的计划引导与模仿

在执行复杂任务时,仅使用高层规划是不够的,还需要考虑底层的细节。因此考虑将机器人腕部相机和本体感觉都转换成低维特征向量,与潜在计划进行结合,利用Trasformer架构(因为其擅长管理长期运动生成)进行处理。

(3)多任务

在同一环境中的所有任务中共享相同的规划器和策略模型。

算法复现

1 环境搭建

(1)进入所下载代码环境

1
cd MimicPlay

(2)创建 conda 环境

1
2
conda create -n mimicplay python=3.8 -y
conda activate mimicplay

(3)安装 MuJoCo

1
pip install mujoco==2.3.0

如果出现问题imgaug 0.4.0 requires XXXXXX, which is not installed.
解决方法如下

  1. 安装报错提示的imgaug所需的依赖项:pip install imageio matplotlib Pillow scikit-image six opencv-python
  2. 重新安装mujoco:pip install mujoco

(4)安装robosuite

1
2
3
4
5
6
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

1
2
3
4
cd ..
git clone https://github.com/StanfordVL/bddl.git
cd bddl
pip install -e .

(6)安装LIBERO

1
2
3
4
5
cd ..
git clone https://github.com/Lifelong-Robot-Learning/LIBERO.git
cd LIBERO
pip install -r requirements.txt
pip install -e .

(7)安装robomimic

1
2
3
4
5
cd ..
git clone https://github.com/ARISE-Initiative/robomimic
cd robomimic
git checkout mimicplay-libero
pip install -e .

第一次安装失败,然后git checkout mimicplay-libero之后才安装成功

(8)安装MimicPlay

1
2
3
4
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

例如:

1
2
3
cd MimicPlay/mimicplay
mkdir -p datasets/playdata
mv ~/Downloads/demo.hdf5 ./datasets/playdata/

(2)将原始数据转换为图像数据集

1
2
3
4
# 示例
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)提取末端轨迹用于上层规划器的训练

1
python scripts/dataset_extract_traj_plans.py --dataset 'datasets/playdata/image_demo_local.hdf5'

(4)检查数据:重新播放数据集中的图像,保存成视频

1
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文件收集数据

1
python scripts/collect_playdata.py --bddl-file 'scripts/bddl_files/KITCHEN_SCENE9_playdata.bddl' --device 'keyboard'

收集的原始数据可以在robosuite/robosuite/models/assets/demonstrations/路径下找到。

(2)将原始数据转换成robomimic格式

1
python scripts/convert_playdata_to_robomimic_dataset.py --dataset 'path_to_your_data'

(3)现在有了robomimic格式的数据,按照#1.3 公共数据集中的步骤生成特定任务的视频提示

3 数据准备(从人类演示中学习机器人动作)

3.1 配置人手检测模型

(1)配置开源的 hand_object_detector

1
2
3
4
5
6
7
8
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),移动到下面的路径

1
2
3
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脚本放入人手检测器的目录下

1
2
cd mimicplay/scripts/human_playdata_process/
cp demo_mp4.py hand_object_detector/

3.2 从人类演示生成数据集

(1)复制两个示例视频

1
2
cp vis_1.mp4 hand_object_detector/
cp vis_2.mp4 hand_object_detector/

(2)生成hdf5数据文件

1
2
cd hand_object_detector/
python demo_mp4.py

(3)可视化数据集

1
2
cd scripts/human_playdata_process/
python vis_processed_human_play_data.py

4 训练

4.1 训练高级规划器

1
2
cd MimicPlay/mimicplay
python scripts/train.py --config configs/highlevel.json --dataset 'datasets/playdata/image_demo_local.hdf5'

训练结束后,选择评估分数最高的checkpoint,将其路径作为

4.2 训练低级机器人控制器

参考:

  1. 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