构建好图结构后,进行每个epoch的训练和测试,在每5个倍数epoch进行一次测试
加载scannet_train.pickle文件
- 1201个场景数据集。
- 假定每个场景有n个点云,文件中有1201*n个点的标签。
- 21个类别的初始权值,初始权值计算的依据为某一类点云标签数量占所有点云的比例。
coormax为场景中的右上角A点,往里采样,大小为1.51.53,smpmin是采样体素的A点的对角线点B点坐标。
实际体素的尺寸大小,对角线点相减,体素大小1.5 * 1.5 * h
从当前场景点集中随机取一点作为中心点
以当前点为体素中心,采样一个1.5 * 1.5 * h大小的体素,把此体素记为V1,h为点集包围盒的高度。
把体素V1的大小扩大0.2m(各边边长加0.2m),从当前场景的点云中,把此体素中的点提取出来,记为点集A
把体素V1的大小扩大0.01m,记为体素V2,从点集A中提取出位于体素V2中的点。
从体素V2中采样8912个点,部分权值为0
从8192个点中随机丢弃一些点,丢弃的点的位置坐标用第一个点的坐标代替,丢弃的点的权重设为0.有点点集丢弃比例很大,不知道这个对最终的预测效果影响大不大。
数据增强 :围绕Z轴随机旋转一个角度,角度在(0,2pi)里面随机产生。
开始训练一个epoch的网络模型并计算损失,梯度优化,得到预测值pred_val (32,8192,21)
total_correct :总正确点云数
total_seen:总点云数
total_sum:计算总损失
total_seen_class
total_correct_class
total_correct_vox
total_seen_vox
total_seen_class_vox:基于体素的每一类总的点云数
total_correct_class_vox:基于体素的每一类总的正确点云数
测试部分直接用testdataset数据,不需要再进行乱序和dropout等操作。
数据增强:对batch_data进行z轴旋转
测试部分只需要进行模型训练以及计算损失,无优化过程,该过程为测试模型训练后的性能。
- 作者为了和基于基线的方法进行精度比较,从而使用上面代码将点云label转化为体素label。
a.体素的大小放大50倍,即长宽高各放大50倍,L×50=L1,W50=W1,H×50=H1.
b.测试点云(x,y,z) (N3)减去最小坐标((x-min(x)=x1,y-min(y)=y1,z-min(z)=z1))后的x1,y1,z1各放大50倍,x150=x2, y150=y2, z150=z2
c.x+y(场景包围盒的长度放大50倍后的数)+z*(场景包围盒的长度放大50倍后的数)(场景包围盒的宽度放大50倍后的数),vidx:N3(如:4722*3)

即:x + y*L1 +z L1w1
d. np.unique() 去除数组中的重复数字,并进行排序,return_index = True 返回原列表中第一次出现的索引值
作者在是为了和体素进行比较而将标签全部体素化,正常对点云测试我认为是不需要这个操作的。
测试集test_dataset的测试结果:
平均损失:
体素准确率:
平均类别体素准确率:
点云预测准确率:
平均类别准确率:
加权后平均类别准确率:


版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/139997.html