前言

Pointnet的网络结构和源码解释,已在之前写了次总结,本次主要针对论文中的数据集以.h5为TensorFlow的输入格式进行解释,记录如何制作H5文件,以提供给TensorFlow,PyTorch框架中进行训练。
首先,Pointnet一文中针对3个不同的任务使用到了三个数据集,分别为:

  • 点云分类(3D Object Classification)——ModelNet40,下载命令在provider.py中,运行python train.py后便会自动下载(416MB)到**data/**文件夹下,每个点云包含从形状表面均匀采样的2048个点。每个云均值为零,并归一到单位球面。data/modelnet40_ply_hdf5_2048在h5文件中还指定文本ID的文本文件。
  • 点云部分分割(3D Object Part Segmentation)——ShapeNetPart ,下载命令在part_seg/download_data.sh
    浏览器点击下载:
    ShapeNet原始点云数据(约1.08GB)
    ShapeNet-制作好的hdf5文件(约346MB)
    或者直接在终端手动下载数据集:

    cd part_seg
    sh download_data.sh
    

    执行脚本后将下载上面对应的两个数据集,脚本会自动解压到项目目录下。接下来直接运行train.py和test.py进行训练和测试即可。

  • 语义分割(Semantic Segmentation in Scenes)—— Stanford Large-Scale 3D Indoor Spaces Dataset
    对S3DIS数据集进行简单说明:在6个区域的271个房间,使用Matterport相机(结合3个不同间距的结构光传感器),扫描后生成重建3D纹理网格,RGB-D图像等数据,并通过对网格进行采样来制作点云。对点云中的每个点都加上了1个语义标签(例如椅子,桌子,地板,墙等共计13个对象)。

    用于训练的数据会按照房间来划分点集,将房间的点云数据划分为1m×1m1m×1m1m×1m的块,然后再对每个块预测其中每个点的语义标签。每个点由一个9-dim向量表示,分别为:X, Y, Z, R, G, B, X`,Y`,Z` ——标准化后的每个点相对于所在房间的位置坐标( 值为0 - 1)。在训练时,从每个块中随机采样4096个点,使用K折交叉验证(github中是6折,论文中是3折)
  • k-fold交叉验证:6-fold:训练集5个区域,测试集1个区域,3-fold:训练集4个区域,测试集2个区域,防止过拟合的常用手段。

注意: 这里有一个有意思的问题,对于分割网格进行训练,如果采用这种切分块式样的预处理方式作为输入,会影响到最后的结果,比如一张桌面出现两种不同的错误分割,这一点在RandLA-Net(2019)一文中进行了说明。因此那篇文章说道在做大场景点云分割的时候不能直接使用pointnnet这种方式,因为网络难以有效地学习到一个物体的整体几何结构,也是大场景点云分割的改进点。

数据集准备

1.如果没有最后的可视化要求,即只评价模型的分割准确度,不进行更多测试,那可以下载制作好的hdf5格式文件,不会在训练后生成.obj文件:
在浏览器中点击下载作者准备好的S3DIS-hdf5文件(大约1.6G)
或者在终端运行:

 cd sem_segsh download_data.sh

脚本会自动解压得到一个indoor3d_sem_seg_hdf5_data 文件夹,其中包含ply_data_all_0.h5~ply_data_all_23.h5 共24个.h5结尾的数据文件,每个文件都包含data和 label数据。除最后一个为585行数据以外,这24个文件共有23×1000+585=23585行,每行对应一个切分为1m×1m1m×1m1m×1m的Block,表示4096个点,每个点对应9个维度。
all_files.txt 中保存24个数据文件名,room_filelist.txt中数据为23585 行,对应每行的Block所对应的采集area和room。

2.如果想要进行测试和可视化,需要下载3D室内解析数据集(S3DIS Dataset数据集介绍)进行模型的测试和可视化工作。作者实验用的是Stanford3dDataset_v1.2_Aligned_Version数据集,填写信息进行下载下载链接。第一个是谷歌云平台存储的地址,第二个是一个共享文件形式,如果可以用谷歌云的话可能会方便很多。

在.txt文件中的保存的点云数据(XYZ,RGB),解压后文件夹大小为16.8GB
注意: 在执行 collect_indoor3d_data.py应该会出现类似于下面的错误:

D:\pointnet\data\Stanford3dDataset_v1.2_Aligned_Version\Area_5/hallway_6/Annotations
D:\pointnet\data\Stanford3dDataset_v1.2_Aligned_Version\Area_5/hallway_6/Annotations ERROR!!

作者提示Area_5/hallway_6中多了一个额外的字符,不符合编码规范,需要手动删除。经查找具体位置为:Stanford3dDataset_v1.2_Aligned_Version\Area_5\hallway_6\Annotations\ceiling_1.txt中的第180389行数字185后。windows下建议使用EmEditor打开文件,会自动跳转到该行,数字185后面有一个类似空格的字符,实际上不是空格,删掉然后重新打一个空格就可以了。linux下直接使用gedit或vim跳转到该行修改即可。保存后再次使用编辑器尝试打开该文件,不提示出现问题说明已经修改完成。
对应修改位置如下:

如果要将数据转换为模型所需的hdf5格式,首先需要在Python中安装h5py,如果是Anaconda环境应该已默认安装,通过import h5py测试检查是否安装,没有安装的话可以使用下面命令进行快速安装:

sudo apt-get install libhdf5-dev # 安装h5py开发库,必要!
sudo pip install h5py

接下来准备自己的HDF5数据,下载好数据集后,分别运行该sem_seg/下的两个python脚本来生成hdf5数据文件。

  • python collect_indoor3d_data.py用于数据的重组,转换为.npy格式文件,比如Area_1_hallway_1.npy(.npy为Numpy专用的二进制格式)。
  • python gen_indoor3d_h5.py 将.npy文件批量转为HDF5文件。

训练:

使用准备好的HDF5数据文件(处理好的或自己转换的数据),即可开始模型训练,模型默认使用Vanilla PointNet进行训练,指定区域1用作测试集,作者给出的是区域6作测试集:

python train.py --log_dir log1 --test_area 1

得到在log1文件夹下关于训练模型和日志model.ckpt文件。

测试:

训练结束后,可以进行测试,需要对于测试集数据进行简单处理:

  • batch_inference.py 对测试集中的房间进行细分。

作者实验中使用6折交叉训练来训练获得6个模型。比如:对于model1,将区域2-6用作训练集,区域1用作测试集;对于模型2,区域1,3-6被用作训练集,区域2被用作测试集以此类推,请注意,论文使用了不同的3折交叉训练。
加入我们想使用model1进行测试,并获得一个obj文件用于可视化,那么测试集为区域1,可以运行如下代码,作者README中给出的是model6作为测试,即以区域6位测试集测试工作和可视化:

python batch_inference.py --model_path log1/model.ckpt --dump_dir log1/dump --output_filelist log1/output_filelist.txt --room_data_filelist meta/area1_data_label.txt --visu

测试执行完毕后。将会在log1/dump下创建一些.OBJ .TXT文件,可以使用CloudCompare,MeshLab等软件来进行区域1—会议室1的预测结果的可视化。

分割效果评价

最后是评估整体分割的准确性,作者依次评估了6个模型,并用于eval_iou_accuracy.py产生点的分类准确性和IoU,结果最终除以13,得到一个分割的平均交并比mIOU。
参考论文中作者的结果:

表3为S3DIS数据集上场景分割任务的实验结果 ,表4为该数据集上的3D目标检测任务结果。

Pointnet语义分割任务S3DIS数据集上的注意点相关推荐

  1. 遥感图像语义分割各公开数据集

    遥感图像语义分割数据集 1. Gaofen Image Dataset(GID) 2. ISPRS Test Project on Urban Classification and 3D Buildi ...

  2. 语义分割论文学习记录上

    文章目录 论文学习 AlexNet 2012 Inception v1 2014 VGG 2015 FCN 2015 ResNet 2015 U-Net 2015 Inception v3 2015 ...

  3. pointnet语义分割_训练并预测自己的数据

    这几天想用深度学习做一下点云的分割试验,网上搜了一下相关标题的blog有很多,但大部分只是简单的介绍文章内容,说明具体操作流程的干货并不多.在缺乏相关资料和帮助的情况下,本人大致搞清楚了pointne ...

  4. win10+tensorflow+cuda+cudnn,实现deeplabv3语义分割自己的数据集

    ** 参考: ** 1.使用 deeplabv3+ 训练自己的数据集经验总结 2.window环境下进行deeplab_tensorflow实验之第一阶段 3.window环境下进行deeplab_t ...

  5. 【天池学习赛 语义分割】自定义数据集时报错处理

    项目场景: 在自定义数据集的MMSegmentation中,运行一个模型 是一个天池的练习赛:地表建筑物识别 问题描述: 对于数据集,在MMSeg中并没有和他对应的数据集格式,我就自己写了一个数据集, ...

  6. 语义分割-建筑物提取数据集

    建筑物提取数据集 深度学习下,使用Keras进行建筑物提取.参考其他博主的文章,选择查看了一个数据集.分享一下,也方便自己以后寻找. 1.WHU 建筑物数据集 2.Inria数据集 3.Massach ...

  7. 工程(二)——DeeplabV3+语义分割训练自制数据集

    目录 1.配置环境 1.1 利用conda新建一个环境并激活 1.2 安装pytorch 1.3 更新bashrc环境 2.安装DeeplabV3 2.1 克隆代码 2.2 下载数据集和预训练模型 3 ...

  8. 【三维语义分割】PointNet详解(一)

    本节主要介绍PointNet语义分割,其中主干网络和代码环境等PointNet详细介绍请参考三维目标检测 - PointNet详解(一)_Coding的叶子的博客-CSDN博客,这里不再进行重复介绍. ...

  9. 遥感影像语义分割数据集

    遥感图像语义分割数据集 文章目录 遥感图像语义分割数据集 1.建筑 1.1 Aerial Image Segmentation Dataset 1.2 INRIA aerial image datas ...

最新文章

  1. 搭建多语言外文网站需要注意三个细节问题
  2. 判断某个点是否在不规则图形内
  3. android桌面小组件开发_快使用Scriptable自己开发一个iPhone小组件吧
  4. js 获取日期并格式化
  5. verilog入门笔记
  6. jquery.MultiFile 实现自动删掉上传列表
  7. 使用Spring Boot Actuator、Jolokia和Grafana实现准实时监控
  8. 一键安装 redmine on windows 和发邮件设置
  9. shell脚本一键安装jdk
  10. Vivado封装自定义IP
  11. IR2130与MOSFET驱动电路分析
  12. 电子产品EMC不合格,如何整改?
  13. window中cmd复制文件命令
  14. zebra 斑马打印机 打印图片
  15. python随机生成电话号码
  16. 2021-2027全球与中国B2C视频直播平台市场现状及未来发展趋势
  17. 第三方支付机构是什么意思_什么是支付牌照 在哪查
  18. 最清晰的进制转换讲解 - java实现
  19. 关于C语言中表达式运算顺序(优先级、结合性、副作用、序列点)的讨论以及c语言未定义行为
  20. c语言如何输入一篇英文文章,(急急,救命啊!c语言)输入一篇英语文章,求输出这篇文章的所有英语单词的个数。...

热门文章

  1. 常说的“四层”和“七层”是什么
  2. 怎么写安卓手机脚本_干货!最火短视频脚本 分镜头教程合集40份
  3. 汉字一、二级字库的汉字与unicode编码(十六进制)对照表,按照unicode的顺序排列 1
  4. 阿里云个人站点基于nginx代理搭建https协议支持
  5. Python 数据可视化基础教程
  6. 如何提取iOS App素材
  7. NVMe-MI协议解读
  8. spss 通径分析_使用SPSS线性回归实现通径分析的方法-学习资料.pdf
  9. 红黑树详解,对插入旋转独到理解
  10. tensorflow2.0实现DeepFM