【3D目标跟踪】Tracklet Proposal Network for Multi-Object Tracking on Point Clouds阅读笔记(2021)

本文提出了PC-TCNN算法,一种端到端的3D目标跟踪方法。首先,通过多帧点云序列生成粗候选轨迹片段,再利用时序特征细化轨迹,最后通过轨迹片段关联生成长轨迹。该算法在KITT测试集上取得SOTA效果,但计算量较大。关键步骤包括共享参数的3D特征提取、ConvGRU的使用以及轨迹片段的细化和关联。实验表明,4帧输入在性能和效率间取得平衡。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、为什么要做这个研究(理论走向和目前缺陷) ?
TBD是现在做目标跟踪的主流方法,这也导致检测结果很影响跟踪的好坏,能否利用由粗到精的思想(faster rcnn)先获得多个粗的轨迹,然后再细化(去除不准的轨迹)得到一个更加准确轨迹?这是本文的主要思考方向。
2、他们怎么做这个研究 (方法,尤其是与之前不同之处) ?
1)先生成粗的候选轨迹片段:输入的是多帧(实际4帧)点云序列,每帧点云经过一个共享参数的spconv后再转成一个BEV特征,然后把这连续帧的BEV特征按顺序输入到ConvGRU中获取高阶BEV特征,之后预测3D候选框(正常的3D检测器监督)和相对上一帧的位置偏移(运动信息),在最后一帧的3D框预测结果做NMS,保留下来的3D框及基于其位置偏移反推到之前的帧的3D框组成粗的候选轨迹片段。
2)然后需要对粗的轨迹片段做细化,3D候选框在原始点云中一些3D点坐标连接上其对应的高阶BEV特征输入到pointnet++中获取一个特征向量。将获得连续帧特征向量序列输入到GRU中计算各个候选轨迹片段的置信度,按其得分进行NMS(基于个轨迹片段不同帧的检测的平均IOU),得到精细的轨迹片段。
3)最后对当前帧获得精细的轨迹片段和上一帧输出的轨迹片段进行关联,度量就是重合帧中检测框的平均3D IoU,高于一定阈值时认为关联上,否则,将在下一帧初始化为新轨迹。
3、发现了什么(总结结果,补充和理论的关系)?
算法可以端到端训练,效果很好,在KITTI上获得SOTA效果,但是感觉每一帧都输入多帧计算量会很大。

摘要:提出PC-TCNN算法,首先生成候选轨迹片段,然后对候选轨迹片段进行精细化,再把候选轨迹片段关联到一起生成长轨迹。

1、引言
轨迹片段是由比较短的一段时间内同一目标的多帧检测结果组成的,理论上,多帧中的同一目标(车,人等)它们具有相似的特征(长宽高,体积,几何结构等),这种一致性特征可以被用来有效提升检测质量。本文主要方向就是利用这种一致性特征,通过细化轨迹片段内的检测框的准确度来提升轨迹片段的准确性,进而提升跨帧长轨迹的准确性。
按照这种思路,本文设计了一种用于候选轨迹片段生成的CNN网络(PC-TCNN),1)先生成粗候选轨迹片段,2)再对粗候选轨迹片段进行精细化(基于同一目标的特征一致性),3)最后把细化的轨迹片段关联起来(贪心算法)。此过程如下图所示:
在这里插入图片描述

2、相关研究
TBD:检测很影响跟踪,是目前主流方法。
基于轨迹片段来做MOT:先独立地生成轨迹片段,然后把轨迹片段连在一块的方法。这种方法对检测不准的情况比较好。
基于候选区的方法:这是一种先粗后精的思想,比如Faster RCNN两步网络。以及一些利用时序信息做行为检测的方法,这些方法一般是在2D上研究。

3 本文方法
主要框架:
在这里插入图片描述

3.1 候选轨迹片段生成
主干网络:每个当前帧(记为0),输入之前的n帧点云(包括当前帧)
在这里插入图片描述

先转换到当前帧坐标系统,然后对每一帧点云体素化,每个体素网格内计算一个网格内的所有点的4维均值特征(3D坐标+强度),然后用稀疏3D卷积获取3D特征,公式如下:
在这里插入图片描述

然后把这些帧提取到的3D特征压缩成BEV特征
在这里插入图片描述

,然后用ConvGRU对这些BEV特征进行处理计算时序特征,公式如下:
在这里插入图片描述

其中F_-n-1初始化为0,最后获得的当前帧时序特征经2D CNN后进一步编码为高阶 BEV特征。

