目录

  • Part-A2 Net
    • Part-aware Stage
      • 将点云体素化
      • 主干网络
        • Sparse Convolution
        • Submanifold Sparse Convolution
        • Up sampling
      • RPN Head
      • 主干网络的输出
      • 需要注意的一点
    • Part-aggregation Stage
      • RoI-aware point cloud pooling
      • feature aggregation
    • Loss
    • 实验部分
  • 我的思考

文章 Part-A2 Net: 3D Part-Aware and Aggregation Neural Network for Object Detection from Point Cloud

该文章的作者与PointRCNN同一作者,在PointRCNN在KITTI数据集登顶之后,又一篇3D Object Detection的文章。目前该文章还没有放出代码,所以先读一下了解一下其中思想。

Part-A2 Net

该文章提出了part-aware和part-aggregation module,并使用这两个模块,组成了Part-A2 Net,完成3D Object Detection任务。我们就按照着论文的写作顺序来记笔记。首先先介绍一下整体的网络框架,如下图:

整个网络分为如下两个模块,part-aware和part-aggregation。可以对比着Faster-RCNN来进行理解,part-aware stage就相当于主干网络和RPN,它的输出就是一个4维度feature map和Proposals。Part-aggregation stage就相当于RoI Pooling和后面的Classifier的这部分。

Part-aware Stage

将点云体素化

就是将整个空间栅格化,然后对每一个格子生成feature。生成这种feature的方式文中引用了VoxelNet,使用全连接层和max pooling对栅格内的点云进行自动地特征提取得到每个栅格的feature。我认为也可以参考PIXOR,手动的设置每个栅格内的feature。

VoxelNet: End-to-End Learning for Point Cloud Based 3D Object Detection (CVPR2018)
PIXOR: Real-time 3D Object Detection from Point Clouds (CVPR2018)

主干网络

主干网络类似于U-net的形式,先通过步长为2的一些卷积层将输入降采样至1/8的大小,然后再通过Upsampling上采样至原来的分辨率,这样就得到了Voxel-wise的feature,这作为其中的一部分输出。

构成主干网络的卷积,下采样和上采样的具体模块与在CV中的CNN的模块均不相同,这一点主要是因为体素化后的输入是一个四维tensor,有长宽高+feature的四个维度,所以使用的是3D的卷积。接下来就具体了解一下这些模块。

Sparse Convolution

这个模块主要对应CV中的步长为2的卷积层,起到pooling的作用。可以参考下面这篇引文:
SECOND: Sparsely Embedded Convolutional Detection

使用Sparse Convolution的主要目的是因为体素化后对点云的表示方法是稀疏的。可以想象,位于天空中的栅格和位于障碍物后面的格子中是不包含激光点的,这种格子的特征数值为0,导致栅格整体来看是稀疏的。对于稀疏的栅格做普通的卷积,要做大量对数据为0的栅格做乘加操作,而这种乘加操作的结果仍然为0,所以直观的讲,对于空栅格做卷积,只是在进行计算,而不提取任何特征,输出与输入均为0,而且由于体素化后大量栅格是空着的,所以大量的操作是无用的。所以在sparse convolution中,只对不为0的栅格做乘加操作,可以极大的减少操作数量。在这种思想的指导下,sparse convolution重新组合卷积操作中的乘加操作,使用table记录哪些栅格不为空,从而针对性地计算,可以大大减少计算量。这种操作的输出与正常的convolution的输出是一样的,只是对于稀疏的输入来说,可以大大减少运算数量。所以步长为2的sparse convolution也好理解,就是正常convolution的理解方法,无非是计算量减小。

Submanifold Sparse Convolution

这个模块主要对应CV中CNN的卷积层,可以参考下面这篇引文:
3D Semantic Segmentation with Submanifold Sparse Convolutional Networks

