点云技术相关产学研社区

 找回密码
 立即注册加入PCL中国点云技术相关产学研社区

扫一扫,访问微社区

查看: 10336|回复: 7

基于pointnet网络架构的点云数据准备

[复制链接]
发表于 2017-8-7 13:49:17 | 显示全部楼层 |阅读模式
本帖最后由 tmx 于 2017-8-13 13:13 编辑

一.准备数据(data)
首先将3D数据转化为ply格式的点云数据,随后将ply点云数据通过meshlab的软件来进行下列操作:
一.准备pointnet分割真值
对ply数据的每个零件生成每个零件的点云数据,即seg_data(分割各个零件的点云数据),如零件1点云数据,零件2点云数据,零件3点云数据....
二.对ply数据转化pts格式,从里面均匀采样点云数据得到pointcloud_data(点云的输入数据)
三.设置标签(label)
将pointcloud_data添加标签为从1到N类的标签,形式为[1,2,3,.....N]#也可从0开始,即input_label
随后将seg_data每个零件添加标签,一共m种零件,形式为[1,2,3,....m]#也可从0开始,即seg_label
seg_label标签:
以零件1为研究对象,pointcloud_data的每一行3维数据(x,y,z)与零件1每一行的三维数据(x,y,z)进行对比,如果一样,则该行标签为1,表示是零件1部位,如果不一样,则该行标签为0,表示为不是零件1部位,完成对比后,此标签为零件1 的标签。其他零件操作如此类推。
三.打包数据(h5py)
上列操作进行完毕后,对pointcloud_data进行归一化,并只随机选取2048个点,标签也是一一对应选取2048个点,对文件夹批量读取文件。
对一共三个数据进行打包,分别是pointcloud_data,input_label,seg_label

回复

使用道具 举报

 楼主| 发表于 2017-8-13 11:33:40 | 显示全部楼层

基于pointnet的分割一

本帖最后由 tmx 于 2017-9-11 14:10 编辑

分割分为两种:
一种是物品分割,另一种是室内场景分割。
此物品分割如下:
一共16类物品,对16类物品进行分割,分割测试结果如下:
文件一共2078件
Loading model train_results/trained_models/epoch_190.ckpt
Model restored.
0/2874 ...
100/2874 ...
200/2874 ...
300/2874 ...
400/2874 ...
500/2874 ...
600/2874 ...
700/2874 ...
800/2874 ...
900/2874 ...
1000/2874 ...
1100/2874 ...
1200/2874 ...
1300/2874 ...
1400/2874 ...
1500/2874 ...
1600/2874 ...
1700/2874 ...
1800/2874 ...
1900/2874 ...
2000/2874 ...
2100/2874 ...
2200/2874 ...
2300/2874 ...
2400/2874 ...
2500/2874 ...
2600/2874 ...
2700/2874 ...
2800/2874 ...
Accuracy: 0.937537
IoU: 0.838570
         02691156 Total Number: 341
         02691156 Accuracy: 0.91826139657
         02691156 IoU: 0.837580169051
         02773838 Total Number: 14
         02773838 Accuracy: 0.963507584163
         02773838 IoU: 0.828119482313
         02954340 Total Number: 11
         02954340 Accuracy: 0.919307448647
         02954340 IoU: 0.853965412487
         02958343 Total Number: 158
         02958343 Accuracy: 0.9132548465
         02958343 IoU: 0.763381764859
         03001627 Total Number: 704
         03001627 Accuracy: 0.944722002203
         03001627 IoU: 0.899860728871
         03261776 Total Number: 14
         03261776 Accuracy: 0.900549139295
         03261776 IoU: 0.66989667075
         03467517 Total Number: 159
         03467517 Accuracy: 0.967232374275
         03467517 IoU: 0.913672297256
         03624134 Total Number: 80
         03624134 Accuracy: 0.927090644836
         03624134 IoU: 0.860029792786
         03636649 Total Number: 286
         03636649 Accuracy: 0.899668446788
         03636649 IoU: 0.799116548125
         03642806 Total Number: 83
         03642806 Accuracy: 0.978659756212
         03642806 IoU: 0.954705663474
         03790512 Total Number: 51
         03790512 Accuracy: 0.870008431229
         03790512 IoU: 0.677013472015
         03797390 Total Number: 38
         03797390 Accuracy: 0.992943512766
         03797390 IoU: 0.930893847817
         03948459 Total Number: 44
         03948459 Accuracy: 0.95345063643
         03948459 IoU: 0.811324986545
         04099429 Total Number: 12
         04099429 Accuracy: 0.835387388865
         04099429 IoU: 0.615820884705
         04225987 Total Number: 31
         04225987 Accuracy: 0.944128221081
         04225987 IoU: 0.735141815678
         04379243 Total Number: 848
         04379243 Accuracy: 0.950387846749
         04379243 IoU: 0.804609406669


