3D 点云算法

仅提供创新说明,不提供细节

文章目录

PointNet++

PointNet++

VoxelNet

VoxelNet 由三个模块组成:

  • Feature Learning Network:将点云划分为 voxel(体素),再提取特征;
  • Convolution Middle Layers:进行 3D 卷积,提取三维特征;
  • Region Proposal Network:分类并预测边界框。

Feature Learning Network

  1. Voxel Partition:
    根据点云划分 Voxel(空间网格状)。
  2. Grouping:
    将点云空间中的点划分到其位置对应的 Voxel 中,进行分组。(voxel 中没有点即为空)
  3. Random Samplling:
    对于每个 Voxel,若所含点数大于 T,则随机采样 T 个。
    • 节约开销。
    • 降低各voxel之间点个数的不平衡。(点过于密集易导致网络计算结果有偏差)
  4. Stacked Voxel Feature Encoding:
    对体素特征编码,先逐点计算,再逐元素计算,最后跳跃连接 c o n c a t ( ⋅ ) concat(·) concat(⋅)。

Convolution Middle Layers

卷积中间层,标准的 3D 卷积操作:

复制代码
 Conv3D() -> BN() -> ReLU()

Region Proposal Network

预测目标:

  • 概率评分图(Probability Score Map )
  • 回归图(Regression Map)

Loss

L = α 1 N p o s ∑ i L c l s ( p i p o s , 1 ) + β 1 N n e g ∑ j L c l s ( p j n e g , 0 ) + 1 N p o s ∑ i L r e g ( u i , u i ∗ ) L = \alpha \frac{1}{N_{pos}} \sum_i L_{cls}(p_i^{pos}, 1) + \beta \frac{1}{N_{neg}} \sum_j L_{cls}(p_j^{neg}, 0) + \frac{1}{N_{pos}} \sum_i L_{reg}(\mathbf{u}_i, \mathbf{u}_i^{*}) L=αNpos1i∑Lcls(pipos,1)+βNneg1j∑Lcls(pjneg,0)+Npos1i∑Lreg(ui,ui∗)

其中回归损失 如下:

每个预测结果对应一个 3D 框,其格式为: ( x c a , y c a , z c a , l a , w a , h a , θ a ) (x_c^a, y_c^a, z_c^a, l^a, w^a, h^a, \theta^a) (xca,yca,zca,la,wa,ha,θa)

真值为: ( x c g , y c g , z c g , l g , w g , h g , θ g ) (x_c^g, y_c^g, z_c^g, l^g, w^g, h^g, \theta^g) (xcg,ycg,zcg,lg,wg,hg,θg) ,其中

  • ( x c g , y c g , z c g ) (x_c^g, y_c^g, z_c^g) (xcg,ycg,zcg) 表示标注框中心的坐标,
  • ( l g , w g , h g ) (l^g, w^g, h^g) (lg,wg,hg) 表示标注框的长、宽、高,
  • θ g \theta^g θg 表示偏航角(Yaw)。

则回归的目标为以下七个量:
Δ x = x c g − x c a d a , Δ y = y c g − y c a d a , Δ z = z c g − z c a h a \Delta x = \frac{x_c^g - x_c^a}{d^a}, \quad \Delta y = \frac{y_c^g - y_c^a}{d^a}, \quad \Delta z = \frac{z_c^g - z_c^a}{h^a} Δx=daxcg−xca,Δy=daycg−yca,Δz=hazcg−zca

Δ l = log ⁡ l g l a , Δ w = log ⁡ w g w a , Δ h = log ⁡ h g h a , Δ θ = θ g − θ a \Delta l = \log \frac{l^g}{l^a}, \quad \Delta w = \log \frac{w^g}{w^a}, \quad \Delta h = \log \frac{h^g}{h^a}, \quad \Delta \theta = \theta^g - \theta^a Δl=loglalg,Δw=logwawg,Δh=loghahg,Δθ=θg−θa

其中:
d a = ( l a ) 2 + ( w a ) 2 d^a = \sqrt{(l^a)^2 + (w^a)^2} da=(la)2+(wa)2

参考链接(详解)

无人驾驶汽车系统入门(二十八)------基于VoxelNet的激光雷达点云车辆检测及ROS实现

SECOND

SECOND 主要是针对 VoxelNet 的改进:

  1. 引入稀疏 3D 卷积,替换 普通 3D 卷积;
  2. 针对 VoxelNet 中3D检测框:相反方向的预测会导致 角度损失 过大。

额外改进:

  1. 数据增强:采用数据库采样的操作;
  2. 针对正负样本不均衡,采用 Focal Loss

架构图


对比 VoxelNet 架构图

  1. 引入稀疏卷积

    稀疏卷积:

    • 先在输入数据中找到 有效数据,并记录其位置索引;
    • 再记录:与有效数据在 卷积核中的对应索引
    • 同时记录对应的 输出位置索引,形成输入--输出映射表(rulebook);
    • 卷积计算时,根据索引直接取出有效数据进行卷积,并按 rulebook 将结果写入输出矩阵。

    稀疏卷积内容可参考:

  2. 方向回归

    如图,作者在 Head 部分引入 direction map head,用于对物体方向 进行分类

  • why 引入 direction map 分支 ?
    当一个 3D 检测框的预测方向恰好与真实方向相反的时候,此时 偏航角(Yaw)损失会很大,非常不利于模型收敛。
  • 改进:
    对于角度损失: L θ = SmoothL1 ( sin ⁡ ( θ p − θ t ) ) L_{\theta} = \text{SmoothL1}(\sin(\theta_p - \theta_t)) Lθ=SmoothL1(sin(θp−θt))
    当角度正好相反时( ± π \pm π ±π), sin ⁡ ( ⋅ ) \sin(·) sin(⋅) 函数会将其抵消掉。
  • 此时模型预测到导致目标方向不确定,可能正好相反。(虽然 Loss 问题解决了)
    所以作者引入了 direction map 分支,用于对目标方向进行二分类(softmax loss)。

参考链接(详解)

【3D目标检测】SECOND算法解析

相关推荐
饼干哥哥4 天前
开源Skills|搭建亚马逊动态关键词库系统,每天抓SSS级机会词
人工智能·深度学习·数据分析
武子康6 天前
调查研究-191 SenseVoice 不只是 ASR:把语音从“转文字“升级成“理解状态“
人工智能·深度学习·openai
武子康7 天前
调查研究-189 Kronos 调研:金融 K 线基础模型,是真突破,还是量化圈的新玩具?
人工智能·深度学习·openai
xiao5kou4chang6kai413 天前
MATLAB机器学习、深度学习--从数据预处理到模型训练
深度学习·机器学习·matlab·数据预处理
renhongxia113 天前
世界模型作为AGI落地底层底座的作用
人工智能·深度学习·生成对抗网络·自然语言处理·知识图谱·agi
计算机科研狗@OUC13 天前
(cvpr26) AIMDepth: Asymmetric Image-Event Mamba for Monocular Depth Estimation
人工智能·深度学习·计算机视觉
β添砖java13 天前
深度学习(22)网络中的网络NiN
人工智能·深度学习
Kobebryant-Manba13 天前
深度学习时候d2l报错和使用问题
人工智能·深度学习
zhangfeng113313 天前
deepspeed zero3 结合 llamafactory 微调 ,save_only_model: true 导致保存时候出错
开发语言·python·深度学习
大模型最新论文速读13 天前
06-16 · LLM 最新论文速览
论文阅读·人工智能·深度学习·机器学习·自然语言处理