引文中提到,对于上述sparse convolution有个问题是,随着经过sparse convolution的层数增多,栅格稀疏的性质变的越来越弱。这个问题很好理解,就单对一个不为空的格子而言,经过sparse convolution(其实也就是convolution)的操作,它的影响为卷积核的大小。也就是说,对于convolution的输出的某个格子而言,只要其感受野内有一个不为空的格子,这个格子就不为空。这样子,稀疏的性质是以指数的速度减弱的。

针对上述问题,Submanifold Sparse Convolution做法就是对于输出的某个格子而言,只有其在输入中的那个对应的格子不为空,这个格子才不为空。Submanifold Sparse Convolution的操作引文中只介绍了stride为1的convolution,经过padding可以做到输入和输出的tensor大小一样。经过Submanifold Sparse Convolution的操作,输出不为空的格子的位置是与输入不为空的格子的位置是一样的,数量也是一样的。这样就解决了稀疏性质减弱的问题。

这种操作就与普通的convolution不同了,而是对一些在convolution中输出中不为空的格子将其强制为空了。

Up sampling

具体结构见下图,在concat之前对lateral features做了类似于残差网络的操作,在concat之后也做了类似的操作,这一块比较好理解。Channel Reduction还需要重新看一下。

RPN Head

文中RPN Head引用了如下文章:
SECOND: Sparsely Embedded Convolutional Detection

在引文中,RPN Head是使用了类似于SSD Head的方式,在使用RPN Head之前,网络将四维的tensor中的feature维度和高度维度合并,变成了3维tensor,相当于在鸟瞰图中一样的位置的格子中的feature进行了拼接,这在本文中的解释RPN的地方提到了。引文中RPN Head网络的结构如下:

主干网络的输出

主要输出两个量,一个是voxel-wise的label,也就是图中的Segmentation,负责表示这个voxel是否属于前景。另外一个量为预测这个voxel在proposal中的位置,是图中的Part Prediction。具体Part Prediction的表示方法见论文3.1节。

需要注意的一点

文中是用体素的形式表达了整个空间的数据,但在文中也说,其实每个体素也可以认为是体素中心的那个点,每个体素对应的特征向量也可以认为是对应体素中心的那个点的特征向量。也就是说,上面这些对体素的操作,也可以是认为是对由体素生成的规则的点云的操作。这也就是为什么在part-aggregation stage一开始的pooling叫做RoI-aware point cloud pooling。

Part-aggregation Stage

RoI-aware point cloud pooling

得到了proposal,将proposal切成141414个栅格,在每个栅格会包含Part-aware Stage中的一些点(其实也是体素中心),然后对这些包含的点的predicted part location和segmentation label做mean pooling,对其feature做max pooling。这个max pooling具体还得再看一下code中是怎么定义max,文中讲的不是很详细。在网络结构图中pooling这一部分画的非常形象。

feature aggregation

我把pooling后面这一块称为feature aggregation,其实就是一系列卷积操作,其中包括concat操作将上面pooling的两种feature合并,具体见论文3.3节。

Loss

具体详见原文,讲的已经很清楚了。

实验部分

首先作者介绍了在Part-aware Stage中的part locations prediction的效果,作者提出了一个类似于L1loss的评价标准,统计平均误差,在验证中发现,part locations prediction的平均误差在6.28cm/米,这种效果已经非常好了。

在Ablation studies中作者讨论了如下几个方面:

  • part-aware and aggregation是否起到了作用:作者通过去掉part locations prediction这部分,使用coordinates进行代替,效果变差,证明了part locations prediction的作用。作者通过去掉part-aggregation stage的部分,直接在part-aware stage的输出做预测,也就是把NMS加在了proposal上,效果对比不如在A2上的提升明显。
  • RoI-aware Pooling的作用:对比了PointRCNN中的Pooling方法,效果提升不错,但这很容易理解,fixed size本身就存在问题。
  • Pooling之后的网络:修改了不同的网络结构,效果提升不大
  • RoI pooling size:分的栅格约细,对于约难的问题处理约好,但对于简单的问题,可能会产生干扰。

