论文笔记(十九)RGB-D Object Tracking: A Particle Filter Approach on GPU

2023-05-16

RGB-D Object Tracking: A Particle Filter Approach on GPU

  • 文章概括
  • 摘要
  • 1. 介绍
  • 2. 贡献
  • 3. 粒子滤波器
  • 4. 可能性评估
  • 5. 实施细节
  • 6. 实验
    • A. 物体模型
    • B. 合成序列
    • C. 真实序列
  • 7. 结论
  • 8. 鸣谢

文章概括

作者:Changhyun Choi and Henrik I. Christensen
来源:Center for Robotics & Intelligent Machines,College of Computing,Georgia Institute of Technology,Atlanta, GA 30332, USA,{cchoi,hic}@cc.gatech.edu
原文:http://people.ece.umn.edu/~cchoi/pub/Choi13iros_gputracking.pdf
代码、数据和视频:
系列文章目录:
上一篇:
论文笔记(十八):Object Detection and Spatial Location Method for … Based on 3D Virtual Geographical Scen
下一篇:


摘要

本文介绍了一种使用RGB-D相机进行6-DOF物体姿势跟踪的粒子过滤方法。我们的粒子过滤器在现代GPU中被大规模并行化,因此即使有几千个粒子,它也能表现出实时性能。给定一个先验的三维网格模型,建议的方法将物体模型渲染到GPU的纹理缓冲区,渲染的结果直接用于我们的并行可能性评估。测光(颜色)和几何(三维点和表面法线)特征都被用来确定每个粒子在给定RGB-D场景中的可能性。我们的方法与PCL中的跟踪器在合成和真实的RGB-D序列中分别进行了定量和定性的比较。


1. 介绍

随着机器人逐渐从结构化环境部署到非结构化环境,与环境的可靠互动是利用机器人系统成功的一个关键必要条件。特别是,强大而有效的物体姿态识别是可靠的机器人任务的重要要求。在机器人物体感知的早期阶段,人们试图通过采用已知的三维物体模型来解决这个问题[1]。这个问题通常被表述为估计一个姿势,这个姿势将最适合给定的物体三维模型和二维图像特征:边缘[2], [3]或从边缘拟合的线段[4]。然后通过有效的局部优化来估计最佳姿势或运动参数。

尽管基于边缘的跟踪在90年代早期就被证明可用于视频速率跟踪[2],但它对复杂的背景和遮挡并不健壮。由于边缘本身没有足够的辨别力来提供可靠的边缘数据关联,因此有许多努力通过与关键点特征的融合[5]、[6]、[7]或在边缘数据关联上保持多种姿势假设来增强早期的工作[5]、[8]。然而,这些方法仍然是有限的,因为它们只考虑了少量的姿态假说。

出现了一种更先进的考虑多姿态假设的配方,它是基于粒子滤波的。粒子滤波[9], [10]是一种基于后验概率分布的顺序模拟的贝叶斯滤波方法。在过去的20年里,这种方法变得很流行,因为它可以处理非线性和非高斯动力学,所以它经常被认为是基于状态空间的高斯概率分布设计的过滤方法的一个很好的替代品。Isard和Blake[11]向计算机视觉界介绍了粒子滤波器作为一种稳健的二维轮廓跟踪方法。此后,大量的变体被应用于身体姿势估计[12]、三维物体跟踪[13]、[14]、[15]、SLAM[16]等问题上。

然而,在机器人感知中采用粒子滤波方法主要是由于其高计算成本而受到限制。为了解决这个问题,一些研究人员[13], [14], [17], [18]已经注意到粒子过滤算法本身是可并行的。粒子过滤器的主要瓶颈在于其似然性评估。当采用N个粒子来近似真实的后验概率分布时,在每个时间步长上应该进行N个独立的、相同的似然评估。由于一个粒子的似然评估并不取决于其他粒子,所以似然计算可以并行化。

现代图形处理单元(GPU)提供了超出渲染目的的大量并行能力,因此在GPU上设计一个粒子滤波器以实现快速和稳健的物体姿态跟踪是一个自然的想法。Montemayor等人[17]展示了在GPU上初步设计了一个用于简单的二维物体跟踪的粒子过滤器。Klein和Murray[13]提出了一个粒子过滤器,它可以实时跟踪一个任意形状的物体。为了保持高帧率,采用了OpenGL闭塞查询扩展,从给定的边缘图像中有效地计算出粒子的可能性。虽然这项工作只是简单地依靠OpenGL扩展,但有几种方法[14]、[18]采用了更先进的技术来利用GPU,即NVIDIA CUDATM技术,因此它们将物体模型渲染到GPU上,由CUDA内核直接访问渲染结果,然后根据渲染结果和输入场景之间的差异来计算粒子的重要性权值。

