Pointpillar 论文解读


Pointpillar 论文解读

主要贡献:

  • 这篇文章的主要贡献在于 “Fast Encoder”, 也就是将点云稠密的Pillar(上文提到2847个)**输入给网络,**这才是这篇论文的精髓所在, 这大大提升了识别速度, 论文写可以达到62Hz.
  • 仅使用2D卷积层进行端到端学习
  • PointPillars uses a novel encoder that learn features on pillars (vertical columns) of the point cloud to predict 3D oriented boxes for objects.PointPillars 使用了一种新颖的编码器,它学习点云支柱(垂直列)上的特征来预测对象的 3D 定向框。
    • First, by learning features instead of relying on fixed encoders, PointPillars can leverage the full information represented by the point cloud.首先,通过学习特征而不是依赖固定的编码器,PointPillars可以利用点云表示的全部信息。
    • Further, by operating on pillars instead of voxels there is no need to tune the binning of the vertical direction by hand.此外,通过对柱子而不是体素进行操作,不需要手动调整垂直方向的分箱。
    • Finally, pillars are highly efficient because all key operations can be formulated as 2D convolutions which are extremely efficient to compute on a GPU.最后,支柱非常高效,因为所有关键操作都可以表述为2D卷积,这在GPU上计算非常高效。
    • An additional benefit of learning features is that PointPillars requires no hand-tuning to use different point cloud configurations. For example, it can easily incorporate multiple lidar scans, or even radar point clouds.学习特征的另一个好处是 PointPillars 不需要手动调整来使用不同的点云配置。例如,它可以很容易地合并多个激光雷达扫描,甚至雷达点云。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  1. 点云和图像的区别?

    • 两个主要区别:1)点云是一种稀疏表示,而图像密集,2)点云是 3D,而图像是 2D。

    • 因此,来自点云的目标检测不容易适用于标准的图像卷积管道。

  2. 数据处理流程是怎样的,点云怎么生成伪图像?

    • lidar-based,数据上只使用激光雷达。HDL-64E Velodyne 64线激光雷达。
    • 在最常见的范例中,点云组织在体素中,每个垂直列中的体素集被编码为固定长度的、手工制作的特征编码,形成一个伪图像,可以通过标准的图像检测体系结构进行处理。
    • 借鉴 Complex YOLO(原论文使用yolo v2TODO Complex-YOLO v5实现 数据部分 yolov4)
    • Pillar Feature Network Pointcloud to Pseudo-Image 点云到伪图像
      • l(x,y,z,r), |P| = B
      • (xc, yc,zc)、(xp,yp) 扩充pillar中的点,c表示pillar中所有点的算术平均值的距离。p表示与pillar(x,y)中心的偏移量。
      • 增强后的liar数据 l 是9维,l(x ,y ,z ,r ,xc ,yc ,zc ,xp , yp)
  • 通过对每个样本的非空柱子数量 § 和每个柱子 (N) 的点数量施加限制来创建大小为 (D, P, N ) 的密集张量
    • 如果样本或支柱拥有太多的数据来拟合这个张量,则随机抽样数据
    • 相反,如果样本或支柱的数据太少而无法填充张量,则应用零填充
    • pillars -> MLP -> BatchNorm -> ReLU -> 生成(C, P, N ) 大小的张量 -> 对通道的最大操作以创建大小为 (C, P) 的输出张量 -> 创建大小为 (C, H, W ) 的伪图像
    • TODO: ??? 注意,线性层可以表述为张量上的 1x1 卷积,从而产生非常高效的计算。
  1. 数据增强是怎么操作的(离线,在线)?

    • 参考SECOND、PIXOR
    • create a lookup table of the ground truth 3D boxes for all classes and the associated point clouds that falls inside these 3D boxes,感觉这里类似FastBev的LUT。猜测是使用预定义内参创建查找表。TODO:具体实现过程是怎样的?
      • 为所有类创建ground truth 3D 框的查找表以及落在这些 3D 框内的相关点云
      • 然后对于每个样本,我们分别随机选择汽车、行人和骑自行车的人的15,0,8个ground truth样本,并将它们放入当前点云中。
    • 接下来,单独增强所有的ground truth。
      • 每个框都均匀地从 [−π/20, π/20])和 N (0, 0.25) 独立旋转 (x, y 和 z) 轴以进一步丰富训练集。
    • 最后,我们执行两组全局增强,共同应用于点云和所有框。
      • 首先,在x轴上应用随机镜像翻转
      • 然后进行全局旋转和缩放
      • 最后,随机噪声,类似2D平移抖动,x, y, z 随机抖动 N (0, 0.2) 。
    • 最小框增强效果更好,引入ground truth采样减轻了对每个框增强的广泛需求。
    • During the lidar point decoration step, we perform the VoxelNet [31] decorations plus two additional decorations:xp and yp which are the x and y offset from the pillar x, ycenter. These extra decorations added 0.5 mAP to final detection performance and provided more reproducible experiments.
      • (xp, yp)提升了0.005map Point Decorations 这个是干啥的?
  2. pointpoillarss 的 one-stage 网络结构是怎样的?

    • 三个部分: A Pillar Feature Network, Backbone, and SSD Detection Head.
    • 将点云转换为稀疏伪图像的特征编码器网络;
    • 二维卷积主干,将伪图像转换为高级表示;pillars怎么提取出dense 2D convolutions ?
    • 检测并回归3D框的检测头。
    • Backbone主干有两个子网络: 外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
      • 一个自上而下的网络,它在相对较小的空间分辨率上产生特征
      • 第二个网络执行自上而下上采样和连接特征。自上而下的主干可以用一系列块 Block(S, L, F) 来表征。什么意思?Block具体指什么?
      • 一个块有 L 3x3 2D conv 层,具有 F 个输出通道,每个层后跟 BatchNorm 和 ReLU。
      • 层内的第一个卷积具有步幅 S/Sin,以确保块在接收到步幅 Sin 的输入blob 后在步幅 S 上运行。
      • 块中的所有后续卷积步长为 1。每个自上而下块的最终特征通过上采样和连接进行组合
      • 首先,从初始步幅 Sin 对特征进行上采样,Up(Sin, Sout, F) 到最终步幅 Sout(两者都再次测量 wrt。使用具有 F 个最终特征的转置 2D 卷积的原始伪图像)
      • 接下来,将 BatchNorm 和 ReLU 应用于上采样的特征。
      • 最终输出特征是源自不同步幅的所有特征的串联。
      • 下图是BackBone实际用的是RPN.??
      • img
    • Detection Head
      • 与 SSD 类似,我们使用 2D Intersection over Union (IoU) 将先验框与地面ground truth进行匹配。边界框高度和高程不用于匹配;相反,给定一个 2D 匹配,高度和高程成为额外的回归目标。
      • 使用SSD目标检测头进行bbox回归,高度z单独回归。
  3. loss、optimizer等超参数计算方式,以及使用位置在哪里?

    • Network
      • 均匀分布随机初始化所有权重
      • The encoder network has C = 64 output features.编码器网络有 C = 64 个输出特征。
      • The car and pedestrian/cyclist backbones are the same except for the stride of the first block (S = 2 for car, S = 1 for pedestrian/cyclist). 除了第一个块的步幅(汽车的 S = 2,行人/骑自行车者的 S = 1)外,汽车和行人/骑自行车的骨干是相同的。
      • Both network consists of three blocks, Block1(S, 4, C), Block2(2S, 6, 2C), and Block3(4S, 6, 4C). 两个网络由三个块组成,Block1(S, 4, C)、Block2(2S, 6, 2C) 和 Block3(4S, 6, 4C)。
      • Each block is upsampled by the following upsampling steps: Up1(S, S, 2C), Up2(2S, S, 2C) and Up3(4S, S, 2C).每个块通过以下上采样步骤进行上采样:Up1(S, S, 2C)、Up2(2S, S, 2C) 和 Up3(4S, S, 2C)。
      • Then the features of Up1, Up2 and Up3 are concatenated together to create 6C features for the detection head.然后将Up1、Up2和Up3的特征连接在一起,为检测头创建6C特征。
    • Loss
      • 和SECOND相同。(x, y, z, w, l, h, θ),定位回归残差计算如下:
      • 外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
      • 外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
      • 总定位损失为: 外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
      • 分类focal loss 外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
        • 其中 pa 是锚点的类别概率。我们使用α = 0.25和γ = 2的原始论文设置。
      • Ldir = softmax()
      • 总loss外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
      • 其中 Npos 是正锚点的数量,βloc = 2,βcls = 1,βdir = 0.2。
    • Adam lr=2e-4, 每15 epoch衰减为0.8, 总共160epoch。 batch = 2val, 4test。
  4. 实验设置?

    • 样本最初分为 7481 个训练和 7518 个测试样本。后分为 3712 个训练样本和 3769 个验证样本
    • xy 分辨率:0.16 m,最大支柱数 §:12000,每个支柱的最大点数 (N):100
    • 使用与VoxelNet相同的锚点和匹配策略。
      • 每个类锚都由一个宽度、长度、高度和 z 中心描述,并在两个方向上应用:0 和 90 度。
      • 使用具有以下规则的 2D IoU 将锚点与ground truth匹配。
      • 正匹配要么与基本事实框最高,要么高于正匹配阈值,而负匹配低于负阈值。
      • 损失中忽略了所有其他锚点。TODO:这段具体是什么意思?怎么实现的?继续看
    • axis aligned non maximum suppression (NMS) 轴对齐非最大抑制(NMS) 0.5
    • Car.
      • x, y, z 范围分别为 [(0, 70.4)、(-40, 40)、(-3, 1)] 米。汽车锚的宽度、长度和高度为 (1.6, 3.9, 1.5) m,z 中心为 -1 m。匹配使用 0.6 和 0.45 的正负阈值。
    • Pedestrian & Cyclist.
      • x, y, z 范围分别为 [(0, 48)、(-20、20)、(-2.5, 0.5)] 米。
      • 行人锚的宽度、长度和高度为 (0.6, 0.8, 1.73) 米,z 中心为 -0.6 米,
      • 自行车锚的宽度、长度和高度为 (0.6, 1.76, 1.73) 米,z 中心为 -0.6 米。
      • 匹配使用 0.5 和 0.35 的正负阈值。
    • 外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
  5. 验证时的坐标转换方式和评价指标bbox ,3d,AOS计算方式的具体实现?

    • 见最上方计算方式。
  6. CUDA下的部署有什么区别?PillarNeXt是否具备可迁移性?

    • The main inference steps are as follows.
      • First, the point cloud is loaded and filtered based on range and visibility in the images (1.4 ms).
      • Then, the points are organized in pillars and decorated (2.7 ms).
      • Next, the PointPillar tensor is uploaded to the GPU (2.9 ms), encoded (1.3 ms), scattered to the pseudo-image (0.1 ms), and processed by the backbone and detection heads (7.7 ms).
      • Finally NMS is applied on the CPU (0.1 ms) for a total runtime of 16.2 ms.
    • Encoding.
      • The key design to enable this runtime is the PointPilar encoding.
        • For example, at 1.3 ms it is 2 orders of magnitude faster than the VoxelNet encoder (190 ms) [31].
        • Recently, SECOND proposed a faster sparse version of the VoxelNet encoder for a total network runtime of 50 ms.
        • They did not provide a runtime analysis, but since the rest of their architecture is similar to ours, it suggests that the encoder is still significantly slower; in their open source implementation1 the encoder requires 48 ms.
    • Slimmer Design.
      • 单个 PointNet,输出64维,减少4.5ms
      • 上采样特征输出减半到128,减少3.9ms
    • 可以通过改变空间分箱的大小来实现速度和准确性之间的权衡。较小的柱子允许更精细的定位并导致更多的特征,而较大的柱子更快,因为更少的非空柱子(加速编码器)和更小的伪图像(加速 CNN 主干)。
      • pillar尺寸{0.122,0.162,0.22,0.242,0.282}m2
      • 最大柱的数量随分辨率而变化,分别设置为16000、12000、12000、8000、8000。
  7. 每个网络层的参数怎么计算?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
