GraspNet 通用物品抓取数据集

GraspNet 通用物品抓取数据集

GraspNet 是一个通用物品抓取的开源项目,现包含

下面就 GraspNet-1Billion 展开介绍

GraspNet-1Billion

物体抓取计算机视觉领域很具有挑战性的研究课题,也是人工智能可以直接影响现实生活的应用。目前对于简单背景、单个物体的研究精度基本达标,但对于拥挤场景研究较为缺乏。究其原因,一是训练数据不足,而是没有一个统一的评价标准。针对这项问题,GraspNet论文提供了 一个大规模抓取姿态检测的数据集GraspNet-1Billion一个统一的评估系统GraspNet API以及 一个baseline模型,供研究者研究学习快乐打榜。

数据集

GraspNet-1Billion数据集包含97280张RGB-D图像和超过10亿个抓取姿势(故称1Billion)。

该数据集包含97280张RGB-D图像,这些图像取自190多个杂乱场景的不同视角,其中每一个场景512张RGB-D图像(512 × 190 = 97280 512\times 190=97280 5 1 2 ×1 9 0 =9 7 2 8 0),对于数据集中88个物体提供了精确的3D网格模型,每个场景都密集标注物体的6D pose和抓取姿态。

数据集中共有88种不同物体,从YCB数据集中选取适合抓取的32个物体,从DexNet 2.0中选取13个对抗性对象,并收集自己的43个对象来构建整个物体集,包括洗发水、塑料盆、纸质包装盒等。每种物体均有准确的CAD模型。对每个物体的CAD模型,都可以通过受力分析来使用计算机自动进行标注。

数据集一共有190 190 1 9 0个场景,对于每个场景,本文从整个物体集中随机挑选大约10个物体,将它们随意地堆在一起。数据集将场景1 ∼ 100 1\sim100 1 ∼1 0 0定为训练集,101 ∼ 130 101\sim 130 1 0 1 ∼1 3 0为”见过的”物体,131 ∼ 160 131\sim160 1 3 1 ∼1 6 0为”熟悉的”物体,161 ∼ 190 161\sim 190 1 6 1 ∼1 9 0为”没见过”的物体。每个场景由 两款相机各拍摄的 256张图片构成,这512张图片是一个机械臂上绑了两个相机拍出来的,机械臂沿着固定的轨迹移动,覆盖四分之一球体上的256个不同视点,因为运动轨迹是确定的,所以只需要标注第一张图片,其他都可以通过三维空间中的 投影变换得到;而对于第一张图片,也只需要标注物体的姿态,将场景中的物体与模型对齐后,就可以将CAD模型的标注信息 投影到RGB-D图像上了。之后需要进行 碰撞检查,去掉会产生碰撞的标注。

考虑到所有物体是已知的,标注抓取姿态分为两个阶段来进行,如图3所示。首先,对每个物体都要标注抓取姿势。

除此之外,采用解析计算的方法对每个抓取进行评分,力封闭度量在抓取评价中被证明是有效的:给定一个抓取姿态、关联物体和摩擦系数μ \mu μ,力封闭度量输出二元标签,表示抓取在该系数下是否可以,评分表示为:s = 1.1 − μ s = 1.1 – \mu s =1 .1 −μ。(μ \mu μ最小值为0.1 0.1 0 .1)

通过这两个步骤,我们可以为每个场景生成密集的抓取集G ( w ) \mathbb{G}_{(w)}G (w )​。数据集中正标签和负标签的比例大约是 1:2。1

训练图片

训练图片共 100 个场景,每个场景由 Kinect 和 RealSense 相机分别拍摄 256 张 RGB-D 图片。一个场景中的信息如下

scene_0000
|-- object_id_list.txt              # 场景中的object-id
|-- rs_wrt_kn.npy                   # RealSense相对Kinect相机的位置shape: 256x(4x4)
|-- kinect                          # kinect相机数据
|   |-- rgb
|   |   |-- 0000.png to 0255.png    # 256 rgb images
|   -- depth
|   |   |-- 0000.png to 0255.png    # 256 depth images
|   -- label
|   |   |-- 0000.png to 0255.png    # 256 object mask images, 0 is background, 1-88 denotes each object (1-indexed), same format as YCB-Video dataset
|   -- annotations
|   |   |-- 0000.xml to 0255.xml    # 256 object 6d pose annotation. ‘pos_in_world' and'ori_in_world' denotes position and orientation w.r.t the camera frame.

