一、代码修改
1、复制pcdet/datasets/kitti/kitti_dataset.py为WJ_dataset.py
- def get_infos()
- def get_label()
- 添加:from pcdet.utils import object3d_WJ
- 注释掉calib中参数的加载、计算代码
2、 复制pcdet/utils/object3d_kitti.py 为objetc3d_WJ.py,根据数据标注格式加载读取对应标签。
3、pcdet/datasets/dataset.py, __init__.py中添加
4、复制kitti_dataset.yaml为WJ_dataset.yaml
- DATASET: 'WJDataset'
POINT_CLOUD_RANGE: [-73.44, -79.36, -6, 73.44, 79.36, 2] 类别信息
类别信息- VOXEL_SIZE: [0.1, 0.1, 0.1] 注意:点云检测范围和voxelsize设定需谨慎,容易导致网络结构出现tensor尺度不匹配的问题。
- filter_by_min_points:添加类别
- SAMPLE_GROUPS:添加每个类别目标的采样个数
5、复制pv_rcnn.yaml
- CLASS_NAMES: ['car', 'bicycle', 'bus', 'tricycle', 'pedestrian', 'truck'] #'semitrailer',
- _BASE_CONFIG_:修改为WJ_dataset.yaml路径
- filter_by_min_points:添加类别
- SAMPLE_GROUPS:添加每个类别目标的采样个数
- DENSE_HEAD中ANCHOR_GENERATOR_CONFIG:添加每类目标的anchor信息
6、tensorboard远程访问
1、在登录远程服务器的时候使用命令:
ssh -L 8008:localhost:6006 liangyanyu@10.102.1.217
如果6006冲突了,换成其他端口号。(一般ssh远程登录命令:ssh liang@10.102.×.××)
2、训练完模型之后使用如下命令:
tensorboard --logdir=./tensorboard/ --port=6006
(‘/path/to/log-directory’为自己设定的日志存放路径)
最后,在本地访问地址:http://10.102.1.217:6006/
二、问题:
1、RuntimeError: Sizes of tensors must match except in dimension 1. Expected size 199 but got size 200 for tensor number 1 in the list
原因:base_bev_backbone.py文件中x = torch.cat(ups, dim=1)行。
网络下采样、上采样得到的特征图进行concat,但是第三维尺度不匹配。由于voxelsize设定导致。
PVRCNN官方建议 Voxel设置:X,Y方向个数是16的倍数。Z方向为40。
2、训练集和验证集数据都放在training文件夹下,否则出现如下错误。
assert img_file.exists() # 如果该图片文件不存在,直接报错
3、训练完成后运行demo.py可视化模型检测结果,检测框错误,。
解决方法:
(1)检查生成的gt_database是否正确,可视化每个目标看方向,大小是否是标注的目标。
(2)检测spconv库版本,训练和测试的版本不一致会有问题。
4、训练模型的检测结果car类型车检测不到,其它类别目标可以检测到。
解决方法:
(1)数据验证:查看训练数据送到网络训练前,self.prepare_data(data_dict=input_dict)
是否正确。openpcdet将类别添加到box最后一列进行拼接,组成8维向量。删除了data_dict
中的names。
(2)推理后处理验证:验证nms前目标的类别是否有car目标。
(3)配置文件验证:配置文件中目标类别字符核对。(我的问题就出现在car和Car的大小写问题)。导致car目标在生成anchor时无对应,未进行训练。