我的思考

  • 文章中part locations prediction的回归是使用Cross Entropy Loss的,但这种回归的方式一般应该选用L1或者L2,这一点不符合常理。
  • RoI pooling这一块可以按照RoI Align pooling的形式做改进,在做part locations prediction的时候可以用插值的方式
  • submanifold sparse convolution和 sparse convolution(就是普通的convolution)的组合成主干网络的问题。为什么要在降采样的时候用convolution,而普通的卷积用submanifold sparse convolution,我觉得这一点上的设计可以再做做albation study。

【论文阅读】【三维目标检测】Part-A^2Net相关推荐

  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. 【论文阅读】目标检测中的分类回归特征解耦

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

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

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

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

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

  7. 论文阅读笔记 | 目标检测算法——Libra R-CNN算法

    如有错误,恳请指出. 文章目录 1. Introduction 1.1 Sample level imbalance 1.2 Feature level imbalance 1.3 Objective ...

  8. 论文阅读笔记 | 目标检测算法——Cascade R-CNN算法

    如有错误,恳请指出. 文章目录 1. Introduction 2 Related Work 2.1 iterative bounding box regression 2.2 Integral Lo ...

  9. 三维目标检测论文阅读:VoxelNet: End-to-End Learning for Point Cloud Based 3D Object Detection

    VoxelNet: End-to-End Learning for Point Cloud Based 3D Object Detection 理解了PointPillars这篇文章后,看这篇文章就清 ...

  10. 单目三维目标检测之CaDDN论文阅读

    文章目录 CaDDN: Categorical Depth Distribution Network for Monocular 3D Object Detection 作者和机构信息: Abstra ...

最新文章

  1. 浅谈:稀疏数组与二维数组之间的转换
  2. Nginx学习笔记---ngx_buf_t数据结构
  3. 别光啃书了,这才是最前沿的机器学习(ML)技术路线!
  4. 【Kafka】kafka NotLeaderForPartitionException thisserver is not the leader for topic-partition
  5. java 命令行 解析_如何在Java中解析命令行参数?
  6. 几个查询优化小技巧,可以大大提高效率并解决一些问题
  7. SQL进阶:数据中间表,多表取身份证号-整理-匹配多表-合并整理
  8. 图片显示不出时显示默认图片
  9. IJCAI2021强化学习相关论文集合推荐
  10. 简述PHP是什么?PHP文件是什么?
  11. 设置电脑wifi和网线同时访问网络
  12. Github 之 本地上传代码到 Github ,并且添加 .gitignore 文件 屏蔽一些文件上传(内附详细步骤)
  13. 计算机基本防范技术教案,电脑病毒处处防 教案(华科版信息技术上册)
  14. 人工智能之知识图谱概述(一)
  15. 人和人最大的差别不是技术上的高低,而是你的人生观价值观
  16. 程序员求职面试三部曲之一:选择合适的工作单位(转)
  17. 【Linux 内核 内存管理】物理分配页 ⑧ ( __alloc_pages_slowpath 慢速路径调用函数源码分析 | 获取首选内存区域 | 异步回收内存页 | 最低水线也分配 | 直接分配 )
  18. redis redisson 分布式锁 WRONGTYPE Operation against a key holding the wrong kind of value
  19. latex 字体大小
  20. 基于Webio交互的Pyecharts数据分析脚本小记

热门文章

  1. 比特平面重建图像matlab,matlab实现 图像的比特平面分层 代码
  2. 分布式储能系统发展趋势和未来
  3. Alpha-beta 算法
  4. PSRAM芯片QPI接口APS6404L专用于智能手表存储
  5. 哈工大数据结构期末_21哈工大计算机考研 | 备考重点与参考书目推荐!
  6. make后gcc出现不全_基于gcc的安卓手机、树莓派4B、Surface Go性能测试
  7. 怎么更改坐标轴标题access_excel2013设置图表坐标轴刻度的教程
  8. 免流脚本SAOML二开最新版
  9. 对比分析杨氏双缝干涉和insar参考面模型的区别?与高程相比,为什么InSAR干涉相位对形变更敏感?干涉基线?平地效应?高程模糊度?
  10. 小程序如何与智能电视相结合?