惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

博客园 - Franky
N
Netflix TechBlog - Medium
Google Online Security Blog
Google Online Security Blog
月光博客
月光博客
量子位
酷 壳 – CoolShell
酷 壳 – CoolShell
V
V2EX
腾讯CDC
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
博客园 - 聂微东
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
M
MIT News - Artificial intelligence
Vercel News
Vercel News
The GitHub Blog
The GitHub Blog
Hugging Face - Blog
Hugging Face - Blog
博客园 - 【当耐特】
Apple Machine Learning Research
Apple Machine Learning Research
aimingoo的专栏
aimingoo的专栏
博客园 - 三生石上(FineUI控件)
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
MongoDB | Blog
MongoDB | Blog
H
Help Net Security
The Cloudflare Blog
Blog — PlanetScale
Blog — PlanetScale
F
Full Disclosure
G
Google Developers Blog
罗磊的独立博客
Jina AI
Jina AI
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
Y
Y Combinator Blog
H
Hackread – Cybersecurity News, Data Breaches, AI and More
J
Java Code Geeks
A
About on SuperTechFans
IT之家
IT之家
大猫的无限游戏
大猫的无限游戏
S
SegmentFault 最新的问题
有赞技术团队
有赞技术团队
GbyAI
GbyAI
雷峰网
雷峰网
T
The Blog of Author Tim Ferriss
The Register - Security
The Register - Security
U
Unit 42
D
Docker
Martin Fowler
Martin Fowler
L
LINUX DO - 热门话题
NISL@THU
NISL@THU
阮一峰的网络日志
阮一峰的网络日志
C
Cybersecurity and Infrastructure Security Agency CISA
博客园_首页
Google DeepMind News
Google DeepMind News

马浩飞丨博客

ROS实现多机话题通信 Cloudflare R2 个人图床 Isaac Sim 机械臂逆运动学控制 ROS2_Rviz2显示URDF模型 ROS2基本命令总结 使用zsh创建更高效的shell环境 Isaac Sim 仿真环境使用简介 Ubuntu设置定时任务 审稿意见撰写流程 Ubuntu 固定USB设备端口名(ttyUSB0->自定义) Git+Github的代码备份与多设备同步 【设备使用】法奥意威 FR5 机械臂 Python 控制 Python识别图片中文字和数字_easyocr 【设备使用】omega.7主手配置与使用方法 HDF5数据文件格式 【仿真实验】robomimic项目复现 【课程笔记】Stanford CS25 V2 - Robotics and Imitation Learning Ubuntu与Window双主机共用一套键鼠 Windows与Ubuntu双系统绑定同一个蓝牙设备(无需重新配对)
【论文笔记】ACT 使用低成本硬件的双手操作模仿学习
马浩飞 · 2024-01-05 · via 马浩飞丨博客

一、论文笔记

标题:Learning Fine-Grained Bimanual Manipulation with Low-Cost Hardware
中文标题:使用低成本硬件学习细粒度双手操作
作者团队:Stanford University
期刊会议:arXiv
时间:2023
代码https://github.com/tonyzhaozh/act

1.1 目标问题

对于机器人而言,学习实现一些精细操作是较为困难的,因为涉及精确的力控以及闭环视觉反馈,这有需要先进的机器人,精确的传感器和准确的标定。

能否使用低成本、不精确的硬件来执行这些精细的操作任务?

1.2 方法

本文提出了一种简单的算法,ACT (Action Chunking with Transformers)。

首先使用 ALOHA 收集人类演示的引导机器人的关节位置,并将其作为动作,观测结果由机器人的当前关节位置和相机的输入图像组成。然后训练 ACT 根据当前观测预测未来的动作序列,也就是下一个时间步中双臂的目标关节位置。

image.png

(1)动作分块和时间集成

为了利用像素到动作的策略,通过对抗模仿学习解决复合错误。本文使用了动作分块的思想,将多个动作分组在一起平作为一个单元执行,从而使他们更有效的存储和执行。

本文将动作块的大小固定为 k ,每 k 步,智能体接收一个观测结果,生成接下来的 k 个操作,并按顺序执行这些操作,因此任务的有效范围被减小了 k 倍。

但是这种方法得到的动作块可能不是最理想的动作,因此可能导致机器人的运动不稳定。为了提高平滑型,本文在每个时间步内执行策略,得到不同的动作块相互重叠,因此会有多个预测动作,本文对这些预测进行指数加权 $w_i=exp(-m*i)$,其中 $w_0$ 是最旧的动作的权重,$m$ 越小则合并的速度越快。

(2)人类数据建模