可视化结果如下:
1.对物品采用MATLAB进行可视化,数据每一行有6个数据,前三个是x,y,z值,后三个是x,y,z与其对应的颜色值,采用plot3函数把x,y,z值和与其对应的颜色值一一plot3输出每一个点,代码如下:http://paste.ubuntu.com/25301960/
可视化结果如下:


2.数据可视化有三个,一种是gt(input可视化即输入数据可视化),一种是pred(output可视化,即经过pointnet模型分割的可视化),一种是diff(gt和pred对比的分割错误,蓝色表示分割正确,红色表示分割错误),如图所示:
gt:

pred:

diff:

室内场景分割如图所示:
室内场景数据准备
首先为了准备训练数据,首先把室内场景内部拆分,把房间分为1m*1m的块,我们对每个块中的每个点类进行训练,每个点由
x,y,z,R,G,B,归一化位置在的向量(在0-1范围内)的一共9个向量,在训练期间,我们随机在每个块中实时取样4096个点,然后测试的是测试所有点,使用k-fold策略来进行训练和测试。













本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册加入PCL中国点云技术相关产学研社区

x
回复 支持 反对

使用道具 举报

发表于 2017-9-7 09:29:02 | 显示全部楼层
請問分割時的運算時間需要多少?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-9-11 14:51:14 | 显示全部楼层
本帖最后由 tmx 于 2017-9-11 15:21 编辑

http://buildingparser.stanford.edu/dataset.html   此链接可以结合一起看,有数据集统计,样品数据,以及收集和处理三维和二维的方法。
数据准备:
物品种类数据准备:
首先将3D数据转化为ply格式的点云数据,数据格式为x,y,z的三维坐标,准备n个类物品,并准备各个物品各个零件的点云数据,文件数据样例:


室内场景准备:
把室内场景内部拆分,把房间分为1m*1m的块,数据格式为三个第一列对应于点的三维坐标,最后三个对应于其RGB颜色值(依次为:X,Y,Z,R,G,B),划分n个建筑物,分别为Area1,Area2,Area3........
每个区域是一个场景,每个场景有常见的会议室,个人办公室,礼堂,洗手间,露天场所,大厅,楼梯和走廊,天花板,地板,墙,梁,柱,窗和门,桌椅,沙发,书柜和板等等,每个区域(Area)在建筑风格和外观上都展现出不同的属性。文件名处理成txt格式。文件数据样例如下:


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册加入PCL中国点云技术相关产学研社区

x
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-9-11 15:11:39 | 显示全部楼层
koshyang 发表于 2017-9-7 09:29
請問分割時的運算時間需要多少?

你指的是单个物品分割的time还是室内场景的室内分割?
回复 支持 反对

使用道具 举报

发表于 2017-9-12 15:32:18 | 显示全部楼层
單個物品的分割,另外請問一下,你有重新跑過這篇論文的code嗎? 他的code有重現性嗎?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-9-19 19:36:33 | 显示全部楼层
koshyang 发表于 2017-9-12 15:32
單個物品的分割,另外請問一下,你有重新跑過這篇論文的code嗎? 他的code有重現性嗎? ...