以前的大部分工作主要使用单眼相机,所以到目前为止,所采用的视觉特征仅限于边缘[13],[14]或强度差异[17],[18]。然而,由于最近引入了RGB-D传感器,不仅颜色,而且深度信息也可以随时实时获得。这种深度信息使我们能够使用各种几何特征,如三维点坐标、表面法线、来自深度不连续的边缘、高曲率区域等。最近,这种额外的深度数据已被积极用于许多机器人和视觉应用中,如人类姿势估计[19],bin-picking问题[20],[21],[22],SLAM[23],[24],和物体跟踪[25]。PCL[26]中基于粒子过滤器的跟踪可能是与我们提出的解决方案最接近的系统。给定一个物体点云作为参考模型,它可以在一连串的RGB-D图像上跟踪参考模型的6-DOF姿态。其耗时的程序在CPU中被并行化了,但它在有足够数量的粒子时并没有达到实时性能(见第六节)。对该方法的简要描述可以在[27]中找到。


2. 贡献

我们提出了一个在GPU上并行化的鲁棒性粒子过滤器,它可以在一连串的RGB-D图像上跟踪一个已知的3D物体模型。与PCL跟踪[27]不同的是,我们渲染了三维物体模型,以用于似然性评估,因此我们的方法可以跟踪物体,尽管有明显的姿势变化。我们的主要贡献如下:

  • 我们采用扩展特征来评估每个粒子状态的可能性。虽然以前的大部分工作主要依靠二维边缘[13], [14]或强度差异[17], [18]来计算粒子的重要性权重,但我们同时使用RGB-D图像和OpenGL渲染中的光度(颜色)和几何特征(三维点和表面法线)。

  • 我们利用OpenGL中的帧缓冲对象扩展(FBO)和CUDA OpenGL互操作性来减少渲染结果到CUDA内存空间的映射时间。正如文献[14]所提到的,OpenGL帧缓冲区和CUDA内存空间之间的映射所花费的时间与将渲染结果复制到CPU内存空间的时间一样多。为了避免这个问题,我们的渲染是在FBO中进行的,所以映射的时间几乎可以忽略不计。

  • 我们设计了一种层次化的方法来考虑物体的多种渲染。虽然PCL跟踪[26]只维护一个参考物体云,但我们将物体渲染到具有不同姿势的多个视口。如果我们把所有粒子的姿势都绘制到GPU的渲染缓冲区,那将是最理想的,但由于缓冲区的内存限制,这是不可能的。相反,我们的方法是将物体渲染到V个视口,每个粒子从V个视口中搜索最接近的渲染,这样,每个似然评估都是通过将最接近的渲染结果与当前粒子状态进行转换来进行的(见图2)。


图二

用于似然评估的多次渲染。感兴趣的对象用前五个粒子的状态进行渲染,并根据渲染结果评估这五个粒子的可能性。对于其余的粒子,每个粒子找到最接近的渲染,并使用渲染结果来评估其似然性。左边和右边的图像代表了GPU中的彩色和正常渲染。(最好以彩色观看)

据我们所知,我们提出的解决方案是第一个利用RGB-D传感器的丰富视觉特征进行6-DOF物体姿势跟踪的实时粒子滤波器。图1显示了我们跟踪的一个例子,其中一个目标物体在背景杂波中被跟踪。渲染的三维网格模型代表了粒子的平均值,用于可视化目的。

本文的组织结构如下。第三节简要介绍了用于6-DOF物体姿势跟踪的粒子过滤器,第四节介绍了采用点、颜色和法线的似然函数。在第五节进一步解释了OpenGL和CUDA的实现之后,第六节将我们的方法与合成和真实的RGB-D图像序列中的基线进行了比较。


3. 粒子滤波器

在6-DOF姿态跟踪问题中,采用粒子滤波器对感兴趣的物体随时间变化的轨迹进行采样。在粒子滤波框架中,物体姿势 p ( X t ∣ Z 1 : t ) p(\mathrm{X}_t|Z_{1:t}) p(XtZ1:t)在当前时间t的后验概率密度函数被表示为一组加权粒子,即