候选轨迹片段生成头
以多帧的BEV 特征图序列作为输入,在每个特征图的每个像素点会利用目标候选区(3D框)生成头计算目标置信度和偏移,并利用运动头计算每个像素点的跨帧2D偏移(如果有目标就认为是目标的位置偏移)。在最后一帧的目标候选区生成头的输出中做NMS,这样就获得了轨迹片段的m个种子(seed)了, 基于这m个种子和运动头计算的它们的位置偏移进行回推,就可以获得m个轨迹片段。

3.2 轨迹片段细化
轨迹特征聚合:每个候选轨迹片段中的每一帧的目标框在原始点云中会对应一系列3D点,随机挑选一部分,找到每个挑选的点p在此帧点云的对应的高阶BEV位置的特征f(可能非整数,需用到双线性插值),每个点转换到此点对应的3D框的坐标系下,将转换坐标系后的这些3D点坐标连接上其对应的BEV特征后全部输入到PointNet++中生成一个特征向量,然后利用一个GRU层对此轨迹片段的不同帧的特征向量按时序输入到GRU模块中,获取每个轨迹片段的聚合特征序列
在这里插入图片描述


此过程表达如下:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

细化头:训练阶段,需要为每条轨迹片段分配GT轨迹,依据就是轨迹片段中的每一帧的3D框与GT轨迹中对应帧中的GT框的平均3D IOU要大于阈值(0.5)。每个轨迹片段的聚合特征序列,经过当前帧的GRU时会输出一个得分,这个得分代表当前轨迹片段的置信度,这个得分的监督选择(交叉熵)跟此轨迹片段与GT轨迹中各帧中的检测框和GT框的3D-IOU的平均值有关,公式表达如下:
在这里插入图片描述

在推断阶段,基于细化后的轨迹输出的上述置信度得分以及轨迹片段最后一帧(当前帧)的检测框进行NMS。
在这里插入图片描述

3.3 轨迹片段关联
当前帧预测的轨迹片段和上一帧预测的轨迹片段进行关联,以两个轨迹片段重合帧内的检测框的(平均?)3D IoU作为度量标准,利用贪心算法进行匹配,如果贪心算法得到的匹配对的3D IoU大于一定阈值,则认为这两个轨迹片段正确关联上。如果当前帧的轨迹片段与上一帧的轨迹片段没有关联上的,则将当前帧的这个轨迹片段初始化为新轨迹。

3.4 损失
可以端到端训练,一共两个损失,候选轨迹片段生成损失L_tpn和候选轨迹片段细化损失L_trn,其中,候选轨迹片段生成损失L_tpn有多个目标损失和运动损失组成,公式如下:
在这里插入图片描述

其中L_obj就是单帧的3D检测损失(smooth L1):
在这里插入图片描述
在这里插入图片描述

运动损失也是smooth L1损失:
在这里插入图片描述

轨迹片段细化损失:
在这里插入图片描述
在这里插入图片描述

其中的轨迹片段置信度损失L_mIoU是交叉熵损失。
4 实验
4.1 数据集和度量
kitti数据集,度量:MOTA, MOTP,IDS,FRAG

4.2 实现细节(略)
4.3 消融实验
输入帧数的影响:4帧最好
在这里插入图片描述

主干网络、候选轨迹片段细化、轨迹片段增强:
不同的主干网络、是否有候选轨迹片段细化、是否在训练阶段做轨迹片段的增强的影响:
在这里插入图片描述

4.4 KITTI测试集上的实验结果
在这里插入图片描述

此方法目前在kitti榜单排名如下表:
按照HOTA方法是第二名,按照MOTA依然是第一名。
在这里插入图片描述
在这里插入图片描述

4.5 在3Dmot方法评估
kitti评估3Dmot是需要先把3D框转到2D图像上进行基于IoU的2Dmot评估,AB3DMOT提出新的评估方法直接基于3D IoU在3D空间评估。实验结果:
在这里插入图片描述

