一、论文笔记

标题:Contact-GraspNet: 在杂乱场景中高效生成6-DoF抓取
期刊会议:ICRA2021
作者团队:Martin Sundermeyer(NVIDIA)
时间:2021
代码https://github.com/NVlabs/contact_graspnet
数据集

1.1 目标问题

提出了一种端到端的网络,从图像的深度数据中生成6D抓取分布。

1.2 方法

使用原始的深度图,以及(可选使用对象掩码),生成6D抓取建议以及抓取宽度。

(1)抓取表示方法

可以发现,大多是可以预测的两手指抓取,在抓取前至少可以看到两个接触点的一个。因此可以将抓取问题简化为估计平行板抓取器的3D抓取旋转和抓取宽度。

image.png

其中a是接近向量,b是抓取基线向量,d是从抓取基线到抓取基座的距离。使用这种表示方法可以加速学习过程,提高预测精度,且没有歧义和间断区域。

(2)数据生成

使用了ACRONYM数据集。在场景中以随机稳定的姿态放置具有密集抓取注释的对象网格。其中会导致夹爪与模型碰撞的抓取姿态将被删除。

(3)网络

使用PointNet++中提出的集合概要和特征传播层来构建非对称的U形网络。

网络有四个检测头,每个检测头包括两个1D卷积层,每个点输出s∈R,z1∈R3,z2∈R3、o∈R10,从中我们形成了我们的抓取表示。

将抓取的宽度划分为10个等距的抓取宽度,来抵消数据不平衡问题,然后选择置信度最高的抓取宽度表示。由于接近方向和基线方向是正交的,通过进行正交归一化预测,将这一性质加入到训练过程,有助于3D旋转的回归。

image.png

1.3 思考

在数据集中预先定义好了抓取姿态,然后进行监督训练。使用时根据深度图首先确定物体所在区域,然后利用其点云预测抓取分布。

自定义物体的数据集不易制作。

二、算法复现

2.1 准备工作

(1)环境搭建

下载代码

1
git clone https://github.com/NVlabs/contact_graspnet.git

创建虚拟环境
(这个环境是没问题的,如果出现依赖不满足要求的情况,可以先删掉那项,创建完环境后再手动安装)

1
2
conda env create -f contact_graspnet_env.yml
conda activate contact_graspnet_env

重新编译pointnet_tfops

1
sh compile_pointnet_tfops.sh

(2)模型和数据准备

从作者给出的连接下载trained models,并将它们放到./checkpoints/,下载test data,并将它们放到./test_data

2.2 预测抓取

给定一个深度图(.npy文件/单位m),相机内参,2D实例分割图,运行下面的命令

1
2
3
python contact_graspnet/inference.py \
--np_path=test_data/0.npy \
--local_regions --filter_grasps

--np_path:输入的.npz/.npy文件,带有深度、内参、实力分割图、RGB信息
--ckpt_dir:checkpoint目录,默认为checkpoint/scene_test_2048_bs3_hor_sigma_001,非常干净的深度数据使用scene_2048_bs3_rad2_32,非常混乱的深度数据使用scene_test_2048_bs3_hor_sigma_0025
--local_regions:裁剪的3D实例分割
--filter_grasps:筛选抓取点,使他们只为于对象的表面
--skip_border_objects:忽略碰到深度图边缘的实例分割
--forward_passes:前向计算的次数,增加可以提高抓取的采样点
--z_range:[min, max]的z值来裁剪输入点云
--arg_configs TEST.second_thres:0.19 TEST.first_thres:0.23:覆盖抓取的配置置信度来获得更多或更少的抓取候选

2.3 训练网络

(1)下载数据集

下载10000个带有Contact抓取信息的桌面训练场景Google Drive,解压为下面的格式

1
2
3
4
5
acronym
├── grasps
├── meshes
├── scene_contacts
└── splits

(2)训练Contact-GraspNet

如果在没有外设的服务器上训练,设置环境变量

1
export PYOPENGL_PLATFORM='egl'

使用配置文件contact_graspnet/config.yaml开始训练

1
2
python contact_graspnet/train.py --ckpt_dir checkpoints/your_model_name \
--data_path /path/to/acronym/data

(3)生成自己的Contact Grasps和场景

所下载的scene_contacts是从Acronym数据集生成的,要生成自己的数据集,下载安装acronym_tools

第一步,对象的6D抓取被映射到保存在mesh_contacts的接触点

1
python tools/create_contact_infos.py /path/to/acronym

根据生成的mesh_contacts,可以创建桌面场景保存到scene_contacts

1
python tools/create_table_top_scenes.py /path/to/acronym

一个线程大约花费3天,可以多次运行命令在多个核上并行处理。

可视化显示创建的桌面场景和抓取

1
2
python tools/create_table_top_scenes.py /path/to/acronym \
--load_existing scene_contacts/000000.npz -vis