S t = { ( X t ( 1 ) , π t ( 1 ) ) , . . . , ( X t ( N ) , π t ( N ) ) } (1) St = \{(\mathrm{X}^{(1)}_t, π_t^{(1)}), . . . ,(\mathrm{X}^{(N)}_t, π_t^{(N)})\} \tag{1} St={(Xt(1),πt(1)),...,(Xt(N),πt(N))}(1)

其中,粒子 X t ( n ) ∈ S E ( 3 ) \mathrm{X}^{(n)}_t∈SE(3) Xt(n)SE(3)代表样本,归一化的重要性权重 π t ( n ) π_t^{(n)} πt(n)与似然函数 p ( Z t ∣ X t ( n ) ) p(\mathrm{Z}_t|\mathrm{X}^{(n)}_t) p(ZtXt(n))成正比, N N N是粒子的总数目。在每个时间 t t t,粒子过滤器执行顺序重要性抽样与重抽样[10]。当前状态 X t \mathcal{X}_t Xt可以通过加权粒子平均值来估计:

X t = ε ∣ S t ∣ = ∑ n = 1 N π t ( n ) X t ( n ) (2) \mathcal{X}_t = \varepsilon|S_t|=\sum^{N}_{n=1}π_t^{(n)}\mathrm{X}_t^{(n)}\tag{2} Xt=εSt=n=1Nπt(n)Xt(n)(2)

正如我们在[15]中已经表明的,当我们估计均值时,我们需要得到一个有效的旋转 R t ∈ S O ( 3 ) \mathrm{R}_t∈SO(3) RtSO(3),因为算术均值 R ˉ t = 1 N ∑ n = 1 N R t ( n ) \bar{\mathrm{R}}_t=\frac{1}{N}\sum^N_{n=1}\mathrm{R}^{(n)}_t Rˉt=N1n=1NRtn通常不在 S O ( 3 ) SO(3) SO(3)组。根据[28],所需的平均旋转可以通过算术平均数的正交投影来计算,为