人类可以从不同个轨迹来解决同一个任务,尤其是在不要求精度的区域,人类的动作会非常随机,因此策略重点关注高精度区域也是非常重要的。

本文将策略训练为条件变分自动编码器 CVAE 来生成当前观测为条件的动作序列。

  • CVAE 编码器:输入当前观测(机器人本体状态)和动作序列,编码后得到变量 z 分布,将其参数化为高斯分布,输出该分布的均值和方差
  • CVAE 解码器:以 z 和当前观测(图像+机器人本体状态)为条件,预测动作序列。

该部分参考论文原仓库:https://github.com/tonyzhaozh/act

2.1 环境准备

创建虚拟环境并安装依赖

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
conda create -n aloha python=3.8.10
conda activate aloha
pip install torchvision
pip install torch
pip install pyquaternion
pip install pyyaml
pip install rospkg
pip install pexpect
pip install mujoco
pip install dm_control
pip install opencv-python
pip install matplotlib
pip install einops
pip install packaging
pip install h5py
pip install ipython
cd act/detr && pip install -e .

2.2 数据收集

首先激活虚拟环境

1
conda activate aloha

进入到代码根目录

1
cd <path to act>

创建两个目录,分别用于保存数据集和训练好后的模型

1
2
mkdir -p datasets/sim_transfer_cube_scripted
mkdir checkpoints

sim_transfer_cube_scripted 任务为例,使用下面的脚本产生 50 个 episodes 的数据(可以添加 --onscreen_render 来实现实时渲染):

1
python3 record_sim_episodes.py --task_name sim_transfer_cube_scripted --dataset_dir datasets/sim_transfer_cube_scripted/ --num_episodes 50

产生的 50 个数据会以 50 个 hdf5 文件的格式保存在文件夹中,要想可视化这些数据集,可以使用下面的命令,以可视化第一个数据为例

1
python3 visualize_episodes.py --dataset_dir datasets/sim_transfer_cube_scripted/ --episode_idx 0

2.3 训练

首先需要修改 constants.py 中的 DATA_DIR 参数,将其改为自己的数据集文件夹名称:

1
DATA_DIR = '/home/mahaofei/Programs/Imitation/act/datasets'

开始训练:

1
python3 imitate_episodes.py --task_name sim_transfer_cube_scripted --ckpt_dir checkpoints/ --policy_class ACT --kl_weight 10 --chunk_size 100 --hidden_dim 512 --batch_size 8 --dim_feedforward 3200 --num_epochs 2000  --lr 1e-5 --seed 0

如果 ACT 策略在一个 episode 中是不稳定的或者是停止不变的,那么就训练更长时间,在平台期过后成功率和轨迹平滑性都会得到提高。

2.4 评估

还是和训练使用同一个脚本,只不过需要加入 --eval,该程序会把评估过程中的视频保存到 checkpoints 文件夹中,也可以添加 --onscreen_render 在评估是实时渲染。

1
python3 imitate_episodes.py --task_name sim_transfer_cube_scripted --ckpt_dir checkpoints/ --policy_class ACT --kl_weight 10 --chunk_size 100 --hidden_dim 512 --batch_size 8 --dim_feedforward 3200 --num_epochs 2000  --lr 1e-5 --seed 0 --eval

image.png

经测试,实际成功率并不高,在抓取时总会出现错位,且传递过程很难成功。

~~暂未知原因,等待后续检查。~~已查明原因,需使用特定版本的 mujoco,参考 issue #12

1
pip install mojoco==2.3.7 dm_env==1.6 dm_control==1.0.14

三、代码复现 (act-plus-plus)

最近发现作者在一篇新的论文中 Mobile ALOHA Learning Bimanual Mobile Manipulation with Low-Cost Whole-Body Teleoperation,对 ACT 算法进行了更新,基本复现流程一致,部分进行了修改。

该部分参考论文原仓库:https://github.com/MarkFzp/act-plus-plus

2.1 环境准备

下载源码

1
git clone https://github.com/MarkFzp/act-plus-plus

创建虚拟环境并安装依赖

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
conda create -n act python=3.8.10
conda activate act
pip install torchvision
pip install torch
pip install pyquaternion
pip install pyyaml
pip install rospkg
pip install pexpect
pip install mujoco==2.3.7
pip install dm_control==1.0.14
pip install dm_env==1.6
pip install opencv-python
pip install matplotlib
pip install einops
pip install packaging
pip install h5py
pip install ipython
cd act-plus-plus/detr && pip install -e .

实际上没有提到但却调用的库还有

1
2
3
4
5
6
7
pip install diffusers
pip install wandb

git clone [email protected]:ARISE-Initiative/robomimic.git
cd robomimic
git checkout diffusion-policy-mg
pip install -e .

