PointNet学习+训练自己的模型并实际使用测试成功

 

PointNET 点云深度学习

https://github.com/charlesq34/pointnet

  • 环境

conda create --name pointnet python=3.6 
activate pointnet 
conda install tensorflow-gpu=1.12 
conda install matplotlib 
conda install plyfile 
conda install pillow

conda create --name pointnet2 python=2.7 (windows不支持tensorflow-gpu=1.2) 
activate pointnet2 
conda install tensorflow-gpu=1.2(没有)
  • 数据

  • modelnet40

点云数据 http://modelnet.cs.princeton.edu/

hdf5数据 https://shapenet.cs.stanford.edu/media/modelnet40_ply_hdf5_2048.zip

  • 局部数据ShapeNetPart

点云数据 http://web.stanford.edu/~ericyi/project_page/part_annotation/index.html

https://shapenet.cs.stanford.edu/ericyi/shapenetcore_partanno_v0.zip

hdf5数据 https://shapenet.cs.stanford.edu/media/shapenet_part_seg_hdf5_data.zip

  • 室内3D语义分割

hdf5数据 https://shapenet.cs.stanford.edu/media/indoor3d_sem_seg_hdf5_data.zip

点云数据 https://blog.csdn.net/zhulf0804/article/details/108609629

  • 运行

off点云数据---------->>>>>>>>hdf5文件---------->>>>>>>>训练---------->>>>>>>>model

//pointnet-master目录下 识别 modelnet40 

python train.py 

python train.py -h 

tensorboard --logdir log 

python evaluate.py --visu

(part_seg) Part Segmentation

//pointnet-master/part_seg目录下 分割 ShapeNetPart

python train.py

python test.py

(sem_seg) Semantic Segmentation

数据---------->>>>>>>>修改indoor3d_util---------->>>>>>>>预处理collect_indoor3d_data,生成npy文件---------->>>>>>>>gen_indoor3d_h5---------->>>>>>>>hdf5文件

点云数据:23585个场景,每个场景4096个点,每个点9维向量(X,Y,Z,R,G,B,所在房间的归一化位置)

标签数据:23585个场景,每个场景4096个点,每个点对应不同的标签(桌子、椅子、沙发、书架和木板等3个语义标签)

训练:hdf5文件---------->>>>>>>>train.py---------->>>>>>>>模型

  1. 增加3个del代码,不然内存会爆(内存足够大可以忽略,我16G反正爆了)
  2. 可以适当修改num_point的大小,但是注意train_one_epoch、eval_one_epoch函数里面也要改

  3. 可以tqdm.tqdm查看进度,但是记得安装conda install tqdm、引用import tqdm

预测:数据---------->>>>>>>>修改indoor3d_util---------->>>>>>>>预处理collect_indoor3d_data,生成npy文件---------->>>>>>>>预测batch_inference

python batch_inference.py --model_path log6/model.ckpt --dump_dir log6/dump --o

有个地方需要修改,不然会报错

现在对含背景的物体进行检测

背景
model

如图,对模型进行训练,基本过程(文件内地址修改不做说明了):

  1. 点云ply文件
  2. 点云txt文件
  3. collect_indoor3d_data.py转成npy文件(如果自己的点云数据是xyz信息,没有rgb信息,在indoor3d_util的collect_point_label函数中添加颜色)
            if points.shape[1] == 3:  # 没有颜色
                color = np.zeros((points.shape[0], 3))
                color[:, 1] = 255
            points_list.append(np.concatenate([points, color, labels], 1))  # Nx7

     

  4. 得到npy文件,则就可以开始训练了(我这边就用了一个样本进行训练,所以很快4-5步就够了)

  5. 开始检测:将含背景的点云文件也放进去,生成npy文件,颜色任意就行

  6. 修改batch_inference文件的eval_one_epoch,这边用到预测得分,舍去评分小于0(不一定是0,可以自己设定阈值)的点云:

            loss_val, pred_val, pred_softmax_val = sess.run([ops['loss'], ops['pred'], ops['pred_softmax']],
                                                            feed_dict=feed_dict)  # 计算
                    if pred_val[0, i, pred[i]] > 0:  # 如果预测值大于0 则有分类
                        color = a_my_util.g_label2color[pred[i]]  # 预测标签对应的颜色分类
                    else:
                        color = [255, 255, 255]  # 如果预测值小于0 则啥也不是,白色
                    color_gt = a_my_util.g_label2color[current_label[start_idx + b, i]]  # 实际标签对应的颜色分类
                    if pred_val[0][i][pred[i]] > 0:  # 如果预测值大于0 则有分类
                        fout_data_label.write('%f %f %f %d %d %d %f %d\n' % (
                            pts[i, 6], pts[i, 7], pts[i, 8], pts[i, 3], pts[i, 4], pts[i, 5],
                            pred_softmax_val[b, i, pred[i]],
                            pred[i]))  # 预测标签,(pred_val的第几个批次、第几个点、的标签概率),标签
                    else:  # 如果预测值小于0 则啥也不是,白色
                        fout_data_label.write('%f %f %f %d %d %d %f %d\n' % (
                            pts[i, 6], pts[i, 7], pts[i, 8], pts[i, 3], pts[i, 4], pts[i, 5],
                            pred_val[0, i, pred[i]],
                            -1))  # 预测标签,(pred_val的第几个批次、第几个点、的标签概率),标签

     

  7. 运行测试,效果图(绿色部分则问检测到的结果)点云可视化软件:MeshLab、CloudCompare

准确率:79.22%
准确率:69.84%

 

  • 13
    点赞
  • 189
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 34
    评论
学习PointNet++,您可以按照以下步骤进行: 1. 学习基础知识:了解点云数据的基本概念和处理方法,以及深度学习的基本原理和常用工具(如PyTorch或TensorFlow)的使用方法。 2. 学习Point:先理解PointNet的原理和网络架构,包括如何将点云映射到高维特征空间、如何利用多层感知机提取特征、如何实现点云的不变性等。 3. 学习PointNet++:深入学习PointNet++的改进之处,包括沙漏形式的层级聚合网络、特征空间的上下文信息等。了解PointNet++的网络结构和工作原理。 4. 获取数据集:获取适合点云变化检测任务的数据集。可以从公开的数据集中获取,或者根据实际需求自行构建。 5. 数据预处理:对点云数据进行预处理,包括数据清洗、归一化、特征提取等。确保数据适合输入到PointNet++网络中进行训练测试。 6. 搭建网络:使用PyTorch或TensorFlow深度学习框架,根据PointNet++的网络结构搭建模型。定义网络的输入、输出和损失函数等。 7. 网络训练使用训练集对PointNet++网络进行训练。通过反向传播和优化算法(如随机梯度下降)来更新网络参数,不断优化模型。 8. 网络评估:使用测试集对已训练好的PointNet++网络进行评估。计算模型在点云变化检测任务上的准确率、召回率、F1分数等指标,评估模型的性能。 9. 模型调优:根据评估结果,对模型进行调优,如调整网络结构、改变超参数、增加数据增强等方法,以提升模型性能。 10. 应用和扩展:将训练好的PointNet++模型应用于实际点云变化检测任务中,并根据需要进行扩展和改进。 通过以上步骤,您可以逐步学习和掌握PointNet++,并应用于点云变化检测任务中。同时,不断实践和探索,深入理解算法原理和实际应用,可以进一步提升您的技能水平。
评论 34
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大臉喵愛吃魚

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值