Pointnet语义分割任务S3DIS数据集上的注意点
前言
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. Gaofen Image Dataset(GID) 2. ISPRS Test Project on Urban Classification and 3D Buildi ...
- 语义分割论文学习记录上
文章目录 论文学习 AlexNet 2012 Inception v1 2014 VGG 2015 FCN 2015 ResNet 2015 U-Net 2015 Inception v3 2015 ...
- pointnet语义分割_训练并预测自己的数据
这几天想用深度学习做一下点云的分割试验,网上搜了一下相关标题的blog有很多,但大部分只是简单的介绍文章内容,说明具体操作流程的干货并不多.在缺乏相关资料和帮助的情况下,本人大致搞清楚了pointne ...
- win10+tensorflow+cuda+cudnn,实现deeplabv3语义分割自己的数据集
** 参考: ** 1.使用 deeplabv3+ 训练自己的数据集经验总结 2.window环境下进行deeplab_tensorflow实验之第一阶段 3.window环境下进行deeplab_t ...
- 【天池学习赛 语义分割】自定义数据集时报错处理
项目场景: 在自定义数据集的MMSegmentation中,运行一个模型 是一个天池的练习赛:地表建筑物识别 问题描述: 对于数据集,在MMSeg中并没有和他对应的数据集格式,我就自己写了一个数据集, ...
- 语义分割-建筑物提取数据集
建筑物提取数据集 深度学习下,使用Keras进行建筑物提取.参考其他博主的文章,选择查看了一个数据集.分享一下,也方便自己以后寻找. 1.WHU 建筑物数据集 2.Inria数据集 3.Massach ...
- 工程(二)——DeeplabV3+语义分割训练自制数据集
目录 1.配置环境 1.1 利用conda新建一个环境并激活 1.2 安装pytorch 1.3 更新bashrc环境 2.安装DeeplabV3 2.1 克隆代码 2.2 下载数据集和预训练模型 3 ...
- 【三维语义分割】PointNet详解(一)
本节主要介绍PointNet语义分割,其中主干网络和代码环境等PointNet详细介绍请参考三维目标检测 - PointNet详解(一)_Coding的叶子的博客-CSDN博客,这里不再进行重复介绍. ...
- 遥感影像语义分割数据集
遥感图像语义分割数据集 文章目录 遥感图像语义分割数据集 1.建筑 1.1 Aerial Image Segmentation Dataset 1.2 INRIA aerial image datas ...
最新文章
- 搭建多语言外文网站需要注意三个细节问题
- 判断某个点是否在不规则图形内
- android桌面小组件开发_快使用Scriptable自己开发一个iPhone小组件吧
- js 获取日期并格式化
- verilog入门笔记
- jquery.MultiFile 实现自动删掉上传列表
- 使用Spring Boot Actuator、Jolokia和Grafana实现准实时监控
- 一键安装 redmine on windows 和发邮件设置
- shell脚本一键安装jdk
- Vivado封装自定义IP
- IR2130与MOSFET驱动电路分析
- 电子产品EMC不合格,如何整改?
- window中cmd复制文件命令
- zebra 斑马打印机 打印图片
- python随机生成电话号码
- 2021-2027全球与中国B2C视频直播平台市场现状及未来发展趋势
- 第三方支付机构是什么意思_什么是支付牌照 在哪查
- 最清晰的进制转换讲解 - java实现
- 关于C语言中表达式运算顺序(优先级、结合性、副作用、序列点)的讨论以及c语言未定义行为
- c语言如何输入一篇英文文章,(急急,救命啊!c语言)输入一篇英语文章,求输出这篇文章的所有英语单词的个数。...
热门文章
- 常说的“四层”和“七层”是什么
- 怎么写安卓手机脚本_干货!最火短视频脚本 分镜头教程合集40份
- 汉字一、二级字库的汉字与unicode编码(十六进制)对照表,按照unicode的顺序排列 1
- 阿里云个人站点基于nginx代理搭建https协议支持
- Python 数据可视化基础教程
- 如何提取iOS App素材
- NVMe-MI协议解读
- spss 通径分析_使用SPSS线性回归实现通径分析的方法-学习资料.pdf
- 红黑树详解,对插入旋转独到理解
- tensorflow2.0实现DeepFM