R t = { V U T w h e n   d e t ( R ˉ t T ) > 0 V H U T o t h e r w i s e , (3) \mathrm{R}_t=\left\{ \begin{array}{rcl} \mathrm{V}\mathrm{U}^T & & \mathrm{when}\ \mathrm{det}(\bar{\mathrm{R}}^T_t)>0\\ \mathrm{V}\mathrm{H}\mathrm{U}^T & & \mathrm{otherwise}, \end{array} \right. \tag{3} Rt={VUTVHUTwhen det(RˉtT)>0otherwise,(3)

其中 U \mathrm{U} U V \mathrm{V} V是通过 R ˉ t T \mathrm{\bar{{R}}^T_t} RˉtT的奇异值分解(即 R ˉ t T = U Σ V T \mathrm{\bar{R}^T_t=UΣV^T} RˉtT=UΣVT)和 H = d i a g [ 1 , 1 , − 1 ] \mathrm{H=diag[1, 1, -1]} H=diag[1,1,1]估计的。


4. 可能性评估

设计一个高效和稳健的似然函数是至关重要的,因为它直接决定了粒子过滤在时间和精度方面的整体性能。当考虑到RGB-D相机时,我们可以采用各种测量方法。三维点坐标、点的颜色、表面法线、曲率、来自深度不连续的边缘或表面纹理等。在这项工作中,我们选择点坐标 x ∈ R 3 \mathrm{x∈\mathbb{R}^3} xR3和它们相关的颜色 c ∈ R 3 \mathrm{c∈\mathbb{R}^3} cR3和法线 n ∈ R 3 \mathrm{n∈\mathbb{R}^3} nR3。因此,一个测量点 p \mathrm{p} p被定义为

p = ( x T , n T , c T ) T ∈ R 9 (4) \mathrm{p=(x^T,n^T,c^T)^T∈\mathbb{R}^9}\tag{4} p=(xT,nT,cT)TR9(4)

为了清楚地记述,让我们为 p \mathrm{p} p定义访问操作符,以便于

x ( p ) = ( x T 1 ) T ∈ R 4 (5) \mathrm{x(p) = (x^T1)^T ∈ \mathbb{R}^4}\tag{5} x(p)=(xT1)TR4(5)
n ( p ) = ( n T 1 ) T ∈ R 4 (6) \mathrm{n(p) = (n^T1)^T ∈ \mathbb{R}^4}\tag{6} n(p)=(nT1)TR4(6)
c ( p ) = c ∈ R 3 (7) \mathrm{c(p) = c ∈ \mathbb{R}^3}\tag{7} c(p)=cR3(7)

我们选择这三种测量方法的原因是,这种组合允许我们在给定的RGB-D场景和计算机图形管道的渲染结果之间进行直接比较。因此,我们可以有效地计算出大量粒子的可能性。

鉴于当前的姿势假设 X t ( n ) \mathrm{X^{(n)}_t} Xt(n)和渲染的物体模型 M t \mathrm{M_t} Mt,场景 Z t \mathrm{Z_t} Zt的可能性被定义为

p ( Z t ∣ X t ( n ) , M t ) = ∏ ( i , j ) ∈ A p ( z t ( i ) ∣ X t ( n ) , m t ( j ) ) (8) \mathrm{p(Z_t|X^{(n)}_t,M_t) = \prod_{(\mathit{i,j})∈\mathcal{A}}p(z_t^{(i)}|X^{(n)}_t, m^{(j)}_t)}\tag{8} p(ZtXt(n),Mt)=(i,j)Ap(zt(i)Xt(n),mt(j))(8)

其中 A = { ( i , j ) ∣ p r o j ( x ( z t ( i ) ) ) = p r o j ( X t ( n ) ⋅ x ( m t ( j ) ) ) } \mathrm{ \mathcal{A} = \{\mathit{(i,j)}| proj(x(z^{(i)}_t)) = proj(X^{(n)}_t · x(m^{(j)}_t))\} } A={(i,j)proj(x(zt(i)))=proj(Xt(n)x(mt(j)))}是场景 Z t Z_t Zt和物体模型 M t M_t Mt之间的点关联集合, z t ( i ) , m t ( j ) ∈ R 9 z^{(i)}_t, m^{(j)}_t∈\mathbb{R}^9 zt(i),mt(j)R9分别是场景和模型中的对应点。运算符 p r o j ( ⋅ ) \mathrm{proj(\cdot)} proj()通过用已知的相机固有参数 K ∈ R 3 × 3 \mathrm{K∈\mathbb{R}^{3×3}} KR3×3对点进行投影,计算给定的三维同质点坐标的二维图像坐标。利用 p r o j \mathrm{proj} proj算子,可以有效地确定点的关联 A \mathcal{A} A。然后,每个关联 ( i , j ) (i,j) (ij)的可能性被定义为

p ( z t ( i ) ∣ X t ( n ) , m t ( j ) ) = e x p − λ e ⋅ d e ( x ( z t ( i ) ) , X t ( n ) ⋅ x ( m t ( j ) ) ) ⋅ e x p − λ n ⋅ d n ( n ( z t ( i ) ) , X t ( n ) ⋅ n ( m t ( j ) ) ) ⋅ e x p − λ c ⋅ d c ( c ( z t ( i ) ) , c ( m t ( j ) ) ) (9) \begin{aligned} p(z_t^{(i)}|\mathrm{X}_t^{(n)},\mathrm{m}_t^{(j)}) = &exp^{−λ_e·d_e(x(z^{(i)}_t ), X^{(n)}_t ·x(m^{(j)}_t))}\\ \cdot &exp^{−λ_n·d_n(n(z^{(i)}_t ), X^{(n)}_t ·n(m^{(j)}_t))}\\ \cdot &exp^{−λ_c·d_c(c(z^{(i)}_t ), c(m^{(j)}_t))}\\ \end{aligned} \tag{9} p(zt(i)Xt(n),mt(j))=expλede(x(zt(i)),Xt(n)x(mt(j)))expλndn(n(zt(i)),Xt(n)n(mt(j)))expλcdc(c(zt(i)),c(mt(j)))(9)

其中 d e ( x 1 , x 2 ) d_e\mathrm{(x_1, x_2)} de(x1,x2), d n ( n 1 , n 2 ) d_n\mathrm{(n_1, n_2)} dn(n1,n2), 和 d c ( c 1 , c 2 ) d_c\mathrm{(c_1, c_2)} dc(c1,c2)是欧氏距离、法线距离和颜色距离,如下所示

d e ( x 1 , x 2 ) = { ∣ ∣ x 1 − x 2 ∣ ∣ i f   ∣ ∣ x 1 − x 2 ∣ ∣ ≤ τ 1 o t h e r w i s e , (10) d_e\mathrm{(x_1, x_2)}=\left\{ \begin{array}{rcl} &||\mathrm{x_1}-\mathrm{x_2}|| &\mathrm{if}\ ||\mathrm{x_1}-\mathrm{x_2}||≤ τ\\ &1 & \mathrm{otherwise}, \end{array} \right. \tag{10} de(x1,x2)={x1x21if x1x2τotherwise,(10)

d n ( n 1 , n 2 ) = c o s − 1 ( n 1 T n 2 − 1 ) π (11) d_n\mathrm{(n_1,n_2)}=\frac{\mathrm{cos^{-1}( n^T_1n_2-1 )}}{π} \tag{11} dn(n1,n2)=πcos1(n1Tn21)(11)

d c ( c 1 , c 2 ) = ∣ ∣ c 1 − c 2 ∣ ∣ (12) d_c\mathrm{(c_1, c_2) = ||c_1 − c_2||} \tag{12} dc(c1,c2)=c1c2(12)

并且 λ e , λ n , λ c λ_e, λ_n, λ_c λe,λn,λc是决定距离对似然的敏感性的参数。(10)中的 τ τ τ是两点间欧氏距离的阈值。注意(11)中的 n 1 , n 2 ∈ R 4 \mathrm{n_1, n_2}∈ \mathbb{R}^4 n1,n2R4是同质的点坐标,所以需要从内积中减去1。对于(12)中的颜色距离,只要 0 ≤ d c ( c 1 , c 2 ) ≤ 1 0≤d_c(c_1, c_2)≤1 0dc(c1,c2)1,任何种类的颜色空间都可以考虑,但我们采用HSV颜色空间,主要是因为它对光照变化的不变性。请注意,物体模型点 m t ( j ) m^{(j)}_t mt(j)的点和法线坐标是在物体坐标框架内的,所以应该考虑由当前姿势 X t ( n ) \mathrm{X}^{(n)}_t Xt(n)变换的点来计算距离。

5. 实施细节

正如我们在第二节中已经提到的,我们在渲染缓冲区中用前五个粒子的姿势将我们感兴趣的物体渲染到五个视口上。对于其余的粒子,每个粒子都会找到一个与姿势假设最接近的渲染结果,并将最近的渲染结果与当前的姿势进行转换。对于这个计算,我们需要访问渲染结果中所有可见点的颜色、顶点(即三维点)和法线信息。通过访问渲染缓冲区来获得颜色信息是比较直接的,但是从缓冲区访问三维点和三维法线数据就比较麻烦了。为了解决这个问题,我们采用OpenGL着色语言(GLSL)来直接访问图形管道中间的点和法线数据。对于点的信息,我们设计了一套简单的顶点和片段着色器,使可见点的三维坐标gl_Vertex被保存为彩色纹理点gl_FragColor。同样地,对于法线数据,我们使用了另一套顶点和片段着色器,这样物体的表面法线gl_Normal就被保存在彩色纹理点中。请注意,这些点和法线是在物体坐标帧中的,所以我们不需要在渲染结果上进行反变换,然后再相对于当前粒子的姿势进行变换。

多视口渲染的主要目的不是为了可视化,而是为了对每个粒子进行可能性评估。因此,对于我们的渲染目的来说,使用Frame Butter Object(FBO,GL_ARB_framebuffer_object)是一个不错的选择。FBO是OpenGL对屏幕外帧缓冲器的扩展。与窗口系统提供的OpenGL默认的帧缓冲区不同,FBO更加灵活和高效,因为所有绑定在FBO中的资源都在同一个上下文中共享。FBO允许用户将多个纹理图像附加到颜色附件中。为了我们的目的,我们将三个纹理图像附加到三个颜色附件中。GL_COLOR_ATTACHMENT0用于颜色数据,GL_COLOR_ATTACHMENT1用于点数据,GL_COLOR_ATTACHMENT2用于正常数据。在渲染阶段,我们感兴趣的对象被绘制到每个颜色附件上。虽然颜色纹理是用通常的OpenGL渲染方式绘制的,但点和法线纹理是通过上述着色器程序渲染的。对于每一次渲染,对象都是通过调用glViewport()渲染到V视口。

用着色器程序渲染物体后,我们在GPU上评估似然函数。为了在我们的可能性评估内核中利用附在FBO上的纹理图像,我们使用了CUDA的OpenGL互操作性,允许将OpenGL缓冲区映射/解映射到CUDA的内存空间。因此我们的CUDA内核可以非常有效地访问渲染的缓冲区。

6. 实验

在本节中,我们提出了一组PCL跟踪和我们提出的方法之间的比较实验。在第VI-B节中,我们使用一组具有地面真实物体轨迹的合成RGB-D序列对这两种方法的性能进行了定量评估,然后在第VI-C节中使用真实的RGB-D序列进行了定性评估。在评估中,两个跟踪器都是以合成序列中的已知地面实况和从足够接近的初始姿态开始运行我们的跟踪器后的收敛姿态估计值作为初始化。PCL跟踪提供了一个基于[30]的自适应颗粒大小的选项,但在这里,为了与我们的方法进行公平的比较,以及对不同颗粒大小的性能评估,我们考虑了固定的颗粒大小。所有的实验都是使用一台标准的台式电脑(英特尔Core2 Quad CPU Q9300,8G内存)和一个现成的GPU(NVIDIA GeForce GTX 590,CUDA 4.1)以及一个RGB-D相机(华硕Xtion Pro Live)进行的。

A. 物体模型

在实验中,我们选择了四个物体,并通过使用RGB-D传感器生成物体的3D网格模型(图3)。为了生成网状模型,我们首先获得多个RGB-D视图并注册。我们可以使用RGB-D SLAM方法之一[23], [24], [31]来注册多个视图,但为了简单起见,我们采用了几个ARTags。一旦多个视图被融合,物体云就被从背景云中分割出来,并通过泊松重建算法[29]重建成一个网状模型。由于PCL跟踪不能使用三维网格模型,通过渲染初始姿势得到的物体点云被送入作为参考模型。


图三

图3. 物体和厨房的网格模型。物体模型是通过融合多个RGB-D视图生成的,然后运行Poisson重建算法[29]。为了生成一组合成序列,从谷歌3D仓库下载了一个厨房模型。从左到右,"潮汐"、"牛奶"、"橙汁"、"Kinect盒子 "和 "厨房"。

B. 合成序列

为了进行定量分析,我们生成了一组合成的RGB-D序列。为了模拟一个真实的环境,我们从谷歌3D仓库下载了一个虚拟厨房模型(见图3)。将每个物体模型放在厨房模型中后,通过在物体周围移动虚拟摄像机来生成一组合成序列。图4显示了合成数据的摄像机轨迹,这些轨迹在摄像机的平移、旋转和速度方面表现出高度的变化。物体的轨迹被保存下来,作为物体相对于摄像机坐标框架的地面真实姿态。


图四

图4. 合成序列中的相机轨迹。合成的RGB-D序列是用其对应的物体的地面真实轨迹生成的。请注意平移、旋转和速度方面的明显变化。从左到右是 "潮汐"、"牛奶"、"橙汁 "和 "Kinect盒子 "的轨迹。

为了比较我们的方法和PCL跟踪,我们计算了四种合成RGB-D序列的均方根(RMS)误差和每帧的平均计算时间,如表I所示。为了便于比较,更好的结果用粗体字表示。RMS误差因物体类型和序列的难度而不同。但总的趋势是,随着粒子数N的增加,平移和旋转误差会减少。以 "潮汐 "序列为例,它与其他序列相比相当简单,当N≤800时,PCL跟踪报告的结果略好。但随着N的增加,我们的跟踪器显示出更准确的结果。在 "潮汐 "序列中,一个有趣的事实是,PCL跟踪在Z方向的翻译中显示出稍好的结果。这可能是由于PCL跟踪只有一个参考物体点云作为物体模型,所以它确实在这个方向上导致了较小的误差。然而,当它在更具挑战性的序列上运行时,有限的参考云的数量就会出现问题。请注意,“牛奶”、"橙汁 "和 "Kinect盒子 "序列中的平移和旋转都有很大的误差。由于物体本身是自对称的,每个物体的一个参考视图不足以跟踪整个序列中的物体。如图5和图6所示,在追踪过程中,PCL追踪经常陷入局部最小值,而我们的方法可以稳健地追踪序列中的物体。


图五

图5. 对 "橙汁 "和 "Kinect盒子 "合成序列的跟踪结果。对于这两个序列,上面几行显示的是我们的方法的跟踪结果,而下面几行显示的是PCL跟踪的结果("橙汁 "序列的N=6400,"Kinect盒子 "序列的N=12800)。在这两个序列中,我们的方法都能很好地跟踪真实的物体轨迹,但由于物体模型的限制,PCL跟踪往往会丢失。(最好以彩色观看)


图六

图6. 图5中 "Kinect Box "结果的6-DOF姿势图。虽然我们的方法很好地遵循了地面实况,但由于物体模型的限制,PCL跟踪存在着错误的跟踪。

对于机器人应用,计算时间确实很重要,因为它直接决定了机器人系统的性能和可靠性。正如我们在表一和图8中看到的,两种方法的计算时间都随着N的增加而线性增加。然而,我们的跟踪每帧只需要大约50毫秒(即每秒20帧),有几千个粒子,而PCL跟踪则受到低帧率的影响。尽管PCL跟踪在 "潮汐 "序列中表现出相当的性能,但如果我们考虑到真实的帧速率,PCL跟踪会因为丢失的帧而产生更多的误差。


表1.1
表1.2

表一

图八

图8. Boxplots显示了我们在 "潮汐 "合成序列上的跟踪(左)和PCL跟踪(右)的计算时间。对于这两种方法,时间随着粒子数N的增加而线性增加,但我们的增加率要小得多。请注意,在N≤3200之前,我们方法的计算时间小于50毫秒。

C. 真实序列

我们在一组真实的图像序列中运行这两种跟踪方法,与合成序列相比,真实的图像序列表现出明显的噪声和更多的物体运动变化。图7显示了对 "潮汐 "和 "牛奶 "序列的姿势跟踪结果。为了清晰的可视化,来自RGB-D序列的RGB通道被转换为灰度,每个渲染的物体模型被画在它们上面。无效的深度点(也被称为南点)被显示为黑点。对于这两个序列,都采用了N = 1600粒子。由于物体的旋转变化很大,PCL跟踪(每个序列中的下行)经常失去跟踪。由于采用了三维物体模型并在多个视图中进行渲染,我们的跟踪能够可靠地跟踪物体,尽管有挑战性的旋转运动。


7. 结论

我们提出了一种基于GPU上的粒子过滤器的RGB-D物体跟踪方法。丰富的视觉特征被用来评估每个粒子的可能性,这个过程是大多数粒子过滤器的典型瓶颈,在GPU上被并行化,因此我们提出的解决方案实现了实时性能。通过对合成和真实的RGB-D序列进行广泛的实验,我们验证了我们的方法不仅更快,而且比PCL跟踪更准确。


8. 鸣谢

这项工作得到了波音公司的部分赞助。在此对这种支持表示感谢。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

论文笔记(十九)RGB-D Object Tracking: A Particle Filter Approach on GPU 的相关文章

随机推荐

  • 简单的TCP客户端发包工具

    一 TCP介绍 先放这里有时间在写 xff0c 最近在写DuiLib相关的使用内容 xff0c 这部分大家凑活着看 二 程序截图 下载链接 链接 xff1a https pan baidu com s 1MzNUzwd7WwBat6vNMc
  • C++常用头文件汇总

    之前说过的头文件这就来了 1 首先是本人最喜欢也是最最方便的万能头文件 xff0c 顾名思义 xff0c 不管是天上飘的还是地下埋的 xff0c 只要不是不对的头文件它都包含 xff0c 除了本篇第14个头文件 xff1a include
  • 基于I2C/SPI的温湿度采集与OLED显示

    基于I2C SPI的温湿度采集与OLED显示 一 AHT20温湿度采集1 I2C2 温湿度采集代码效果 二 OLED显示1 显示学号姓名2 诗句显示 三 总结四 参考 一 AHT20温湿度采集 1 I2C 解释什么是 软件I2C 和 硬件I
  • 游戏客户端编程

    游戏客户端编程 1 代码实现服务器连接发送按钮 2 显示消息3 发送信息4 播放背景音乐5 变换游戏背景图片6 参考 1 代码实现 服务器连接 span class token keyword private span span class
  • 卷积神经网络实现表情识别

    卷积神经网络实现表情识别 CNN人脸表情识别图片预处理原本效果处理后效果 图片数据集效果 CNN人脸识别创建模型归一化与数据增强创建网络 摄像头人脸识别图片识别 参考 CNN人脸表情识别 图片预处理 span class token key
  • IIC协议及其工程【FPGA】

    IIC协议及其工程 FPGA 一 IIC协议1 IIC简介2 IIC中相关的术语1 应答信号 xff08 ACK xff09 2 无应答信号 xff08 NOACK xff09 3 虚写3 IIC的时序 二 EEPROM1 时钟频率2 起始
  • char *与char []的区别

    其实 xff0c 只要记住一点就能很好区分char 和char xff1a char 定义的是一个指向字符串的指针 xff08 注意 xff1a C语言中没有对应字符串的内置类型或者类类型 xff09 xff0c 而char 就是C语言中的
  • SPI协议读取FLASH【FPGA】

    SPI协议读取FLASH FPGA 一 SPI协议1 SPI简介2 SPI物理层3 SPI协议层CPOL CPHA 及通讯模式 4 SPI 基本通讯过程5 通讯的起始和停止信号6 数据有效性 二 Flash1 状态寄存器1 WIP xff0
  • 基于FPGA的图像边缘检测

    基于FPGA的图像边缘检测 一 图像处理算法1 灰度转换2 高斯滤波3 二值化4 Sobel 二 项目框架1 摄像头配置模块2 图像处理模块3 数据缓存模块4 其它模块 三 部分代码1 数据采集模块2 读写控制模块 四 参考五 源码 简介
  • 基本认证_摘要认证_HTTPS

    1 HTTP基本认证 HTTP提供了一个原生的质询 响应 xff08 challenge response xff09 框架 Web应用程序收到一条HTTP请求报文时 xff0c 服务器没有按照请求执行动作 xff0c 而是以一个 认证质询
  • 什么是奇校验(Odd Parity),什么是偶校验(Even Parity)?

  • 2021-03-08

    今天在网上安装PR xff0c 网上下载的安装器把电脑默认装了一大堆垃圾工具 xff0c 依次删除后突然发现谷歌浏览器主页被篡改了 xff0c 随后用360等工具修复 xff0c 均提示无异常 通过浏览器设置和重置主页后仍然无效 xff0c
  • 2021-03-08

    大疆无人机自己动手更换电芯的注意事项 xff0c 当电池多电芯出现均大压差且调整数据无效后 xff0c 或发现某块或多块电芯鼓包 xff0c 说明电芯已经老化 xff0c 寿命用尽 xff0c 就需要更换电芯了 xff0c 厂家为保护消费者
  • can't run '/etc/init.d/rcS': No such file or directory 最终解决方法

    drivers rtc hctosys c unable to open rtc device rtc0 end request I O error dev mtdblock2 sector 256 isofs fill super bre
  • Ubuntu下的CuteCom串口详细调试教程

    I MX6ULL嵌入式开发学习 串口调试 一 Ubuntu下的串口调试助手安装 嵌入式开发学习过程中学习到串口调试这一章 xff0c 以前在Win10操作时都有相对应的串口调试界面 xff0c 安装个串口驱动在电脑设备端口里面看到COM3时
  • STM32 串口

    文章目录 USART 通信协议RS 232与TTL电平 串口通信数据包组成USART功能框图讲解引脚寄存器状态寄存器 USART SR 数据寄存器 USART DR 控制寄存器 USART CR 波特比率寄存器 USART BRR 发送过程
  • printf二进制数据

    基于之前这篇文章的代码改进了下 xff1a http blog csdn net xzongyuan article details 28889063 之前打印的数字没有补0 我打印了内存信息 xff0c 结果是这样的 xff0c 不能对齐
  • 分析MySQL数据类型的长度

    分析MySQL数据类型的长度 MySQL有几种数据类型可以限制类型的 34 长度 34 xff0c 有CHAR Length VARCHAR Length TINYINT Length SMALLINT Length MEDIUMINT L
  • 为vscode配置clangd

    目录 安装clangd 后端安装clangd 前端修改基础配置生成compile commands json文件基本效果补全warning提醒自动修改存在问题 注意事项 clangd能提供更好的补全和提示 xff0c 自带检查一些warni
  • 论文笔记(十九)RGB-D Object Tracking: A Particle Filter Approach on GPU

    RGB D Object Tracking A Particle Filter Approach on GPU 文章概括摘要1 介绍2 贡献3 粒子滤波器4 可能性评估5 实施细节6 实验A 物体模型B 合成序列C 真实序列 7 结论8 鸣