机器臂抓取学习笔记三:Robotic Grasp Detection With 6-D Pose EstimationBased on Graph Convolution and Refinement

 一、总览

        主要就是一种用6-D位姿估计来进行机器臂抓取的网络。

        提出一种利用卷积和图卷积的多尺度融合方法来利用RGB和深度图信息,此外,提出了一个基于transformer的姿态优化模块来调整RGB图像和点云特征。

        首先介绍了一些基于深度学习的方法,引出6-D pose estimation很重要。6-D位姿估计任务的主要目标是明确三维空间中的物体的旋转和平移分量。接下来介绍了几个传统的6-D位姿估计方法:检测RGB图片中的二维关键点,然后对应于三维关键点。但这种处理无纹理或者遮挡场景时,表现不好。

        接下来又提到了一些改进,主要两种:使用直接回归或者关键点匹配的方式来进行位姿估计。直接回归:poseCNN,这个是端到端的可微方法,但是与关键点匹配相比精确度较低。基于关键点匹配:PnP的RANSAC,但不可微。

        与基于直接回归的方法相比,基于关键点匹配的精确度更高一点,然后举例了几个基于关键点检测的网络。然而这个也有缺点:

(1)之前提到的的关键点匹配的方法是不可微的,这限制了学习能力,因为没有反向传播能力。

(2)直接估计关键点可能会引入误差,与实际不一样

(3)当处理多个物体和关键点时,特别费时。

(4)在使用基于RGB-D的方法时,大多是方法没有考虑点云中点之间的几何拓扑关系

        为了解决这些,所以提出GR6D,一种利用图卷积和细化模块的新型6D位姿估计网络。以RGB和点云图像作为输入,考虑了点之间的几何关系。为了从两种模式中提取和整合整合信息,引入了一种使用图卷据神经网络的的交叉融合技术,此外,采用了一个基于transformer的特征细化模块来增强提取的特征。

         与传统方法相比,GR6D预测场景中每个点相对于关键点的偏移量,而不是直接确定关键点的位置。 这种策略有助于减少位置估计中潜在的不准确性。引入了一种基于奇异值分解(SVD)的6-D位姿估计方法。 这种方法大大减少了处理时间,并确保了姿态估计过程中的可微分性。

总之,三个创新点:

(1)提出了GR6D,一种基于图卷积神经网络和卷积的融合方法来估计物体的6D位姿。融合RGB和点云数据。

(2)提出了基于transformer的特征细化模块,可以同时考虑RGB和点云的新型,通过调整注意力来细化融合特征。

(3)提出了一种基于关键点的可微6D估计方法。预测场景中每个点相对于关键点的偏移量,而不是直接确定关键点的位置。引入了一种基于奇异值分解(SVD)的6-D位姿估计方法。

二、相关工作

1.直接的方法(6D位姿估计的方法)

        主要介绍了几种关于6D位姿估计的方法,第一个是基于回归的方法,第二种是基于SSD的方法,第三种是用RGB的方法,第四种是RGB-D的方法,这些都是直接回归的,论文都比较久了 这里不再赘述。

2.间接的方法

        间接的方法实际上就是建立关键点2D到3D的对应关系,然后用PnP的一些变体来实现,关于这个本人也没看过,也不想去了解了,反正他介绍了一大堆。反正都是用RGB作为输入的。然而,由于关键点位于物体表面之外,所以估计的位置可能不准确,从而导致姿态估计的误差。然后又有一些人处理了在三维模型表面定义关键点。巴拉巴拉又介绍了一大堆。这些方法的问题是不可微和计算成本大。然后提到了新颖的方法PointNet,也是利用2D-3D关键点对应物体的6D位姿。

3.基于6D位姿估计的机器臂抓取

        实际上还是介绍一些前人的经验,比如什么PSPNet和PointNet结合等等,还有什么FastNet,这篇文章旨在开发一个准确和快速的目标姿态估计网络,可以部署到现实世界的机器人抓取任务中。

        这篇文章的相关工作,本人认为并没有说到什么有用的干货,都是在阐述前人的一些方法,我在这里也不过多赘述(因为我也懒得去看那些论文了,太多了,而且时间年限比较久远了)

三 、方法

        给定一个RGB-D图片,网络的目标是得到一个变换矩阵,该变换矩阵将物体从其坐标系转化为相机坐标系,有两个分量 1)旋转矩阵 R \in SO(3),平移向量t \in \mathbb{R}^3,实际上就是SE(3)空间,最后,可以预测出物体的6D位姿。

        (关于SO(3)和SE(3)等有时间我会写一篇博客,只从机器臂抓取的角度去阐述我对于这两个的观点。)