【优质项目推荐】 1、品质保证:项目代码均经过严格测试,确保功能稳定且运行ok。您可以放心下载并立即投入使用,若遇到任何问题,随时欢迎您的反馈与交流。 2、适用广泛:无论您是计算机相关专业(如计算机科学、信息安全、数据科学、人工智能、通信、物联网、自动化、电子信息等)的在校学生、专业老师,还是企业员工,都适用。 3、多用途价值:该项目不仅具有很高的学习借鉴价值,对于初学者来说,是入门进阶的绝佳选择;当然也可以直接用于 毕业设计、课程设计、期末大作业或项目初期立项演示等。 3、开放创新:如果您有一定基础,且热爱探索钻研,那该项目代码更是您发挥创意、实现新功能的起点。可以基于此代码进行修改、扩展,创造出属于自己的独特应用。 欢迎下载使用优质资源!欢迎交流学习,欢迎借鉴引用,共同探索编程的无穷魅力! 基于人工智能深度学习技术实现肿瘤区域识别诊断系统python源码带后端+项目说明.zip 环境 - Python : **PyTorch 1.10.0 , OpenCV , Flask , TensorRT 8.5.1.7** - Vue , Vue CLI - Node : **axios , ElementUI , ECharts** - Chrome(内核版本60以上) ## 训练 训练的数据来源于国外的数据集。因数据和精力有限只训练了针对直肠肿瘤模型。首先对CT文件进行整理,使用SimpleITK读取CT文件,读取肿瘤的掩膜文件并映射到肿瘤CT图像来获取肿瘤区域,然后进行数据的归一化,预处理后制作训练和测试的数据集。 使用**PyTorch框架**编写。使用**交叉熵损失函数**,**Adam优化器**。 网络结构采用**U-Net**,**U-Net**是基于FCN的一种语义分割网络,适用于做医学图像的分割。结构如下,实际使用稍有改动。 后端 整个系统采取前后分离的方案,确保足够轻量,低耦合。后端采用Python的Flask库,能与AI框架更好的结合,使得系统能更高内聚。 后端运行流程如下 目录管理: | 目录 | 功能 | | ---- | ---- | | uploads | 直接上传目录 | | tmp/ct | dcm文件副本目录 | | tmp/image| dcm读取转换为png目录| | tmp/mask | 预测结果肿瘤掩膜目录| | tmp/draw | 勾画肿瘤后处理结果目录| 系统以图像分割为核心,利用人工智能完成肿瘤区域的识别勾画并提供肿瘤区域的特征来辅助医生进行诊断。有完整的**模型构建、后端架设和前端访问**功能。 医生只需通过web上传ct图像文件,后台就会使用训练好的模型进行肿瘤区域的分割,然后将勾画好肿瘤区域的图像返回,还有肿瘤区域的一些特征(如面积、周长、强度等),并且提供前几次诊断的特征数据并绘制成图表进行对比来辅助医生诊断。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值