【论文阅读】【3d目标检测】Embracing Single Stride 3D Object Detector with Sparse Transformer
论文标题: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相关推荐
- 论文阅读笔记 | 目标检测算法——SAPD算法
如有错误,恳请指出. 文章目录 1. Introduction 2. Soft Anchor-Point Detector 2.1 Detection Formulation with Anchor ...
- 论文阅读笔记 | 目标检测算法——FSAF算法
如有错误,恳请指出 文章目录 1. Introduction 2. FSAF Module 2.1 Network Architecture 2.2 Ground-truth and Loss 2.2 ...
- 论文阅读笔记 | 目标检测算法——PP-YOLOv2
如有错误,恳请指出. 文章目录 1. Introduction 2. Revisit PP-YOLO 2.1 Pre-Processing 2.2 Baseline Model 2.3 Trainin ...
- 【3D 目标检测】3DSSD: Point-based 3D Single Stage Object Detector
一 核心思路 本篇通过观察point-based目标检测方法中,在PointNet++的上采样层(FP层)和refinement Module上面耗费了大量时间,因此作者借此提出了one-stage的 ...
- 点云 3D 目标检测 - CenterPoint:Center-based 3D Object Detection and Tracking(CVPR 2021)
点云 3D 目标检测 - CenterPoint: Center-based 3D Object Detection and Tracking - 基于中心的3D目标检测与跟踪(CVPR 2021) ...
- 【论文阅读】【弱监督-3D目标检测】Weakly Supervised 3D Object Detection from Point Clouds
前言 ACM MM 2020录用的一篇文章.不使用任何真实的3D框来进行训练.通过采用归一化的点云密度来生成目标候选框.不过性能一般,算是第一个吃螃蟹的人 MIT和微软合作的论文,模型简称为VS3D ...
- 【论文阅读】目标检测中的分类回归特征解耦
论文来源:知网 以下仅仅是学习过程中的部分笔记,用作自己复习. 摘要 ..... 目标检测不仅需要判别图像中存在的目标的类别,还需要回归目标在图像中的位置. 特征耦合具体表现:分类和回归部分的网络共享 ...
- 论文阅读笔记 | 目标检测算法——PP-YOLO
如有错误,恳请指出. 文章目录 1. Introduction 2. Related Work 3. PP-YOLO 3.1 Architecture 3.1.1 Backbone 3.1.2 Det ...
- 论文阅读笔记 | 目标检测算法——YOLOX
如有错误,恳请指出. 文章目录 1. Introduction 2. YOLOX 2.1 YOLOv3 baseline 2.2 Decoupled head 2.3 Strong data augm ...
最新文章
- 波士顿动力机器狗新技能!跳绳园艺做家务,还有书法神技
- android 自定义分区,android 自定义预制APP分区
- 深入浅出Spring Boot,你和大神的差距,就只有这份文档的距离
- three.js 一个页面可以存在多个render吗_你确定把Spring MVC的视图机制吃透了吗?...
- CIO们对数据中心虚拟化心存的六大疑虑
- bzoj1085骑士精神(搜索)
- Delphi调用Android的.so文件(转)
- 【java】浅析JDK中ServiceLoader的源码
- Java:Spring @Transactional工作原理
- Java枚举介绍_java枚举使用详细介绍及实现
- pycharm和python解释器安装
- 钢琴专业打谱软件 Overture 4.02
- 对图像 香农费诺编码 matlab 实现,香农编码费诺编码.doc
- 重磅:微信官方推出 Web 前端和小程序统一框架
- H5,js实现tom猫动态的简单APP
- luogu 3426题解 (KMP)
- java jxl 写 excel文件_Java使用jxl包写Excel文件适合列宽实现
- python 下的 word2vec 学习笔记
- 关于项目的可行性分析
- R语言差异检验:t检验
热门文章
- org.xml.sax.SAXParseException;在实体引用中, 实体名称必须紧跟在 '' 后面
- Java中将科学记数法字符串转换成数字字符串
- 非对称加密之公钥密码体系 【五】
- Learn to Give Up
- Prometheus源码学习(8) scrape总体流程
- Linux centos7.6 安装elasticsearch8.x (es8) 教程
- 1Flask使用2路由3模板
- php实现自动续费功能,如何关闭wps自动续费
- Intel VT学习笔记(二)—— VMXEVMXON
- JAVA集合05_Collection.toMap()应用、三个重载方法、解决重复key问题