1.总览

        提出了GR6D,其结构图如下所示:

        接下来,进行具体的解释:

        首先,使用Mask-RCNN对RGB图像进行目标检测和分割。如下图所示:

        接下来,用得到的Mask,对RGB-D图像进行裁剪得到相应的裁剪图Cropped RGB和Cropped Depth,如下图所示:

        为了从RGB-D图像中提取特征,我们首先使用一个CNN(PSPNet)对image I \in \mathbb{R}^{H \times W \times 3}中得到RGB特征F_{rgb},如下图所示:

        接下来,对于裁剪得到的Cropped Depth,经过转换,得到点云(Point cloud)数据,具体如下图所示:

        最后,对于从深度图经过转化得到的点云数据P_0 \in \mathbb{R}^{N_0 \times 3},用一个GCN(DGCNN作为主干)结合点云之间的几何信息和拓扑线索,得到作为输入的Point Cloud 特征F_{p}。具体如下图所示:

        然后将从RGB和点云数据中提取的特征进行融合处理,如下图所示:

        并通过基于transformer的细化模块进行处理,如下图所示:

        最后,预测置信水平和从场景点到关键点的偏移量,如下图所示:

        值得一提的是,把本文与大多数基于关键点的方法不同,网络使用基于置信度和偏移量的可微分方法预测6-D位姿。

2.RGB-Point Cloud特征融合

        首先,我们获取RGB-D图片,然后用分割网络识别场景中感兴趣的对象(也就是上面提到的生成Mask,并裁剪得到Cropped RGb)然后,使用PSPNet得到特征embeddings F_{rgb} \in \mathbb{R}^{N_0 \times c},注意:这里已经修改成embedding了,维度不再是H*W*3了

        接下来,根据分割边界对原始的深度图像进行裁剪,(也就是上面提到的生成的Cropped Depth)。为了得到物体的集合特征,我们使用相机的内部矩阵M_i去转换得到的裁剪图像,得到只由选定的点(裁剪后的点)组成的点云P_0=[p_0,p_1,...p_{N_0}]\in \mathbb{R}^{N_0 \times3}N_0是点的总数,具体如下图所示:

        然后,RGB特征和点云数据合并用作GR6D的输入。

        实验目标是根据点云数据预测场景点和关键点之间的偏移量,因此必须考虑不同点云之间的拓扑关系(topological relationships),所以利用GCN对点云进行特征处理和提取,以P_0作为输入,用DGCNN图进行特征提取。DGCNN通过GCN提取点云的特征并且将点云数据以图形的形式展示出来。此外,DGCNN还考虑了点云信息的集合信和和拓朴关系,所以我们使用DGCNN进行特征提取,并且得到点云特征F_0 \in \mathbb{R}^{N_0 \times c},具体如下图所示:

        这里先提前总结一下,对于输入的F_{rgb},F_p,他们的维度都是\mathbb{R}^{N_0 \times c}

        深度图像受表面反射影响,造成信息确实,RGB可以捕获深度图中不可见对象,但是不能很好的实现6-D姿势预测,所以提出了一种从RGB和点云数据中提取特征的特征融合方法。通过利用外观和几何的组合特征,以有效地利用这两种类型的数据来提高目标姿态估计的精度。

        CNN每一层都有不同的感受场,所以不仅仅在最后一层融合,而以互补的方式有效的结合特征。这种方法既可以捕捉浅层的局部信息,也可以捕捉深层的全局信息,从而提高了姿态估计的性能。

        结合RGB分支的特征F_{rgb}^i和点云分支的特征F_{p}^i,将其沿着其通道维度将他们连接在一起,并使用MLP层来优化连接的特征,公式如下:

                                               F_{fuse}^i=MLP(F_{rgb}^i\bigoplus F_{p}^i)

        其中\bigoplus表示通道维度连接,i表示第i层,对应结构图中的:

        然后,将融合后的特征与原始的RGB和点云特征相融合,得到下一层的RGB特征和点云特征,具体公式如下:

                                        F_{rgb}^{i+1}=MLP(F_{rgb}^i \bigoplus F_{fuse}^i)

                                ​​​​​​​        F_{p}^{i+1}=DG(F_{p}^i \bigoplus F_{fuse}^i)

        其中DG表示DGCNN。如下图所示:

        以此类推,可以得到各层的融合特征以及最后一层的融合特征。

