基于深度图的移动端点云分割方法研究
在点云语义分割网络PointNet的基础上,结合移动端本身所具有的轻量、便捷的优势,探索了仅使用移动端智能手机设备同时进行三维数据采集与智能处理的一体化方案,旨在进行前后端的无缝集成。通过对单目深度估计算法与多视几何原理的理解,本文结合谷歌的ARCore开发平台,进行了安卓设备上的深度图获取实验;并通过对模型轻量化方法的研究,改进了PointNet网络,使模型参数量减少为原来的1/5,同时在SUN RGB-D三维数据集上具有73.3%的总体分割精度;最后利用Tensor FlowLite移动端深度学习框架,将Point Net模型成功部署到了华为nova3智能手机上,量化后的tflite模型仅268KB大小,在手机端启用GPU加速后,对单幅场景点云数据的推断速度约为0.7s。
硕士论文方向,有机会将源码整理下,放在github上
附:PointNet语义分割使用说明
源代码:https://github.com/charlesq34/pointnet
1.数据集准备
(1)制作好的.h5文件(训练)
indoor3d_sem_seg_hdf5_data.zip
可用HDFView打开查看,快捷键 h5v
包含24个.h5文件,每个文件包含data、label数据
共23×1000+585=23585行,每行对应一个block(1m x 1m),每个block有4096个点,每个点有9个维度(x,y,z,r,g,b,x’,y’,z’)及1个lable标签
(2)室内解析数据集(测试、可视化)
Stanford3dDataset_v1.2_Aligned_Version.zip
以.txt形式保存数据(x,y,z,r,g,b,l) 7个维度
训练时使用的.h5文件是解析数据集的一个子集,可完全由解析数据集生成
(3)准备自己数据集
输入类似解析数据集的格式 .txt
第一步:
collect_indoor3d_data.py 数据重组,转换为.npy文件
第二步:
gen_indoor3d_h5.py .npy—>.h5文件
2.训练
python train.py --log_dir log --test_area 6 (已经默认设置,可以直接运行train.py)
Area_1 数据用作测试集
p.s.:训练数据集分为6个Area、272个room
indoor3d_sem_seg_hdf5_data/room_filelist.txt 中保存每一行(block)所属的Area、room
训练一轮(epoch),会将所有训练数据全用一次,训练会进行多轮
3.测试
python batch_inference.py (需要在命令行设置相关的几个参数)
还可借助该文件实现查看.npy数据范围(m2) ——> indoor3d_util.room2blocks_wrapper_normalized()方法
测试预测时,并不是每个点都会预测,会先计算坐标范围,划分为若干block,每个block取4096个点进行预测,会预测整数个batchsize(默认1)