3D点云目标检测算法汇总

作者:Tom Hardy
Date:2020-2-12
来源:汇总|3D点云目标检测算法

前言

前面总结了几种基于激光雷达点云数据的3D目标检测算法,还有一些算法不再单独列出,这里做个简单总结来分享下!

基于激光雷达点云的3D目标检测算法

1、End-to-End Multi-View Fusion for 3D Object Detection in Lidar Point Clouds(Waymo和Google联合提出)

主要提出了一种新的端到端多视图融合(MVF)算法,该算法能有效地学习利用透视图和点云信息。具体地说,论文介绍了动态体素化,它与现有的体素化方法相比有四个优点:
1、 消除了预先分配具有固定大小的张量需要;
2、 克服了由于随机点/体素丢失引起的信息损失;
3、 产生确定的体素嵌入和更稳定的检测结果;
4、 建立点和体素之间的双向关系,这为跨视点特征融合奠定了基础;
通过采用动态体素化,提出的特征融合体系结构可以使每个点学习融合来自不同视图的信息。MVF对点进行操作,可以自然地从激光雷达点云扩展到其他方法。在最新发布的Waymo开放数据集和KITTI数据集上广泛评估了MVF模型,并证明它比可比较的单视图点柱baseline显著提高了检测精度。
在这里插入图片描述

  • 13
    点赞
  • 182
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
PointNet++是一种用于点云识别的神经网络算法,它包含基于点云数据的多个层次,可以适应不同大小和分辨率的点云。以下是PointNet++的一个简单实现示例。 ``` import tensorflow as tf from tensorflow.keras import layers def pointnet2_model(num_classes, input_shape): inputs = layers.Input(shape=input_shape) # Pointnet++ MSG x = layers.Conv1D(64, 1, activation='relu')(inputs) x = layers.BatchNormalization()(x) x = layers.Conv1D(64, 1, activation='relu')(x) x = layers.BatchNormalization()(x) # Set Abstraction Block 1 x0 = x x = layers.Conv1D(64, 1, activation='relu')(x) x = layers.BatchNormalization()(x) x = layers.Conv1D(64, 1, activation='relu')(x) x = layers.BatchNormalization()(x) x1 = layers.Conv1D(64, 1)(x) x = layers.Conv1D(128, 1, activation='relu')(x) x = layers.BatchNormalization()(x) x = layers.Conv1D(128, 1, activation='relu')(x) x = layers.BatchNormalization()(x) x2 = layers.Conv1D(128, 1)(x) x = layers.Conv1D(256, 1, activation='relu')(x) x = layers.BatchNormalization()(x) x = layers.Conv1D(256, 1, activation='relu')(x) x = layers.BatchNormalization()(x) x3 = layers.Conv1D(256, 1)(x) # Set Abstraction Block 2 x = layers.Concatenate()([x1, x2, x3]) x = layers.Conv1D(256, 1, activation='relu')(x) x = layers.BatchNormalization()(x) x = layers.Conv1D(512, 1, activation='relu')(x) x = layers.BatchNormalization()(x) x = layers.Conv1D(1024, 1, activation='relu')(x) x = layers.BatchNormalization()(x) x4 = layers.Conv1D(1024, 1)(x) # Global Feature Extraction x = layers.MaxPooling1D(pool_size=input_shape[0])(x4) x = layers.Dense(512, activation='relu')(x) x = layers.BatchNormalization()(x) x = layers.Dense(256, activation='relu')(x) x = layers.BatchNormalization()(x) # Classification x = layers.Flatten()(x) outputs = layers.Dense(num_classes, activation='softmax')(x) # Model Definition model = tf.keras.Model(inputs=inputs, outputs=outputs, name='pointnet2') return model ``` 在这个示例中,我们定义了一个名为`pointnet2_model`的函数,该函数接受两个参数:`num_classes`是输出类别的数量,`input_shape`是输入点云数据的形状。函数返回一个Keras模型对象。 该模型包含两个Set Abstraction Block和一个Global Feature Extraction层,以及一个分类器层。每个Set Abstraction Block包含一个MSG层和三个PointNet++层,用于对点云数据进行多个分辨率的特征提取。Global Feature Extraction层将所有点的特征向量池化为一个全局特征向量,用于分类器。 在训练过程中,我们可以使用类似于其他神经网络模型的训练方法,如随机梯度下降(SGD)或自适应矩估计(Adam)。 ``` model = pointnet2_model(num_classes=10, input_shape=(1024, 3)) model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy']) model.fit(x_train, y_train, batch_size=32, epochs=100, validation_data=(x_val, y_val)) ``` 在这个示例中,我们使用了Adam优化器和交叉熵损失函数进行训练。我们还将训练数据分为批次,以便更有效地训练模型,并记录模型的准确性。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值