3.细化模块 (refinement Module)

        前面提到了可以结合从RGB图像和点云提取的特征。这些融合的特征跨越多个层,捕捉在不同接收视野观察到的多尺度目标特征,融合的太多了,所以要保留有用的,丢掉没用的。所以通过transformer来构造细化模块,调整关注度和捕获全局信息。

为了提高先前融合数据的准确度,提出了一种利用transformer的refinement 模块。如图下图所示:

        这个模块仅在网络的最后一层内操作,其中来自该层的融合特征既包括局部特征也包括全局特征(最后的F_{fuse}既包含全局特征也包含局部特征)。使用transformer来建立局部特征和全局特征之间的连接。

        此外,将点云特征F_p融入到细化模块中,以防止关键几何特征信息的丢失,并促进局部和全局特征之间的特征融合。

细化模块对应于整体的下图所示的部分:

        细化模块采用融合的输入特征F_{fuse}和原始的点云特征F_p,并通过两个自我注意模块和一个交叉模块将它们组合在一起。

        首先,应用一系列的MLP层来为我们的self-attention的q,k,v,其公式如下:        ​​​​​​​​​​​​​​        ​​​​​​​        ​​​​​​​                ​​​​​​​        ​​​​​​​        ​​​​​​​                q_f,k_f,v_f=MLP(F_{fuse})

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​                q_p,k_p,v_p=MLP(F_{p})

        然后,应用自我注意力模块去细化和调整特征的的注意力,其公式如下:

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        F_{fuse}=SoftMax( \frac{q_f \times k_f^T}{\sqrt{d_f}})v_f+F_{fuse}

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        F_{p}=SoftMax( \frac{q_p \times k_p^T}{\sqrt{d_p}})v_p

        使用自我注意模块的目的是增强和细化我们之前获得的融合特征,而不降低它们的质量,因此用短连接连接这些模块。

        通过MLP层在融合数据上实现交叉关注。首先为F_{fuse}生成并处理query参数,然后通过两个额外的MLP层从原始点云数据中提取key参数和value参数。

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        q=MLP(F_{fuse})

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        k,v=MLP(F_p)

        最后,通过交叉注意力对Fp进行调整和细化,其公式为:

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​ F=SoftMax( \frac{q \times k^T}{\sqrt{d}})v

        F是细化模块的最后输出,并且他将与先前的融合的特征进行连接,最终估计6-D位姿,如下图:

4.可微6-D位姿估计

        使用细化的特征,可以预测从场景点到每个关键点的偏移量(offset)并确定他们的置信度,然后使用一种可微的方法来估计6-D位姿。

(1)关键点的选择

        关键点的选择,通过最远采样技术(the farthest sampling (FPS)technique)从3-D模型中采样关键点K_i,i \in \{1,2...,M\}

(2)偏移量offset预测

        2D-3D关键点匹配来估计6-D位姿,是不可微的。所以,不直接预测关键点的位置,而是预测他们各自与场景的偏移量,对于之前提到的M个关键点k,我们可以定义这个点到场景固定点S_n之间的偏移量offset为:o_{n,i}=s_n-k,其中o_{n,i}表示固定场景点S_n到关键点k_i之间的偏移量。

        由于现实世界的限制,不能观测到所有的关键点,于是,引入预测置信度C_{n,i},这个指标用来表示场景点s_n和关键点k之间的偏移置信度。

        首先,对置信度进行归一化:c_{n,i}=\frac{C_{n,i}}{\sum^N_{n=1}C_{n,i}}c_{n,i}表示正则化之后的置信度。

        然后,得到细化之后的关键点:\hat{k_i}=\sum^N_{n=1}c_{n,i}(s_n+\hat{o}_{n,i}),其中\hat{o_{n,i}}表示固定场景点S_n到关键点k_i之间的偏移量,\hat{k}_i是预测的关键点。