|   -- meta
|   |   |-- 0000.mat to 0255.mat    # 256 object 6d pose annotation, same format as YCB-Video dataset for easy usage
|   -- rect
|   |   |-- 0000.npy to 0255.npy    # 256 2D planar grasp labels
|   |
|   -- camK.npy                    # camera intrinsic, shape: 3x3, [[f_x,0,c_x], [0,f_y,c_y], [0,0,1]]
|   -- camera_poses.npy            # 256 camera poses with respect to the first frame, shape: 256x(4x4)
|   -- cam0_wrt_table.npy          # first frame's camera pose with respect to the table, shape: 4x4
|
-- realsense
    |-- same structure as kinect
</code></pre>
<p><code>train_1.zip</code>到 <code>train_4.zip</code>四个压缩包中是采集的 99 个场景 Ground Truth 及其描述信息,下载下来之后将其中的内容全部解压到一个 <code>graspnet/scenes</code>文件夹下,解压完成后目录结构如图:</p>
<pre><code>|-- graspnet
    |-- scenes
    |   |-- scene_0000/
    |   |-- scene_0001/
    |   |-- ... ...

    |   -- scene_0099/

紧接着是测试图片,其目录结构与训练图片相同,也解压到 graspnet/scenes文件夹下:

|-- graspnet
    |-- scenes
    |   |-- scene_0000/
    |   |-- scene_0001/
    |   |-- ... ...

    |   `-- scene_0189/

6 DoF grasp labels 是抓取的标签,需要解压到 graspnet/grasp_label文件夹下,

评价系统

同时,提供的评价系统通过分析计算可以直接反映抓取是否成功,做到不用详尽标注,就可以对任何抓取姿势进行评价。

对每一个预测的pose P ^ i \hat{\mathbf{P}}_i P ^i ​,通过检查位于pose夹爪之间的点云来确定其抓取的是哪个物体。然后,和标注的过程一样,通过力封闭度量(force-closure metric 2)和摩擦系数μ \mu μ确定一个二元的label。

对于抓取,我们对准确率更加关注,所以以P r e c i s i o n @ k Precision@k P r e c i s i o n @k作为评价指标,P r e s c i s i o n @ k Prescision@k P r e s c i s i o n @k定义为前k k k个抓取的准确性。A P μ AP_\mu A P μ​表示对于k k k从1到50在摩擦系数为μ \mu μ的情况下的平均准确率。并且定义A P \mathbf{AP}A P为μ = 0.2 \mu = 0.2 μ=0 .2到1.0 1.0 1 .0步长0.2 0.2 0 .2的平均A P AP A P。(有点COCO mAP的意思)

为了避免全部抓到同一个点上,在评估前会跑一个pose-NMS(非极大值抑制)。

baseline模型

此外,还提出了一个端到端抓取姿态预测网络,点云作为输入,采用解耦的方式来学习 接近方向和操作参数(approaching direction and operation parameters),例如平面旋转、抓取宽度。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rSnENbmT-1646122082502)(media/graspnet-baseline/image-20220301143028250.png)]

抓取姿势表示

作者使用夹爪式机械臂进行抓取,抓取姿势G \mathbf G G表示为
G = [ R t w ] \mathbf{G}=[\mathbf{R}\, \mathbf{t}\, w]G =[R t w ]
其中R ∈ R 3 × 3 \mathbf R \in \mathbb R^{3\times 3}R ∈R 3 ×3标志夹爪的方向,t ∈ R 3 × 1 \mathbf t \in \mathbb R^{3\times 1}t ∈R 3 ×1为抓取的重心,w ∈ R w \in \mathbb R w ∈R为夹爪的宽度。但是,R \mathbf R R不是旋转矩阵:因为旋转矩阵必须是正交阵,约束其为正交阵不利于神经网络的训练。具体表示方式参考3

网络结构

网络结构分为三部分:ApproachNet、OperationNet、ToleranceNet。

Approach Network

Approach Network预测approach vector和可行的抓取点。

Base Network

骨干网络为PointNet++,输入N × 3 N \times 3 N ×3的点云,输出一个通道数为C C C的特征集。从中使用4方法采样出M M M个点。

Output Head

文章将approaching vector视为分类任务,将其分到V V V个预定义的viewpoints中。对于每个point,Approach Network输出两个值表示抓取成功度。因此Proposal Generation Network的输出为M × ( 2 + V ) M \times (2 + V)M ×(2 +V ),2 2 2是抓取的成功度,V V V是每个viewpoint的成功度。

Loss Function

对于每一个预测的抓取位姿,没有落在物体上的抓取成功度为0 0 0。对于此外的点,如果在5mm范围内有一个正样本,那么其抓取成功度为1 1 1。没有找到对应ground truth的点被忽略。

对于每一个可行的点采样V V V个virtual approaching vectors。设在第i i i个virtual view下第j j j个可抓取点为v i , j v_{i, j}v i ,j ​。检查其对应的ground truth v ^ i , j \hat{v}{i, j}v ^i ,j ​,只考虑5度之内的reference vector。损失函数如下:
L A ( { c i } , { s i j } ) = 1 N c l s ∑ i L c l s ( c i , c i ∗ ) + λ 1 1 N r e g ∑ i ∑ j c i ∗ 1 ( ∣ v i j , v i j ∗ ∣ < 5 ∘ ) L r e g ( s i j s i j ∗ ) L^A({c_i}, {s
{ij}}) = \frac{1}{N_{cls}}\sum_i L_{cls}(c_i, c_i^) + \lambda_1\frac{1}{N_{reg}}\sum_i \sum_j c_i^ \mathbf 1(|v_{ij}, v^*_{ij}|

Operation Network

获取approaching vector后,模型进一步1)预测平面内的转动、2)approaching distance、3)夹爪宽度和4)抓取置信度。

Cylinder Region Transformation

模型对每一个candidate grasp建立一个统一的表达。因为approaching distance不是很敏感,所以我们将其分bin。对于给定的距离d k d_k d k ​,将approaching vector附近的圆柱体中包含的点云采样出来。为了便于学习,通过转移矩阵O i j \mathbf O_{ij}O i j ​将所有点转换到原点为抓取中心、z z z轴为v i j \mathbf v_{ij}v i j ​的坐标系中。
O i j = [ o i j 1 , [ 0 , − v i j ( 3 ) ] T , V i j ] where o i j 1 = [ 0 , − V i j ( 3 ) , v i j ( 2 ) ] T × v i j \mathbf O_{ij} = [\mathbf{o_{ij}^1}, [0, -\mathbf{v_ij}^{(3)}]^\mathbf{T}, \mathbf{V_{ij}}] \ \text{where}\quad \mathbf{o_{ij}^1} = [0, -\mathbf{V_{ij}}^{(3)}, \mathbf{v_{ij}}^{(2)}]^\mathbf{T} \times \mathbf{v_{ij}}O i j ​=[o i j 1 ​,[0 ,−v i ​j (3 )]T ,V i j ​]where o i j 1 ​=[0 ,−V i j ​(3 ),v i j ​(2 )]T ×v i j ​
v i j ( k ) \mathbf{v_{ij}}^{(k)}v i j ​(k )为v i j \mathbf{v_{ij}}v i j ​的第k k k个元素。

Loss function

L R ( R i j , S i j , W i j ) = ∑ d = 1 K ( 1 N c l s ∑ i j L c l s d ( R i j , R i j ∗ ) + λ 2 1 N r e g ∑ i j L r e g d ( S i j , S i j ∗ ) + λ 3 1 N r e g ∑ i j L r e g d ( W i j , W i j ∗ ) ) , L^{R}\left(R_{i j}, S_{i j}, W_{i j}\right)=\sum_{d=1}^{K}\left(\frac{1}{N_{c l s}} \sum_{i j} L_{c l s}^{d}\left(R_{i j}, R_{i j}^{}\right)\right. +\lambda_{2} \frac{1}{N_{r e g}} \sum_{i j} L_{r e g}^{d}\left(S_{i j}, S_{i j}^{}\right) +\left.\lambda_{3} \frac{1}{N_{r e g}} \sum_{i j} L_{r e g}^{d}\left(W_{i j}, W_{i j}^{*}\right)\right),L R (R i j ​,S i j ​,W i j ​)=d =1 ∑K ​(N c l s ​1 ​i j ∑​L c l s d ​(R i j ​,R i j ∗​)+λ2 ​N r e g ​1 ​i j ∑​L r e g d ​(S i j ​,S i j ∗​)+λ3 ​N r e g ​1 ​i j ∑​L r e g d ​(W i j ​,W i j ∗​)),

Tolerance Network

在之前的工作之后,端到端的模型已经可以准确预测grasp了。更进一步,作者提出了Grasp Affinity Field来提升预测的鲁棒性。

对于每一个ground truth抓取位姿,在附近的球形空间搜索s > 0.5 s > 0.5 s >0 .5的最远点,将其设为GAF的目标,loss如下:
L F ( A i j ) = 1 N r e g ∑ d = 1 K ∑ i j L r e g d ( T i j , T i j ∗ ) L^{F}\left(A_{i j}\right)=\frac{1}{N_{r e g}} \sum_{d=1}^{K} \sum_{i j} L_{r e g}^{d}\left(T_{i j}, T_{i j}^{*}\right)L F (A i j ​)=N r e g ​1 ​d =1 ∑K ​i j ∑​L r e g d ​(T i j ​,T i j ∗​)

总loss

加权求和
L = L A ( { c i } , { s i j } ) + α L R ( R i j , S i j , W i j ) + β L F ( T i j ) L=L^{A}\left(\left{c_{i}\right},\left{s_{i j}\right}\right)+\alpha L^{R}\left(R_{i j}, S_{i j}, W_{i j}\right)+\beta L^{F}\left(T_{i j}\right)L =L A ({c i ​},{s i j ​})+αL R (R i j ​,S i j ​,W i j ​)+βL F (T i j ​)

作者把ArUco标志贴在物体上来确定物体在相机坐标系内的位置,做了真实的抓取实验。

模型超参数设置:

For our method, rotation angle is divided into 12 bins and approaching distance is divided into 4 bins with the value of 0.01, 0.02, 0.03, 0.04 meter. We set M = 1024 and V = 300. PointNet++ has four set abstraction layers with the radius of 0.04, 0.1, 0.2, 0.3 in meters and grouping size of 64, 32, 16 and 16, by which the point set is down-sampled to the size of 2048, 1024, 512 and 256 respectively. Then the points are up-sampled by two feature propagation layers to the size 1024 with 256-dim features. ApproachNet, OperationNet and ToleranceNet is composed of MLPs with the size of (256, 302, 302), (128, 128, 36) and (128, 64, 12) respectively. For the loss function, we set λ1, λ2, λ3, α, β = 0.5, 1.0, 0.2, 0.5, 0.1.

Our model is implemented with PyTorch and trained with Adam optimizer [18] on one Nvidia RTX 2080 GPU. During training, we randomly sample 20k points from each scene. The initial learning rate is 0.001 and the batch size is 4. The learning rate is decreased to 0.0001 after 60 epochs and then decreased to 0.00001 after 100 epochs.

我的fork

原始graspnet-baseline在内存使用策略上有一定问题。具体来说,其会将tolerance label以 np.array的形式全部加载到内存里,占用的内存空间会超过 40GB,一般的电脑都无法训练。针对此问题,本文作者对其标签加载策略进行了调整,在需要的时候才加载入内存,内存消耗大大降低,目前由 batch_sizeDataLoader的策略决定,简单说就是不会炸内存了。

地址:https://github.com/Dandelight/graspnet-baseline

使用优化后的代码在2080Ti GPU 上训练一周,结果如下:

GraspNet 通用物品抓取数据集
GraspNet 通用物品抓取数据集
GraspNet 通用物品抓取数据集

Original: https://blog.csdn.net/qq_38056431/article/details/123208602
Author: 凉风映夏
Title: GraspNet 通用物品抓取数据集

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/532970/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球