论文名:《Deep Hough Voting for 3D Object Detection in Point Clouds》
论文链接:ICCV 2019 Open Access Repositoryhttps://openaccess.thecvf.com/content_ICCV_2019/html/Qi_Deep_Hough_Voting_for_3D_Object_Detection_in_Point_Clouds_ICCV_2019_paper.html(论文下载不了私信和我要也可以)
代码地址:https://github.com/facebookresearch/votenethttps://github.com/facebookresearch/votenet(代码下载不了私信和我要也可以)
一、论文贡献
目前3d点云检测方法的缺陷:
- 将不规则的点体素化到规则的3D网格中,然后使用3D CNN去检测,这种方法没有利用点云数据的稀疏性,使得计算成本很高。
- 使用3D场景的2D鸟瞰图,然后采用二维目标检测去定位目标,牺牲掉了物体的几何细节,特别实在室内场景中更加严重。
3d点云检测面临的挑战:
本论文尝试对点云进行目标检测,但却面临一个很大的难题:3D的物体的中心(质心)是远离物体的表面的,而点云中的点都是扫描物体表面得到的,这样点云的内部就是空心的,因此就很难去找到物体中心。
作者提出的方法:
为了应对这一挑战,作者提出了 VoteNet,这是一种基于深度点集网络和霍夫投票协同作用的端到端 3D 对象检测网络。我们的模型通过简单的设计、紧凑的模型尺寸和高效率,在两个大型真实 3D 扫描数据集 ScanNet 和 SUN RGB-D 上实现了最先进的 3D 检测。值得注意的是,VoteNet 通过使用纯粹的几何信息而不依赖彩色图像,优于以前的方法。通过直接处理点云数据,不仅避免了信息的损失,而且由于处理的点云数据的稀疏性,还可以降低计算代价。
论文贡献:
- 通过端到端可微架构,在深度学习的背景下重新表述霍夫投票,我们将其称为 VoteNet。
- SUN RGB-D 和ScanNet 上最先进的3D 对象检测性能。
- 深入分析点云中3D 对象检测投票的重要性。
使用深度 Hough 投票模型进行点云中的 3D 对象检测。给定 3D 场景的点云,我们的 VoteNet 投票给对象中心,然后对投票进行分组和聚合,以预测 3D 边界框和对象的语义类别
二、VoteNet网络结构
VoteNet总体网络结构如下:
- 网络结构由原始点云输入,维度为(20000,3),代表输入20000个点云,每个点云都有xyz三个坐标
- 作者使用pointnet++骨干网络提取特征,骨干网络的输入为原始点云,维度为(20000,3),pointnet++主要通过4层SA模块和2层FP模块进行特征提取,这里就先不在讲述了,经过骨干网络提取出来1024个点,这些点称为种子点(或兴趣点),种子点坐标维度为(8,1024,3),种子点的特征维度为(8,1024,256),8是batch,1024是种子点的个数,3是xyz坐标,256是特征数
- 将提取出来的种子点送到votelayer进行投票,这里种子点特征将通过三层一维卷积和两层BN层,输出一个张量offset,维度为(8,1024,1,259),votelayer输出的是种子点到投票点的位移偏移量offset以及投票点的特征vote_features,所以要的到投票点的坐标需要用种子点的坐标加上得到的偏移量,vote_xyz=seed_xyz+offset,投票点坐标的维度也是(8,1024,3),投票点的特征是将输出特征加上种子点特征得到的vote_features=seed_features+offset,(由于输出的维度和种子点维度不一致,这里还需要将维度进行变换才可以相加)
- 得到投票点坐标以及投票点特征后需要对投票点进行聚合,作者使用的是pointnet中的SA模块进行聚合,将1024个投票点聚合成256个点aggregated_points,维度为(8,256,3),其特征为aggregated_features(8,256,128)
- 将聚合好的投票点进行候选框预测, 每个聚合后的点会投票产生一个候选结果。根据聚合后的特征,VoteNet通过分类head和回归head产生预测的候选框结果。aggregated_features(256x128)通过两层一维卷积进行更深层特征提取,提取后的特征分别经过一层卷积得到分类预测结果cls_precls_predictions(256x12)和位置回归预测结果reg_predictions(256x67)
- 最后一步就是将结果进行解码,预测结果如何与真实标签关联需要一一进行解码。真实标签主要包含目标有无、类别标签和目标回归位置。
三、 VoteNet损失函数
VoteNet的损失函数包含以下内容:
-
box_loss:物体框损失,用于评估物体框的质量和准确度。
-
center_loss:中心点损失,用于保证目标中心点的准确性。
-
header_cls_loss:物体方向(角度)分类损失,用于检测物体的动作。
-
header_reg_loss:物体方向(角度)回归损失,用于精细调整物体的回转。
-
loss:总体损失,通常是上述各个损失的组合。
-
neg_ratio:负样本比例,表示负样本在训练数据中所占的比例。
-
obj_acc:目标检测精度,表示检测到的目标与实际目标的匹配精度。
-
objectness_loss:目标性损失,通常用于评估物体检测的置信度。
-
pos_ratio:正样本比例,表示正样本在训练数据中所占的比例。
-
sem_cls_loss:语义分类损失,用于将物体分割成不同的语义类别。
-
size_cls_loss:尺寸分类损失,用于将货物按照不同的尺寸分类。
-
size_reg_loss:尺寸恢复损失,用于精确调整工件的尺寸。
-
vote_loss:投票损失,通常与点云处理和物体检测中的投票过程相关。
最终损失函数公式为:
其中
这里说一下投票损失,公式为
这个公式中Mpos代表在物体表面的种子总数 ,[Si on object]代表种子点Si是否在物体表面,
这一部分计算的是 真实的坐标偏移量和预测坐标偏移量的差。
四、实验结果
作者分别在SUN RGB-D数据集和ScanNetV2数据集上进行验证,结果如下:
参考链接: