论文标题:Embracing Single Stride 3D Object Detector with Sparse Transformer
源码地址:https://github.com/TuSimple/SST
CVPR2022
文章写得很好!
文章从2d 3d目标检测目标的尺寸的不同入手,在2d目标检测中确实由于图像近大远小的尺寸关系 存在着图像中物体尺寸长尾的问题:

如coco数据集中,大小目标往往是呈现long-tail的分布,于是很多研究者才考虑从不同scale的feature map来进行不同大小的object的预测,而对于3d目标检测来说 物体的尺寸基本是一致的,没有受到近大远小的投影关系的影响。远处的物体仅仅只是点云更加稀疏而已。作者便引出自己的思考:下采样在3d目标检测中是否是必要的呢?
因此 作者便考虑一个没有下采样的检测器,然而设计这个检测器存在着以下的一些问题:
首先设计一个在原尺寸的feature map进行操作的detector是计算量巨大的,其次原尺寸的feature map对于卷积来说往往意味着更小的感受野。
如作者首先在pointpillar上进行了一系列的实验:
对于pointpillar 作者对于backbone的stride进行改进,原来的版本记做D3,依次放大缩小stride 如 从D3到D0的backbone上四层的stride分别是:

因为每一个module都会最终上采样至原来的resolution,所以上述的操作只是对于中间层的feature map的size进行了改进。


我们可以看到 通过缩小stride D3到D1 ap明显得到了提升。这说明小的stride是有助于3d目标检测的。而作者对于D0 ap的下降 作者认为是过小的stride限制了感受野的大小,导致每个feature点检测到很小的一部分场景 而这部分场景是不足以检测到物体全貌的。
所以作者在这个基础上有对于D0的卷积核进行了改进:采用空洞卷积和大尺寸(55)卷积核来进行实验 发现ap也得到了提升

这说明了一个问题:在考虑参数量和计算时间的情况下,
足够的感受野大小对于目标检测来说是十分必要的!
于是 作者便在pointpillar的基础上设计了一个single stide的网络

网络具体架构如上图所示,很简单的网络
首先类似pointpillar 对于点云进行体素化(实际上是pillar化),把每一个voxel作者认为是一个token。将它们输入到backbone中。与pointpillar不同 作者没有对这些编码后的voxel进行下采样 而是将它们输入到一个SST(Single-stride Sparse Transformer)的模块进行feature提取。
还是前面的问题:怎么在小stride的情况下扩大每一个voxel的感受野呢?
答案是:transformer!
transformer对于提取全局feature有着无可比拟的特性!然而 计算整个场景的transformer 显然是不现实的!
于是 作者首先对于得到的voxel图 对于voxel们进行group操作 :将voxel划分成若干个部分,随后对于每个group中的非空体素 计算他们之间的self attention:

还有一个问题,由于点云的稀疏性 我们不能保证每个group中非空voxel的数目保持一致 那么我们要怎样才能保证对于每一个group进行并行运算呢?
作者采用了补全的操作,补全的voxel是一个mask后的voxel 对于其他voxel没有影响。
行 那我们计算完每一个group的attention 有没有一种可能 就是我们划分的group正好有一个物体在两个group里面呢?
答案是肯定的,而且如果我们单单是group内的self attention 那么就算堆叠再多的SST也不能让这个物体的每个voxel权重得到共享 这些跨group的物体 检测效果就会很差很差
这个问题 在2d目标检测领域得到了解决:swin transformer 具体的细节是采用一个shif window 来进行不同group之间的信息交互 那么 堆叠多个SST后 跨group的voxe 便能够得到权值共享了。这里不再赘述了,感觉做的方法基本和2d是一模一样的,大家可以参考一位大佬写的博文 我也没有看这篇 best paper 的原文
这里shift的大小是group长宽的一半。

网络后面还有一个dense map的补全 这个操作也很好理解:点云往往是在物体表面的 物体中心往往为空 这对于检测头来说是不友好的 所以作者采用了两个33的卷积核来进行空洞的补全。最后的检测头直接采用了SSD。
loss如下:

当然 这个网络还可以扩展至二阶段 只要在后面加一个lidar RCNN即可 作者这么做是方便后面与其他方法的对比。
实验做的也很详细:


waymo上的检测效果如上图所示

叠加三帧的数据 作者发现该方法对于dense feature是很友好的。
对于single stride 的检测器 还有一个疑问 :感受野对于大物体是否足够呢?答案是 transformer可以解决你的顾虑!


文章通过调整更高的iou阈值发现 该方法还能实现更加精准的box预测。

用trans与其他采用卷积的single stride的方法进行比较
ablation做了group size voxel number的对比

SRA(网络深度)

看下来除了对于内存要求比较高(相比于pointpillar) 其他的都很优越!

我的思考:

