【论文精读】Fully Sparse 3D Occupancy Prediction

1 背景信息

团队:南京大学,上海人工智能实验室
时间:2023年12月
代码:https://github.com/MCG-NJU/SparseOcc

2 OCC预测存在的问题

2.1 dense 3D features

目前都是提取的密集3D特征,但是据统计,**90%**的Voxel都是空的,造成了极大的浪费,帧率现在很低,在Tesla A100上只能达到2-3FPS;然而,SparseOCC达到了17FPS;
还有一些稀疏的特征表征方式,最后还是做了saprse2dense的操作,比如VoxFormer。所以本文说自己是fully sparse。

2.2 evaluation

原本是mIOU,这篇文章提出了自己的评价方式RayIOU。

3 SparseOCC的做法

分为3个部分:

  1. backbone + FPN,提取特征
  2. sparse voxel decoder,解码出占据网格,但是不带类别信息
  3. mask transformer,分别各个实例的类别
  4. 2个decoder输出处理得到带分类的占据网格

3.1 sparse voxel decoder

将下述的层多次执行:

  1. 将一个体素voxel 8等份,得到8个新的体素;这一步就是论文里说的coarse2fine的步骤,它一步步把占据的网格细化,得到更细致的占据分布
  2. 这一步使用交叉熵损失进行监督,并考虑到地面这个种类最多,所以对每个类别进行了权重的平衡。

3.2 Mask transformer

  1. 这一步用到了上一步的输出,但是上一步输出的占据网格也会有错误,因此会把错误的结果类别设为no object;损失使用focal loss

4 Evaluation

4.1 mIOU的问题

一言以蔽之,mIOU鼓励模型预测的网格更厚,和真实场景不符。

If the model fills all areas behind the surface, it inconsistently penalizes depth predictions.
The model can obtain a higher IoU by filling all areas behind the surface and predicting a
closer depth.

如果模型预测的网格在真实网格的后面,那么IOU得分为0;那么如果想要得分高,而且也不预测那么准的话,就把网格预测厚一点,把真实网格包裹住就可以。

If the predicted occupancy represents a thin surface, the penalty becomes overly strict. Even
a deviation of just one voxel results in an IoU of zero.

反之,预测薄了的话,如果没包住真值,那IOU为0,得分就很低。

The visible mask only considers the visible area at the current moment, reducing occupancy
prediction to a depth estimation task and overlooking the scene completion ability.

visible mask告诉模型哪些区域有效,哪些区域无效invisible,那么模型只需要预测有效区域的深度就可以了,让模型occ预测变成了深度预测。

4.2 Ray-IOU的提出

针对每一束射线射到的第一个样本C:求:

TP / (TP + FP + FN)
TP表征实际有,预测有
FP表征实际没有,预测有
FN表征实际有,预测没有

这样有好处:

  1. 只看射线射到的第一个样本,不考虑其厚度
  2. TP的阈值更宽,比mIOU宽松一点
  3. 任何位置都有可能成为光束的起始点,这样子让模型能够真正进行场景建模能力,而不是仅仅深度预测能力

实验

在Ray-IOU中,SparseOCC达到最佳,在mIOU中,BEVDet-OCC达到最佳。
后面的实验结论没看了。

相关推荐

  1. 论文精读】Fully Sparse 3D Occupancy Prediction

    2024-07-22 21:10:03       16 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-22 21:10:03       52 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-22 21:10:03       54 阅读
  3. 在Django里面运行非项目文件

    2024-07-22 21:10:03       45 阅读
  4. Python语言-面向对象

    2024-07-22 21:10:03       55 阅读

热门阅读

  1. 如何在Linux中打开core文件

    2024-07-22 21:10:03       13 阅读
  2. 数据仓库中的数据治理流程

    2024-07-22 21:10:03       12 阅读
  3. 数据结构(特殊二叉树-线索二叉树)

    2024-07-22 21:10:03       13 阅读
  4. 代码重构实践分享

    2024-07-22 21:10:03       13 阅读
  5. Python变量

    2024-07-22 21:10:03       13 阅读
  6. Opencv的kmeans每次调用结果都会变化

    2024-07-22 21:10:03       13 阅读
  7. bash XXX.sh文件和直接运行XXX.sh的区别

    2024-07-22 21:10:03       14 阅读
  8. 从组装理论到梯径理论的公式探索

    2024-07-22 21:10:03       16 阅读
  9. 牛客周赛 Round 51题解

    2024-07-22 21:10:03       18 阅读
  10. C++模板编程:泛型编程的强大工具

    2024-07-22 21:10:03       14 阅读
  11. 掌握Gradle任务控制:深入doFirst与doLast的魔法

    2024-07-22 21:10:03       17 阅读
  12. /etc/logrotate.d/syslog与/etc/logrotate.conf优先级

    2024-07-22 21:10:03       16 阅读