【代码阅读】mmdetection3d的配置文件

MMDetection3D是用于3D目标检测的框架,配置文件结构清晰,包括数据集、模型、训练策略和运行时设置。以kitti数据集为例,数据集配置在_base_/datasets下,模型如pillar网络在model中定义。训练策略如cyclic_40e.py用于设定学习率等参数。配置文件遵循特定命名规则,如hv_pointpillars_fpn_sbn-all_4x8_2x_nus-3d.py。配置文件中的pipeline定义了数据预处理,model定义了网络结构,schedule定义了训练步骤,data包含了数据集信息。用户可通过继承和修改配置文件实现模型定制。

mmdetection3d的配置文件放置在config/base下面,下面有4种类型组件:数据集(dataset),模型(model),训练策略 (schedule) 和运行时的默认设置 (default runtime)。由 base 下的组件组成的配置,被我们称为 原始配置 (primitive)。

我们以kitti为例,对于数据集的一些基本信息存储在_base_/datasets下面。
这里主要定义了数据集的位置/名称/类别/点云范围,把他们打包好,送进pipeline中 pipeline分别是train和eval对于数据的一些预处理。随后定义data 这里主要是把kitti数据集的信息及训练参数打包好。包括samples per gpu、和储存data的路径及配置文件的路径。
以pillar为例。它的一些模型文件存储在model中,里面很详细地记录了pillar网络的一些定义参数。例如voxel的大小 点云的范围、anchor的生成等等。我们如果要对于网络进行修改 可以直接继承这个网络的config文件 然后对于一些参数进行修改即可。
如果你在构建一个与任何现有方法不共享结构的全新方法,可以在 configs 文件夹下创建一个新的例如 xxx_rcnn 文件夹。
schedule则是一些常见的训练策略,例如kitti数据集常用cyclic_40e.py文件,主要是定义了训练中用到的学习率等参数。
config文件夹中包含各个detector的配置文件,例如,如果在 PointPillars 的基础上做了一些修改,用户首先可以通过指定 base = …/pointpillars/hv_pointpillars_fpn_sbn-all_4x8_2x_nus-3d.py 来继承基础的 PointPillars 结构,然后修改配置文件中的必要参数以完成继承。
配置文件命名也有一些规律:

{model}[model setting]{backbone}{neck}[norm setting][misc][gpu x batch_per_gpu]{schedule}{dataset}
{xxx} 是被要求填写的字段而 [yyy] 是可选的。

{model}:模型种类,例如 hv_pointpillars (Hard Voxelization PointPillars)、VoteNet 等。

[model setting]:某些模型的特殊设定。

{backbone}: 主干网络种类例如 regnet-400mf、regnet-1.6gf 等。

{neck}:模型颈部的种类包括 fpn、secfpn 等。

[norm_setting]:如无特殊声明,默认使用 bn (Batch Normalization),其他类型可以有 gn (Group Normalization)、sbn (Synchronized Batch Normalization) 等。 gn-head/gn-neck 表示 GN 仅应用于网络的头部或颈部,而 gn-all 表示 GN 用于整个模型,例如主干网络、颈部和头部。

[misc]:模型中各式各样的设置/插件,例如 strong-aug 意味着在训练过程中使用更强的数据增广策略。

[batch_per_gpu x gpu]:每个 GPU 的样本数和 GPU 数量,默认使用 4x8。

{schedule}:训练方案,选项是 1x、2x、20e 等。 1x 和 2x 分别代表训练 12 和 24 轮。 20e 在级联模型中使用,表示训练 20 轮。 对于 1x/2x,初始学习率在第 8/16 和第 11/22 轮衰减 10 倍;对于 20e,初始学习率在第 16 和第 19 轮衰减 10 倍。

{dataset}:数据集,例如 nus-3d、kitti-3d、lyft-3d、scannet-3d、sunrgbd-3d 等。 当某一数据集存在多种设定时,我们也标记下所使用的类别数量,例如 kitti-3d-3class 和 kitti-3d-car 分别意味着在 KITTI 的所有三类上和单独车这一类上进行训练。