文章做得很棒!通过transformer 成功实现了感受野的扩大 而这个感受野并非是传统卷积的粗暴的将一个立方体内的voxel进行linear操作 而是计算每个voxel相对于你query点的权重 如上图所示 确实能实现对于当前物体的准确识别 而不受到背景点 其他instance的影响!
文章对于小目标的检测效果很好 这是有没有进行下采样实现的结果!
与同为CVPR的voxel transformer 相比这篇文章实际上是在pillar层面进行的操作 这样的好处是可以直接运用2d目标检测的成果——swin—transformer。与它不同的地方是使用了单步距的操作。
文章启发了我们对于网络结构的思考——对于3d目标检测来说 下采样是否是有必要的!

【论文阅读】【3d目标检测】Embracing Single Stride 3D Object Detector with Sparse Transformer相关推荐

  1. 论文阅读笔记 | 目标检测算法——SAPD算法

    如有错误,恳请指出. 文章目录 1. Introduction 2. Soft Anchor-Point Detector 2.1 Detection Formulation with Anchor ...

  2. 论文阅读笔记 | 目标检测算法——FSAF算法

    如有错误,恳请指出 文章目录 1. Introduction 2. FSAF Module 2.1 Network Architecture 2.2 Ground-truth and Loss 2.2 ...

  3. 论文阅读笔记 | 目标检测算法——PP-YOLOv2

    如有错误,恳请指出. 文章目录 1. Introduction 2. Revisit PP-YOLO 2.1 Pre-Processing 2.2 Baseline Model 2.3 Trainin ...

  4. 【3D 目标检测】3DSSD: Point-based 3D Single Stage Object Detector

    一 核心思路 本篇通过观察point-based目标检测方法中,在PointNet++的上采样层(FP层)和refinement Module上面耗费了大量时间,因此作者借此提出了one-stage的 ...

  5. 点云 3D 目标检测 - CenterPoint:Center-based 3D Object Detection and Tracking(CVPR 2021)

    点云 3D 目标检测 - CenterPoint: Center-based 3D Object Detection and Tracking - 基于中心的3D目标检测与跟踪(CVPR 2021) ...

  6. 【论文阅读】【弱监督-3D目标检测】Weakly Supervised 3D Object Detection from Point Clouds

    前言 ACM MM 2020录用的一篇文章.不使用任何真实的3D框来进行训练.通过采用归一化的点云密度来生成目标候选框.不过性能一般,算是第一个吃螃蟹的人 MIT和微软合作的论文,模型简称为VS3D ...

  7. 【论文阅读】目标检测中的分类回归特征解耦

    论文来源:知网 以下仅仅是学习过程中的部分笔记,用作自己复习. 摘要 ..... 目标检测不仅需要判别图像中存在的目标的类别,还需要回归目标在图像中的位置. 特征耦合具体表现:分类和回归部分的网络共享 ...

  8. 论文阅读笔记 | 目标检测算法——PP-YOLO

    如有错误,恳请指出. 文章目录 1. Introduction 2. Related Work 3. PP-YOLO 3.1 Architecture 3.1.1 Backbone 3.1.2 Det ...

  9. 论文阅读笔记 | 目标检测算法——YOLOX

    如有错误,恳请指出. 文章目录 1. Introduction 2. YOLOX 2.1 YOLOv3 baseline 2.2 Decoupled head 2.3 Strong data augm ...

最新文章

  1. 波士顿动力机器狗新技能!跳绳园艺做家务,还有书法神技
  2. android 自定义分区,android 自定义预制APP分区
  3. 深入浅出Spring Boot,你和大神的差距,就只有这份文档的距离
  4. three.js 一个页面可以存在多个render吗_你确定把Spring MVC的视图机制吃透了吗?...
  5. CIO们对数据中心虚拟化心存的六大疑虑
  6. bzoj1085骑士精神(搜索)
  7. Delphi调用Android的.so文件(转)
  8. 【java】浅析JDK中ServiceLoader的源码
  9. Java:Spring @Transactional工作原理
  10. Java枚举介绍_java枚举使用详细介绍及实现
  11. pycharm和python解释器安装
  12. 钢琴专业打谱软件 Overture 4.02
  13. 对图像 香农费诺编码 matlab 实现,香农编码费诺编码.doc
  14. 重磅:微信官方推出 Web 前端和小程序统一框架
  15. H5,js实现tom猫动态的简单APP
  16. luogu 3426题解 (KMP)
  17. java jxl 写 excel文件_Java使用jxl包写Excel文件适合列宽实现
  18. python 下的 word2vec 学习笔记
  19. 关于项目的可行性分析
  20. R语言差异检验:t检验

热门文章

  1. org.xml.sax.SAXParseException;在实体引用中, 实体名称必须紧跟在 '' 后面
  2. Java中将科学记数法字符串转换成数字字符串
  3. 非对称加密之公钥密码体系 【五】
  4. Learn to Give Up
  5. Prometheus源码学习(8) scrape总体流程
  6. Linux centos7.6 安装elasticsearch8.x (es8) 教程
  7. 1Flask使用2路由3模板
  8. php实现自动续费功能,如何关闭wps自动续费
  9. Intel VT学习笔记(二)—— VMXEVMXON
  10. JAVA集合05_Collection.toMap()应用、三个重载方法、解决重复key问题