有实现过这篇论文的code,他的code是可行的
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-11-14 20:25:28 | 显示全部楼层
本帖最后由 tmx 于 2018-4-26 10:58 编辑

测试阶段:
1.数据准备:
室内场景以会议室为参考对象,有桌子,椅子,地板,天花板,灯,书柜,墙,玻璃窗户
pointnet中的室内场景数据有:
天花板,地板,墙,灯,圆柱,窗户,门,桌子,椅子,沙发,书柜,黑板
因此所准备的数据是符合pointnet的数据要求
如图所示:

2.裁剪室内场景每个零件(meshlab裁剪)

第一个箭头和第二个箭头分别是曲线裁剪和方块裁剪,交互一起裁剪,把每个零件的点都覆盖住,然后点files -> selection ->
Inver selection ,随后去掉√invert faces,点apply all,随后在project界面右键点move selected vertives to another layer,可以得到被裁剪后的零件数据和除这个零件外的场景数据。裁剪各个零件的数据如图所示:
      
   

以上就是这些,剩下的跟这些一样,文件太多,就不一一上传了。
然后裁剪完毕,保存为ply数据,随后可把ply数据导进cloudcompare,保存为txt数据,去掉一些头文件和除xyzRGB的其他的值,整个txt数据只有XYZRGB,每一行是xyzRGB。
3.数据对应的标签:
                 天花板:        [0,255,0], #绿色
                 地板:        [0,0,255], #蓝色
                 墙:        [0,255,255],#青蓝
                 灯:        [255,255,0],#黄色
                 圆柱:      [255,0,255],#粉红色
                 窗户:      [100,100,255],#深蓝
                 门:        [200,200,100],#脏黄
                 桌子:       [170,120,200],#紫色
                 椅子:       [255,0,0], #红色
                 沙发:        [200,100,100],#红色
                 书柜:    [10,200,100],#深绿
                 黑板:       [200,200,200],#灰色
                 不在这些类的:     [50,50,50]} #黑色
4.将这些类的数据和颜色标签保存为npy格式,并将数据进行归一化,并把颜色和类放在一个字典里。
归一化:
xyz_min = np.amin(data_label, axis=0)[0:3]
data_label[:, 0:3] -= xyz_min
字典:
'1':天花板
'2':地板
'3': 桌子
...........
5.测试输入:python batch_inference.py --model_path log6/model.ckpt --dump_dir log6/dump --output_filelist log6/output_filelist.txt --room_data_filelist meta/area6_data_label.txt --visu
model_path:作者已经训练好的模型,log6是第6个类型的模型,如果想用整个模型,直接调用log即可,dump是将输出的文件保存在当前dump目录,output_filelist是输出文件目录的路径  meta是npy格式数据的目录
6.测试结果:
左一是原始数据,右一是pointnet分割后的结果
   

eval mean loss: 14.068614
eval accuracy: 0.161790
all room eval accuracy: 0.161790

可以看出分割效果并不是很好,天花板和灯虽然能够分割,但是分割的并不完全,桌子和椅子也没有很准确的分开,其他也是。
7.总结:
1.pointnet作者提到是初试版本,可能不具备泛化性,pointnet++并没有测试,后续会更新pointnet++的测试结果和部署。
要么重新训练,将作者的权重初始化,并用在自己的数据重新训练,并根据自己的训练数据改变FC层的参数。
2.迁移学习,目前在学习,不知效果如何,后续会更新,未完待续。
3.数据问题,可能是数据不是真值的缘故,导致效果不是很好,数据的问题本人还没有彻底弄懂,打算下一步工作仔细看论文,并做总结,后续会更新。
综合所述:本人所作所学习的还有很多理解问题,之后会补上更新一些问题

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册加入PCL中国点云技术相关产学研社区

x
回复 支持 反对

使用道具 举报

本版积分规则

QQ|小黑屋|点云技术相关产学研社区 ( 陕ICP备13001629号 )

GMT+8, 2024-4-28 09:31 , Processed in 2.565154 second(s), 17 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表