openpcdet处理部分nuscenes数据集遇到的问题

pcdet版本:

指令

运行结果

问题所在:

无法生成gt_database

解决方案:

在函数部分,也需要对路径进行修改,不然在执行create_groundtruth_database的时候会找不到pkl,导入样本为0。

nuscens_dataset.py里面的主函数

if __name__ == '__main__':
    import yaml
    import argparse
    from pathlib import Path
    from easydict import EasyDict

    parser = argparse.ArgumentParser(description='arg parser')
    parser.add_argument('--cfg_file', type=str, default=None, help='specify the config of dataset')
    parser.add_argument('--func', type=str, default='create_nuscenes_infos', help='')
    parser.add_argument('--version', type=str, default='v1.0-trainval', help='')
    parser.add_argument('--with_cam', action='store_true', default=False, help='use camera or not')
    args = parser.parse_args()

    if args.func == 'create_nuscenes_infos':
#此处的路径也应该要修改,不然在生成gt_database的时候会检索不到对应的pkl
        dataset_cfg = EasyDict(yaml.safe_load(open(args.cfg_file)))
        ROOT_DIR = Path('/mnt/windows/dataset/nuscenes').resolve()
        dataset_cfg.VERSION = args.version
        create_nuscenes_info(
            version=dataset_cfg.VERSION,
            data_path=ROOT_DIR /  'v1.0-trainval',
            save_path=ROOT_DIR /  'v1.0-trainval',
            max_sweeps=dataset_cfg.MAX_SWEEPS,
            with_cam=args.with_cam
        )

        nuscenes_dataset = NuScenesDataset(
            dataset_cfg=dataset_cfg, class_names=None,
            root_path=ROOT_DIR /  'v1.0-trainval',
            logger=common_utils.create_logger(), training=True
        )
        nuscenes_dataset.create_groundtruth_database(max_sweeps=dataset_cfg.MAX_SWEEPS)

处理部分nuscenes数据集:

nuscenes完整数据集太大,可以下载part1或者其他部分数据集进行训练。

可能遇到的问题1:

生成的val.pkl是针对850个场景,所有样本的,在评估的时候会报错在samples找不到某个数据

解决方案:

找到nuscenes_dataset.py这个部分,进入fill_trainval_infos函数

    train_nusc_infos, val_nusc_infos = nuscenes_utils.fill_trainval_infos(
        data_path=data_path, nusc=nusc, train_scenes=train_scenes, val_scenes=val_scenes,
        test='test' in version, max_sweeps=max_sweeps, with_cam=with_cam
    )#在这里都是正常的 val_scenes有八个场景

nuscenes_utils.fill_trainval_infos函数这个位置 

        if sample['scene_token'] in train_scenes:
            train_nusc_infos.append(info)
        else:
            val_nusc_infos.append(info)

可以看到,它会遍历所有的train_scenes尝尽并append训练的Infos,剩下的场景全部都添加到了val的Infos中,这是不正确的,可以改成:

        if sample['scene_token'] in train_scenes:
            train_nusc_infos.append(info)
        elif sample['scene_token'] in val_scenes:
            val_nusc_infos.append(info)
        else:
            pass 

这样可以保证val.pkl读取的是你下载的数据集的内容,而非整个数据集的内容。

可能遇到的问题2:

在评估的时候,可能会报错
""Samples in split doesn't match samples in predictions.""


解决方案:

这是因为gt生成和predict生成不匹配造成的。

参考了

https://github.com/nutonomy/nuscenes-devkit/issues/823

对nuscenes源代码进行修改,进入nuscenes/eval/common/loaders.py,在开头的地方加上

load_prediction函数的最后一个循环处加上

同时要记得修改\nuscenes\utils\splits里面val的场景名称,part1中的val只保留了103-110,故修改如下:

同时也要对函数进行修改,我嫌麻烦,直接注释了

方可正常评估

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值