<think>好的,我现在需要帮助用户解决如何复现《Interactive Object Segmentation in 3D Point Clouds》这篇论文的问题。首先,我应该回顾一下用户提供的引用资料,看看有没有相关的资源。用户给出的引用[1]和[2]是关于点云分割的综述和生成形状建议网络,而引用[3]提到了一种将点云投影到图像进行分割的方法,可能和交互式分割有不同之处。 接下来,我需要考虑复现论文的一般步骤,比如查找官方代码、数据集准备、环境配置、实验复现等。用户可能没有找到官方代码,所以需要建议他们去论文的官方页面或者GitHub上查找,或者联系作者。如果官方代码不可用,可能需要寻找第三方实现,比如GitHub上的开源项目。 数据集方面,用户需要确认论文中使用的数据集,常见的有ShapeNet、S3DIS、ScanNet等。如果数据集需要申请,可能需要指导用户如何下载和处理。另外,数据预处理步骤也很重要,比如点云采样、归一化等。 环境配置方面,点云处理通常需要PyTorch或TensorFlow,以及特定的库如Open3DPointNet++等。用户可能需要安装CUDA和cuDNN来支持GPU加速。要提醒他们注意版本兼容性,可能需要创建虚拟环境。 实验复现部分,建议用户先运行预训练模型,再逐步调整参数。如果遇到问题,可以查阅论文的细节或社区讨论。结果评估可能需要使用论文中的指标,如IoU、mAcc等,并可视化结果。 此外,用户提到的引用[3]的方法涉及将点云投影到图像进行分割,但交互式分割可能需要不同的方法,比如用户交互输入。需要确认论文的具体方法,可能需要结合用户交互的点或区域进行分割。 可能用户遇到的困难包括环境配置问题、数据集处理、代码调试等。应该建议他们分步骤解决,查阅文档和社区资源,比如GitHub Issues、Stack Overflow等。同时,推荐相关的论文和教程,帮助他们理解背景知识。 最后,生成相关问题时要覆盖复现步骤的各个方面,比如代码查找、数据集处理、环境问题、方法对比等,帮助用户进一步探索。</think>关于复现《Interactive Object Segmentation in 3D Point Clouds》论文的实验,以下是分步骤的解决方案: ### 一、代码资源定位 1. **官方代码查找** 首先访问论文主页或arXiv页面,查看"Code"或"Project Page"链接。例如,论文《GSPN: Generative Shape Proposal Network》[^1]的开源代码通常在GitHub标注 *推荐搜索关键词*: `论文标题 + github` 或 `作者名 + 3D interactive segmentation` 2. **第三方实现参考** 若官方代码未公开,可搜索相关开源实现。例如,GitHub上类似项目如`PointNet++`[^2]的代码框架可提供数据加载和网络设计参考 ### 二、数据集准备 1. **数据集类型** 该论文可能使用的数据集包括: - **ShapeNet**:包含3D模型语义分割标注 - **S3DIS**:斯坦福大规模室内场景数据集 - **ScanNet**:RGB-D扫描的室内场景数据集 *数据下载需注意部分数据集需申请权限* 2. **数据预处理** 参考论文中描述的预处理方法,如: - 点云采样(如Farthest Point Sampling) - 归一化处理(坐标标准化到单位球内) - 交互标注模拟(生成用户输入的点/区域标记) ### 三、环境配置 1. **基础框架** 典型配置方案: ```bash conda create -n 3dseg python=3.8 conda install pytorch==1.10.0 torchvision cudatoolkit=11.3 -c pytorch pip install open3d scikit-learn h5py ``` 2. **依赖库版本** 重点关注以下库的版本兼容性: - PyTorch Geometric(处理图结构点云数据) - Open3D(点云可视化与基础操作) - Trimesh(网格数据处理) ### 四、实验复现流程 1. **网络架构实现** 根据论文方法章节描述: - 交互输入模块(如用户点击的坐标编码) - 特征提取网络(常见如PointNet++中的Set Abstraction层) - 迭代优化模块(如CRF后处理) 2. **训练策略** ```python # 伪代码示例 for epoch in range(max_epoch): for batch in dataloader: points, user_input, labels = batch pred = model(points, user_input) loss = focal_loss(pred, labels) optimizer.zero_grad() loss.backward() optimizer.step() ``` ### 五、结果验证 1. **评估指标** 需复现论文中报告的指标: - mIoU(平均交并比) - mAcc(平均准确率) - 交互次数-精度曲线 2. **可视化工具** 使用Open3D实现分割结果渲染: ```python import open3d as o3d pcd = o3d.geometry.PointCloud() pcd.points = o3d.utility.Vector3dVector(points) pcd.colors = o3d.utility.Vector3dVector(pred_colors) o3d.visualization.draw_geometries([pcd]) ``` ### 引用文献支持 - 点云交互分割的通用框架可参考《Deep Learning for 3D Point Cloud Understanding》中的交互式方法章节 - 多视图投影方法在《GSPN》中有类似实现思路 - 数据预处理流程可借鉴文献[^3]中的点云渲染技术
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值