(3)可微分姿态估计

        将姿态估计作为一个优化问题来处理,给定预测的3-D预测关键点\hat{k}_i,并且,在3-D模型中存在关键点K_i,目标是最小化这两个点之间的距离。用数学公式表示这个距离为:

        ​​​​​​​        ​​​​​​​        ​​​​​​​        \hat{R},\hat{t}=arg \ \underset{R,t}{min} \sum^M_{i=1}||(R\cdot K_i+t)-\hat{k}_i||^2

        R,t是6-D位姿的旋转分量和平移分量,采用SVD方法作为解决方式(是啥我也没仔细看过),反正就是可以解决这个优化问题了。然后就可以把这个过程进行端到端的训练了。

        单视角可能导致有些不准确,对可见的关键点置信度更高,所以提出了一种改进方法:给定一个场景关键点k_i,可以通过累计从场景点到该关键点的所有对应的置信度来计算他的完全置信度:C_i=\sum^N_{n=1}C_{n,i},为C_i设置了一定的阈值\tau,当超过这个阈值的时候,选择用相关的细化关键点\hat{k}_i来表示候选点,这样的话,就建立了一系列候选点\hat{k}_j,j\in \{1,2....J\},j\leqslant M,然后,根据前面的SVD优化算法,选择满足最小要求的三个关键点,得到C^3_J个输出,其中,C^*_*表示组合算子。

        前面的过程产生了一系列6-D姿态 候选点,每一个由\hat{R}_a,\hat{t}_a,a \in \{1,...C^3_J\},(因为SVD需要三个非线性的点来进行计算。)此外,必须对这些候选点进行微调以产生最佳姿势。对称物体往往具有多个正确的6-D位姿,为了解决这个问题,通过场景点Sn和他的最近的变换邻点p_n之间的最短距离估计6-D位姿适应度:d_n=\sum^N_{n=1}||\hat{p}_n-s_n||,这里的\hat{p}_n=\hat{R}\cdot p_n+\hat{t}d_ns_np_n之间的距离。

        此外,根据距离生成每个6-D位姿的权重,用softmax计算:w_a=\frac{e^{-\frac{d_a}{\lambda}-m}}{e^{-\frac{d_a}{\lambda}-m}+\sum^{C^3_J}_{j \neq a}e^{-\frac{d_j}{\lambda}}},其中\lambda,m是非负实数。通过这个权重,可以细化物体的6-D位姿。

        对于平移部分,可以通过:\hat{t}=\sum^{C^3_J}_{a=1}w_a\cdot \hat{t}_a来计算。

        由于旋转空间是一个非线性域,直接平均计算的旋转矩阵可能违反SO(3)的底层约束。 为了避免这个问题,将旋转矩阵\hat{R}_a转换为四元数格式(quaternion format)\hat{q}_a。 从这里,可以通过下面的公式推导出精细的旋转:\tilde{q}=\sum^{C^3_J}_{a=1}w_a \cdot \hat{q}_a\tilde{q}是四元数格式的细化旋转。

        最后,正则化\tilde{q}\hat{q}=\frac{\tilde{q}}{||\tilde{q}||}

        经过上面的步骤就可以得到6-D估计姿态\{\hat{q},\hat{t}\},并且能通过\hat{q}得到\hat{R}

5.损失函数

(1)偏移量损失(Offset Loss)

        Offset Loss包含了x, y, z三个方向的Loss,使用平滑的L1loss作为Loss函数:

        ​        ​​​​​​        L_{offset}=\sum^M_{i=1}\sum^N_{n=1}L_1(\Delta o^{(x)}_{n,i})+L_1(\Delta o^{(y)}_{n,i})+L_1(\Delta o^{(z)}_{n,i})

        其中\Delta o^{(*)}_{n,i}= \hat{o}^{(*)}_{n,i}- o^{(*)}_{n,i},\hat{o}^{(*)}_{n,i}表示预测的偏移量,o^{(*)}_{n,i}是实际的偏移量。

(2)姿态损失(Pose Loss)

        使用的是可微的方法,所以可以反向传播,所以姿态损失定义为:

                ​​​​​​​        ​​​​​​​        ​​​​​​​        L_{pose}=||t-\hat{t}||_2+\lambda ||R\cdot \hat{R}^T-I||_F

(3)总损失

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​                ​​​​​​​        L=L_{offset}+\alpha L_{pose}

四、实验

1.数据集

        用了三个数据集:

(1)LINEMOD数据集

        包含13个视频中描绘的13个低纹理物体,数据集中的每个对象都被标记为6-D姿态和语义掩码。每个类别大概180张真实RGB-D图像。

(2)Occlusion LINEMOD 遮挡数据集

        扩大了原本的LINEMOD数据集范围,每个场景包含多个带注释的对象,始终存在强烈的遮挡。

(3)YCB-video数据集

        由21个大小和形状不同的对象醉成,RGB-D相机拍摄了92个录制视频,每个RGB-D图像都用6-D姿势和实例语义掩码进行了注释。 此外,YCB-Video数据集包括几个充满障碍的具有挑战性的场景,如图像噪声、遮挡和可变照明条件。

