2021.5.14实验记录
要用自己录的PCD点云数据做语义分割,发现了数据格式有很大问题。
- pointnet++使用的室内S3DIS数据集,我用的.npy文件作的训练和测试。npy是numpy的一种二进制高效文件保存形式。
- S3DIS——npy类型的数据集每个npy内部有9个维度的数据,分别是x,y,z,x_,y_,z_,r,g,b九个维度数据,中间三个是语义信息真值。
- 我的PCD数据仅有六维——坐标+颜色的数据,而pointnet++测试时需要读取9维的数据.
- 参考了S3DIS的原始npy数据格式,给我的PCD数据写入另外三维的数据(随意,对于测试而言不需要真值),需要以下步骤:
- 将PCD转为txt格式的数据,参考
./data/pcd2txt.py
- 将官方任意一个npy转为txt,参考
./data/npy2txt.py
- 依据官方npy_txt格式给pcd_txt写入中间三维数据(利用numpy数组),参考
./data/txt_change.py
- 将pcd_txt转为npy格式以供测试,参考
./data/txt2npy.py
- 获得测试结果gt.obj(真值,这里是任意信息)和pre.obj(分割的结果,需要!)
- 将pre.obj转为pre.pcd以供八叉树使用,这里使用一个c++程序,参考
./obj2pcd/
,pcl_viewr也有转换obj2pcd工具,但是会丢失rgb信息。 - 最终将获得的无色PCD和有色PCD分别转为八叉树,作一个对比。
- 将PCD转为txt格式的数据,参考
- 自适应分辨率问题,在改代码。上面这些文件后续改到一个程序里面执行。