BundleTrack: 6D Pose Tracking for Novel Objects without Instance or Category-Level 3D Models
- 用于6D姿态跟踪
- IROS 2021
- 论文: https://arxiv.org/pdf/2108.00516.pdf
- git: https://github.com/wenbowen123/BundleTrack
- 6D: x,y,z,yaw,pitch,roll
特别之处:
- 不需要被跟踪物体的3D模型
- 稳定,不受明显遮挡的影响
- 10Hz
- 在NOCS上效果非常好,在YCBInEOAT上效果与se(3)-TrackNet类似(比se差一点)
常见的6D姿态跟踪,对输入数据的要求(至少满足一个):
- 需要被跟踪目标的CAD模型 —— 无法跟踪未知模型物体
- 需要同类别物体的CAD模型(真实/合成数据) —— 难以穷举所有种类/合成数据工作量大
- 不需要CAD模型,但需要在跟踪的同时不断对物体进行建模(reconstruction) —— 位姿估计的误差会导致建模误差
结构:
- 视频分割 video segmentation
- 关键点检测 learning-based keypoint detection
- 位姿估计 coarse pose estimate
- 位姿图优化 memory-augmented pose-graph optimization
输入:
- RGB-D video
- 第一副图像上的二进制掩码,表示要跟踪的目标(用于初始化,可由语义分割得到)
- 观测者的初始姿态(如果是计算物体的相对姿态,不需要该参数;计算绝对姿态时需要)
步骤:
- 输入一张图
- 图像分割网络对物体提取ROI,获得掩码,mask M —— Transductive-VOS Network
- 裁剪后,送到关键点检测网络提取关键点和特征,keypoints & feature descriptors —— LF-Net
- 基于关键点及特征初步计算位姿,coarse estimate pose
- 位姿优化,从memory pool中寻找关键帧填补未检测到的keypoints,pose graph optimization
一、具体结构
1. video segmentation network
计算目标物体的掩码
Transductive-VOS Network
[input] 当前帧的RGBD图像和上一帧的掩码: &
[output] 当前帧的掩码:
2. keypoint detection network
检测物体的关键点、并提取关键点的特征
LF-Net
[input] 当前帧的目标区域(根据掩码得到) :
[output] 当前帧关键点的位置和特征(500个关键点,每个关键点包含一对x,y坐标,和一个1*128特征向量): &
3. data association
特征匹配、边缘修剪(RANSAC)
[input] 上一帧和当前帧的关键点及特征: & & &
[output] 特征的对应关系:feature correspondences
4. coarse estimate
初步估计位姿
[input] 特征的对应关系:feature correspondences
[output] 初步计算的位姿:
5. keyframe selection
选择关键帧
[input] 当前帧的图像和(所有)以前的帧: & memory pool
[output] 被选出的关键帧(与当前帧重合率最高的k帧): k key frames
6. pose graph optimization
位姿图优化:根据关键帧和当前帧的关键点,通过最小化特征残差和几何残差优化位姿(t时刻和过去k个时刻的位姿都会被更新)
[input] 初步计算的位姿变换矩阵,关键帧: & key frames
[output] 优化后的位姿:
* 消除累计误差的关键
二、分析
1. 为什么没有累计误差
方法 | 类别 tracking-by- | 速度 | 是否有累计误差 | (有/无)累计误差的原因 | 备注 | |
估计当前位姿时考虑的历史帧数 | 其他 | |||||
MaskFusion | detection (reconstruction) | 17Hz | 1 | 1 | 跟踪的同时构建物体模型——检测的误差会导致模型误差 | 任何一帧的检测误差和位姿估计误差都会影响后续帧 |
6-PACK | keypoints | 4Hz | 1 | 1 | ||
BundleTrack | keypoints | 10Hz | 0 | 前一帧+多个相关性最强的(max15) | 位姿优化时,同时优化当前帧和历史帧的位姿 | 先基于前一帧粗略计算出位姿,再根据多个历史帧优化位姿。 计算量增大,需使用CUDA加速 |
2. 速度
Graph Feature Matching 和 Pose Graph Optimization 占据了一半的时间