修改 constants.py 中的 DATA_DIR 参数,将其改为自己的数据集文件夹名称:

1
DATA_DIR = '/home/mahaofei/Programs/Imitation/act/datasets'

wandb 官网创建账号,并创建一个项目,将 imitate_episodes.py 的第 148 行修改为

1
wandb.init(project="项目名称", reinit=True, entity="wandb用户名", name=expr_name)

截至 2023-01-05 开源的代码还存在一些问题,需要修改 detr/models/detr_vae.py 的第 285 行为 encoder = build_encoder(args),参考 issue

2.2 数据收集

首先激活虚拟环境

1
conda activate act

进入到代码根目录

1
cd <path to act>

创建两个目录,分别用于保存数据集和训练好后的模型

1
2
mkdir -p datasets/sim_transfer_cube_scripted
mkdir checkpoints

收集数据:以 sim_transfer_cube_scripted 任务为例,使用下面的脚本产生 50 个 episodes 的数据(可以添加 --onscreen_render 来实现实时渲染):

1
python3 record_sim_episodes.py --task_name sim_transfer_cube_scripted --dataset_dir datasets/sim_transfer_cube_scripted/ --num_episodes 50

可视化收集的数据:产生的 50 个数据会以 50 个 hdf5 文件的格式保存在文件夹中,要想可视化这些数据集,可以使用下面的命令,以可视化第一个数据为例

1
python3 visualize_episodes.py --dataset_dir datasets/sim_transfer_cube_scripted/ --episode_idx 0

2.3 训练

开始训练

1
python3 imitate_episodes.py --task_name sim_transfer_cube_scripted --ckpt_dir checkpoints/ --policy_class ACT --kl_weight 10 --chunk_size 100 --hidden_dim 512 --batch_size 4 --dim_feedforward 3200 --num_steps 2000  --lr 1e-5 --seed 0

如果爆显存了(CUDA out of memory),可以减小 batch_size

如果 ACT 策略在一个 episode 中是不稳定的或者是停止不变的,那么就训练更长时间,在平台期过后成功率和轨迹平滑性都会得到提高。

2.4 评估

还是和训练使用同一个脚本,只不过需要加入 --eval,该程序会把评估过程中的视频保存到 checkpoints 文件夹中,也可以添加 --onscreen_render 在评估是实时渲染。

1
python3 imitate_episodes.py --task_name sim_transfer_cube_scripted --ckpt_dir checkpoints/ --policy_class ACT --kl_weight 10 --chunk_size 100 --hidden_dim 512 --batch_size 8 --dim_feedforward 3200 --num_steps 10000  --lr 1e-5 --seed 0 --eval --onscreen_render

三、代码解析

3.1 训练数据格式

ACT 的训练数据生成为多个 hdf5 文件,每个文件对应一个演示数据,每个 hdf5 文件的结构如下:

  • episode_1.hdf5
    • action: dateset 数据,存储机器人的动作,shape 为 (400, 14),包括末端执行器的位置和四元数,归一化的夹爪位置(0 关闭,1 打开)
      [left_arm_qpos (6), left_gripper_positions (1), right_arm_qpos (6), right_gripper_positions (1),],
    • observations: group 组,存储观测数据
      • images: gropu 组,存储图像数据
        • left_wrist:dataset 数据,存储左侧机器人末端相机图像数据,shape 为 (400, 480, 640, 3),即长度 400,每个图像为 (480, 640, 3) 大小。
        • right_wrist:dataset 数据,存储右侧机器人末端相机图像数据,shape 为 (400, 480, 640, 3),即长度 400,每个图像为 (480, 640, 3) 大小。
        • top:dataset 数据,存储顶部相机图像数据,shape 为 (400, 480, 640, 3),即长度 400,每个图像为 (480, 640, 3) 大小。
      • qpos:dateset 数据,shape 为 (400, 14),包括绝对关节位置,归一化的夹爪位置(0 关闭,1 打开)
        [left_arm_qpos (6), left_gripper_position (1), right_arm_qpos (6), right_gripper_qpos (1)]
      • qvel:dateset 数据,shape 为 (400, 14),包括绝对关节速度(rad),归一化的夹爪速度(正数为正在打开,负数为正在关闭)
        [left_arm_qvel (6), left_gripper_velocity (1), right_arm_qvel (6), right_gripper_qvel (1)]

3.2 替换 Gym 环境

(1)补充依赖

1
2
3
pip install gym==0.12.1
pip install "cython<3"
pip install perlin_noise

(2)编写脚本生成与 ACT 训练数据格式相同的 HDF5 数据

(3)进行训练