官方文档给出了votenet的配置文件注释:

model = dict(
    type='VoteNet',  # 检测器的类型,更多细节请参考 mmdet3d.models.detectors
    backbone=dict(
        type='PointNet2SASSG',  # 主干网络的类型,更多细节请参考 mmdet3d.models.backbones
        in_channels=4,  # 点云输入通道数
        num_points=(2048, 1024, 512, 256),  # 每个 SA 模块采样的中心点的数量
        radius=(0.2, 0.4, 0.8, 1.2),  # 每个 SA 层的半径
        num_samples=(64, 32, 16, 16),  # 每个 SA 层聚集的点的数量
        sa_channels=((64, 64, 128), (128, 128, 256), (128, 128, 256),
                     (128, 128, 256)),  # SA 模块中每个多层感知器的输出通道数
        fp_channels=((256, 256), (256, 256)),  # FP 模块中每个多层感知器的输出通道数
        norm_cfg=dict(type='BN2d'),  # 归一化层的配置
        sa_cfg=dict(  # 点集抽象 (SA) 模块的配置
            type='PointSAModule',  # SA 模块的类型
            pool_mod='max',  # SA 模块的池化方法 (最大池化或平均池化)
            use_xyz=True,  # 在特征聚合中是否使用 xyz 坐标
            normalize_xyz=True)),  # 在特征聚合中是否使用标准化的 xyz 坐标
    bbox_head=dict(
        type='VoteHead',  # 检测框头的类型,更多细节请参考 mmdet3d.models.dense_heads
        num_classes=18,  # 分类的类别数量
        bbox_coder=dict(
            type='PartialBinBasedBBoxCoder',  # 框编码层的类型,更多细节请参考 mmdet3d.core.bbox.coders
            num_sizes=18,  # 尺寸聚类的数量
            num_dir_bins=1,   # 编码方向角的间隔数
            with_rot=False,  # 框是否带有旋转角度
            mean_sizes=[[0.76966727, 0.8116021, 0.92573744],
                        [1.876858, 1.8425595, 1.1931566],
                        [0.61328, 0.6148609, 0.7182701],
                        [1.3955007, 1.5121545, 0.83443564],
                        [0.97949594, 1.0675149, 0.6329687],
                        [0.531663, 0.5955577, 1.7500148],
                        [0.9624706, 0.72462326, 1.1481868],
                        [0.83221924, 1.0490936, 1.6875663],
                        [0.21132214, 0.4206159, 0.5372846],
                        [1.4440073, 1.8970833, 0.26985747],
                        [1.0294262, 1.4040797, 0.87554324],
                        [1.3766412, 0.65521795, 1.6813129],
                        [0.6650819, 0.71111923, 1.298853],
                        [0.41999173, 0.37906948, 1.7513971],
                        [0.59359556, 0.5912492, 0.73919016],
                        [0.50867593, 0.50656086, 0.30136237],
                        [1.1511526, 1.0546296, 0.49706793],
                        [0.47535285, 0.49249494, 0.5802117]]),  # 每一类的平均尺寸,其顺序与类名顺序相同
        vote_moudule_cfg=dict(  # 投票 (vote) 模块的配置,更多细节请参考 mmdet3d.models.model_utils
            in_channels=256,  # 投票模块的输入通道数
            vote_per_seed=1,  # 对于每个种子点生成的投票数
            gt_per_seed=3,  # 每个种子点的真实标签个数
            conv_channels=(256, 256),  # 卷积通道数
            conv_cfg=dict(type='Conv1d'),  # 卷积配置
            norm_cfg=dict(type='BN1d'),  # 归一化层配置
            norm_feats=True,  # 是否标准化特征
            vote_loss=dict(  # 投票分支的损失函数配置
                type=<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值