点云目标检测BRNET || 2. 基于MMDetection3D的处理数据思路

借着使用BRNET工程之际,了解下MMDetection3D框架相关的内容

1. MMDetection3D的数据处理的类

对于数据处理,MMDetection3D针对每种3D数据集,在代码中实现了一个类来进行数据的处理。在工程【test/test_data/test_datasets/】路径下,存放着数据读取处理的测试脚本。接下来以【test_scannet_dataset.py】为例。

最核心的代码为
scannet_dataset = ScanNetDataset(root_path, ann_file, pipelines)
其中入参:
root_path:数据路径
ann_file:标签文件名
pipeline:处理数据的列表,其中每个元素都是一个类,详细内容后面讲述

然后通过 data = scannet_dataset[0] 来获取具体的数据,其中入参为数据的索引,即根据索引来获取该数据集中的数据。这也能看出,该类下,肯定使用了【__getitem__】来实现该功能。

接下来具体看下处理流程。
在该工程中,很多函数无法通过跳转找到定义。只能通过全局搜索,个人使用的是vscode阅读该工程,只需要在vscode界面左边的搜索里查找,即可找到类的定义。
我们在定义出可以看到【类ScanNetDataset】继承了【类Custom3DDataset】,然后再跳转该类,并找到【__getitem__】,该部分为数据处理功能函数的起始位置。

具体函数如下:

由此我们可以查看具体的实现内容。值得说的有两点:
1. 【入参pipeline】在初始化位置,使用了框架内的函数将入参转换成自动的处理数据的函数。该函数的入参为一个字典,已放置了需要的数据内容的名字,作为关键字。经过该函数,会将具体数据放置在字典内对应位置的value上。在【prepare_train_data】等函数中被使用,如下代码:
        input_dict = self.get_data_info(index)
        if input_dict is None:
            return None
        self.pre_pipeline(input_dict)
        example = self.pipeline(input_dict)

pipeline是一个列表,每个元素是一个字典。字典的关键字"type"的元素为处理数据的类的名称,后面的元素为初始化该类的入参,具体如下:

    pipelines = [
        dict(
            type='LoadPointsFromFile', # 处理数据的类的名字
            coord_type='DEPTH', # 初始化类的入参
            shift_height=True, # 初始化类的入参
            load_dim=6, # 初始化类的入参
            use_dim=[0, 1, 2]), # 初始化类的入参
        dict(
            type='LoadAnnotations3D',
            with_bbox_3d=True,
            with_label_3d=True,
            with_mask_3d=True,
            with_seg_3d=True),
        dict(type='IndoorPointSample', num_points=5),
        dict(
            type='RandomFlip3D',
            sync_2d=False,
            flip_ratio_bev_horizontal=1.0,
            flip_ratio_bev_vertical=1.0),
        ......
    ]

每一个类下都存在【__call__】函数,也是被调用用作 具体处理数据的函数。其中处理逻辑,就是将pipeline转换成一个处理函数,然后将数据字典作为入参传入其中,然后就会按照pipeline中元素的顺序,对输入数据依次进行处理,上一个类的处理的返回数据,为接下来的类处理函数的入参。

2. 在【类Custom3DDataset】下的【函数get_data_info】中调用了【self.get_ann_info】,【self.get_ann_info】函数无法在编辑器页面进行定义跳转,该函数的实现在【类ScanNetDataset】中实现的。

2. api:build_dataset

同样是在路径【test/test_data/test_datasets/】下,脚本【test_dataset_wrappers.py】,可以看到MMDetection中数据处理的时,一个重要的api【build_dataset】
nus_dataset = build_dataset(dataset_cfg)
其中入参 dataset_cfg:字典,关键字"type"的值,是要进行处理数据的类名,其他关键字是该类初始化时的入参

使用【build_dataset】,也就是完成了【类CBGSDataset】的初始化,返回的变量 nus_dataset也可以通过nus_dataset[index]进行获取具体的数据 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值