运行:
python tools/train.py configs/pointpillars/pointpillars_hv_secfpn_8xb6-160e_kitti-3d-3class.py
报错1:‘use_ground_plane’ is true but find plane is none
这个函数在object sample里,pointpillars_hv_secfpn_8xb6-160e_kitti-3d-3class.py里有定义它,
在train_pipeline里,把objectSample的use_ground_plane改为false.
ObjectSample是什么?
我们在前面的create data
步骤建立了一个关于数据集的全体 gt object 库,即 db_infos.pkl
,ObjectSample 做的就是,如果当前样本的 gt object 比较少的情况下,从这个库里面采样一些 gt object 填充到当前的样本中(可理解为从其他样本里 copy 一些 gt object 放到当前样本中)
-
初始化 db_sampler ,在 db_sampler 初始化里面按照 difficulty 和 min_points 过滤掉 一些 gt object.
-
是否选择 sample_2d,调用相应的 db_sampler.sample_all
-
db_sampler.sample_all() 的过程
- 计算每个类别需要 sample 的个数: 要求个数 减去 目前 gt label 中该类别个数
- 如果该类别的 gt objects 已经足够多,即需要 sample 的个数 <= 0,则不做任何 sample 操作,返回的 sample 结果为 None
- 如果该类别的 gt objects 比较少,则从 db_info 里面对应的类别 sample 所需数量的 object ,也就是从其他文件去 sample 一些 object 出来填充到当前文件的 gt 数据。比如用000005.bin 的一些 object 点云 补充到 000003.bin 去,并补充相应的 gt boxes.
-
得到 sample 结果之后,判断是否和已有的 gt boxes and sample boxes 冲突 (注意这里是将某类别的 sample 结果和目前所有类别的已有 boxes 判断冲突),保留那些没有冲突的 sample 结果作为该类别的 sample 结果
-
concat sample 结果和原本的 gt labels and bboxes, 替换 gt point cloud 里面落在 sample boxes 里的 point 为 sample points