2.额外数据集生成

        前面说的三个数据集样本量较小,所以使用3d对象模块生成合成数据,方法是随机选择背景图像和对象,然后将后者渲染到前者上。 如下图所示:

3.评价指标

        用的就是大多数6-D位姿估计用的:

(1)ADD(average distance)平均距离

        计算转换后的3-D模型点和真实值点之间的距离,如果小于设定的阈值,则认为是正确的:

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ADD=\frac{1}{m}\sum_{x \in M}||(Rx+t)-(\hat{R}x+\hat{t})||

        M是三维模型种点的集合,m为点的个数。

(2)ADD-S(ADD symmetric)对称平均距离

        因为对称物体包含多个合适的姿态,所以还用了ADD-S:

        ​​​​​​​        ​​​​​​​        ADD-S=\frac{1}{m}\sum_{x_1 \in M} \underset{x_2\in M}{min}||(Rx_1+t)-(\hat{R}x_2+\hat{t})||

        x_1,x_2是三维模型的点,R_t是真实值,\hat{R}_t是预测值。

4.实验细节

        Ubuntu 18.04 

        24G内存 单 NVIDIA TITAN RTX GPU

        Pytorch 1.5 +CUDA 10.2

        优化器是Adam 学习率设置为1 \times10^{-4}

        Batch size 训练:8 评估:1

5.在LINEMOD和LINEMOD-Occ数据集上的实验

LINEMOD数据集有许多场景,每个场景有很多对象,目标是估计位于每个场景中心的物体的位姿,如下图所示:

        注意:仅用6-D位姿标记了目标物体,其他物体未被标记,由于目标物体是最小遮挡的,所以姿态相对简单。

        由于现实世界并不是这么简单,所以标记了在场景中所有物体的6-D位姿。上图是一些检测的结果,为了使结果显示的更清晰,所以仅仅标出了单个物体。实际上原始的图片包含许多被遮挡的或者部分遮挡的物体,用来模拟未知场景下物体姿态估计的过程。

        使用3d对象模型,随机抽取500个点,并根据预测的6-D姿态渲染它们。 如果这些渲染点与物体表面很好地对齐,认为网络生成的6-D姿态是准确的。具体如上图所示。

        LINEMOD数据集:下图是在LINEMOD数据集上的结果,因为之前的网络已经把准确率提高到99%以上了,所以并没有什么太大的提升。

        下图是在LINEMOD-Occ数据集上的结果:

        之前的网络准确率并不是特别高,并且本文提出的方法,在之前最好的网络的基础上,提升了3.5个百分点。

        注:可视化的过程只是一种定性的评价,精确的评价还要依靠两个表格。

6.在YCB-video数据集上的实验

        将GR6D和之前的DenseFusion以及PVN3D在YCB-video数据集上进行比对并进行可视化:结果如下:

        观察后三个发现,GR6D的渲染之后的效果明显要好于另外两个。接下来是具体实验结果:

        可以看到,和之前最好的相比,提高了1.2个百分点。

7.实验分析

        Densefusion没考虑点之间的几何拓扑关系,PVN3D过程不可微。所以本文提出的GR6D更nb,然后就是又重复了一下实验部分的东西,阐明自己nb在哪里。

8.消融实验

        用PointNet代替GCN,用DenseFusion代替我们的融合方法,以及取消细化模块,结果如下:

        相比较而言,细化模块 很有用。因为transformer在捕获全局信息和调整网络注意力方面是非常有效的。 全局信息的结合使得网络能够在更高的层次上更好地处理目标姿态估计。注意机制使网络能够选择性地关注关键特征,而忽略不太相关的元素,如背景细节。

9.真实世界的实验

(1)真实世界的位姿估计

        选择了YCB-video中四个物体来进行现实世界的实验:1)cracker 盒子 2)番茄汤罐头 3)罐装肉罐头 4)芥末瓶 。使用3-D边界框来进行标识,如果正确包含了物体,为预测成功,如下图所示:

        可以观测到 确实GR6D的效果会更好一些。尤其是最后一列,即使在包含不相关物体的杂乱场景,还是GR6D的效果会好很多。

(2)机器抓取实验

        本文还进行了真实的抓取实验,目标是将机器人的夹持器中心定位在接近物体中心的位置,注:在整个抓取任务中,抓取器相对工作台保持垂直方向。并且所有物体均为随即放置,如下图所示:

        一共进行了50次抓取实验,结果如下所示:

this is all.

祝你早日发一区。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值