本帖最后由 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.数据问题,可能是数据不是真值的缘故,导致效果不是很好,数据的问题本人还没有彻底弄懂,打算下一步工作仔细看论文,并做总结,后续会更新。
综合所述:本人所作所学习的还有很多理解问题,之后会补上更新一些问题
|