基于深度学习的3D点云数据处理——开上之作PointNet模型【Pytorch版】
点云数据是一种三维坐标的数据集合,广泛存在于激光扫描、自动驾驶、增强现实等应用领域,其中包含丰富的目标轮廓信息,基于深度学习的3D点云数据处理已成为计算机视觉的重要组成部分。PointNet开创性的提出了一种新型深度神经网络结构,解决了点云数据的无序性、非结构性和置换不变性,能够应用在点云分类、点云分割和场景分割的视觉任务中。本项目使用Pytorch搭建模型训练环境,在ModelNet40训练集上的分类精度为91.9%。
- Classification Network 和 Segmentation Network 两个部分组成,分别应用于点云分类和点云分割任务。
- 输入维度
n×3
,输出维度n×k
或n×m
,其中n
为点云个数,m
为分类类别数,k
为分割类别数。 - T-Net空间旋转变换,mlp多层感知机,max pool全局池化层,global feature特征融合。
- 左图为三维模型类别词云:右图为chair三维模型可视化。
- 数据集下载地址:ModelNet40
- 类型名称列表:airplane,bathtub,bed,bench,bookshelf,bottle,bowl,car,chair,cone,cup,curtain,desk,door,dresser,flower_pot,glass_box,guitar,keyboard,lamp,laptop,mantel,monitor,night_stand,person,piano,plant,radio,range_hood,sink,sofa,stairs,stool,table,tent,toilet,tv_stand,vase,wardrobe,xbox。
./data/modelnet40_normal_resampled/
|--airplane
|--airplane_0001.txt
|--airplane_0002.txt
|--……
|--bathtub
|--bathtub_0001.txt
|--bathtub_0002.txt
|--……
|--……
|--filelist.txt #文件目录
|--modelnet10_shape_name.txt # modelnet10类别名
|--modelnet10_train.txt # modelnet10训练集
|--modelnet10_test.txt # modelnet10测试集
|--modelnet40_shape_name.txt # modelnet40类别名
|--modelnet40_train.txt # modelnet40训练集
|--modelnet40_test.txt # modelnet40测试集
数据增强扩大训练样本数量,提升模型泛化能力,有效避免过拟合。选择合适的数据增强策略能提升模型精度,本项目提供几种常用点云数据增强函数,保存在provider.py
文件中。
- normalize_data:归一化
- rotate_point_cloud:空间坐标旋转,α、β、γ轴
- jitter_pointnet_cloud:添加高斯噪声
- shift_pointnet_cloud:空间坐标平移,x、y、z轴
- random_scale_point_cloud:随机缩放
- random_point_dropout:随机正则化
- CPU:AMD RX3600 6core 3.60GHz 16G
- GPU:NIVIDIA GTX 1650 4G
- Windons10
- Python3.7
- pytorch1.7.1
- Cuda10.1
- cuDNN7.6.5
pip install -r requirements.txt
数据集下载路径ModelNet40,解压后存放在data/modelnet40_normal_resampled
路径下。
python train.py
python test.py
模型训练结果保存地址
model | accuracy |
---|---|
pointnet(official) | 89.2% |
pointnet(ours39.8MB) | 91.9% |
PointNet作为基于深度学习处理点云数据的开山之作,提供了一种全新的深度神经网络结构,具有开创新时代的意义。本项目使用Pytorch搭建模型训练环境,模型精度可以达到论文给出的89.2%,开源贡献者们可以尝试使用数据增强策略进一步提升精度。由于PointNet自身存在一定的局限性,后续的研究者相继对其进行模型改进,主要方式集中在局部特征融合、卷积核算子、注意力机制等方面。