Openpcdet yaml 配置文件解读

Openpcdet yaml 配置文件解读

CLASS_NAMES: ['Car', 'Pedestrian', 'Cyclist']

DATA_CONFIG: 
    _BASE_CONFIG_: cfgs/dataset_configs/kitti_dataset.yaml
    POINT_CLOUD_RANGE: [0, -39.68, -3, 69.12, 39.68, 1]
    #1.数据预处理实现代码 pcdet/datasets/processor/data_processor.py
    DATA_PROCESSOR:
        - NAME: mask_points_and_boxes_outside_range
          REMOVE_OUTSIDE_BOXES: True

        - NAME: shuffle_points
          SHUFFLE_ENABLED: {
            'train': True,
            'test': False
          }

        - NAME: transform_points_to_voxels
          VOXEL_SIZE: [0.16, 0.16, 4]
          MAX_POINTS_PER_VOXEL: 32
          MAX_NUMBER_OF_VOXELS: {
            'train': 16000,
            'test': 40000
          }
    #2. 数据增强代码在 pcdet\datasets\augmentor\data_augmentor.py
    DATA_AUGMENTOR:
        DISABLE_AUG_LIST: ['placeholder']
        AUG_CONFIG_LIST:
            - NAME: gt_sampling
              USE_ROAD_PLANE: True
              DB_INFO_PATH:
                  - kitti_dbinfos_train.pkl
              PREPARE: {
                 filter_by_min_points: ['Car:5', 'Pedestrian:5', 'Cyclist:5'],
                 filter_by_difficulty: [-1],
              }

              SAMPLE_GROUPS: ['Car:15','Pedestrian:15', 'Cyclist:15']
              NUM_POINT_FEATURES: 4
              DATABASE_WITH_FAKELIDAR: False
              REMOVE_EXTRA_WIDTH: [0.0, 0.0, 0.0]
              LIMIT_WHOLE_SCENE: False

            - NAME: random_world_flip
              ALONG_AXIS_LIST: ['x']

            - NAME: random_world_rotation
              WORLD_ROT_ANGLE: [-0.78539816, 0.78539816]

            - NAME: random_world_scaling
              WORLD_SCALE_RANGE: [0.95, 1.05]

# 3.模型构建
MODEL:
    NAME: PointPillar  # 模型文件  pcdet\models\detectors

    # 3.1 特征提取 pcdet/models/backbones_3d/vfe/pillar_vfe.py
    VFE:
        NAME: PillarVFE
        WITH_DISTANCE: False
        USE_ABSLOTE_XYZ: True
        USE_NORM: True
        NUM_FILTERS: [64]

   # 3.2 pillar 特征转化为伪图像 pcdet/models/backbones_2d/map_to_bev/pointpillar_scatter.py
    MAP_TO_BEV:
        NAME: PointPillarScatter
        NUM_BEV_FEATURES: 64

    # 3.3 使用2D backbone 提取伪图像特征 pcdet/models/backbones_2d/base_bev_backbone.py
    BACKBONE_2D:
        NAME: BaseBEVBackbone
        LAYER_NUMS: [3, 5, 5]
        LAYER_STRIDES: [2, 2, 2]
        NUM_FILTERS: [64, 128, 256]
        UPSAMPLE_STRIDES: [1, 2, 4]
        NUM_UPSAMPLE_FILTERS: [128, 128, 128]

    # 3.3 检测头实现   代码在 pcdet/models/dense_heads/anchor_head_single.py
    DENSE_HEAD:
        NAME: AnchorHeadSingle
        CLASS_AGNOSTIC: False

        USE_DIRECTION_CLASSIFIER: True
        DIR_OFFSET: 0.78539
        DIR_LIMIT_OFFSET: 0.0
        NUM_DIR_BINS: 2
        # 3.3.1 先验框生成 代码在pcdet/models/dense_heads/target_assigner/anchor_generator.py
        ANCHOR_GENERATOR_CONFIG: [
            {
                'class_name': 'Car',
                'anchor_sizes': [[3.9, 1.6, 1.56]],
                'anchor_rotations': [0, 1.57],
                'anchor_bottom_heights': [-1.78],
                'align_center': False,
                'feature_map_stride': 2,
                'matched_threshold': 0.6,
                'unmatched_threshold': 0.45
            },
            {
                'class_name': 'Pedestrian',
                'anchor_sizes': [[0.8, 0.6, 1.73]],
                'anchor_rotations': [0, 1.57],
                'anchor_bottom_heights': [-0.6],
                'align_center': False,
                'feature_map_stride': 2,
                'matched_threshold': 0.5,
                'unmatched_threshold': 0.35
            },
            {
                'class_name': 'Cyclist',
                'anchor_sizes': [[1.76, 0.6, 1.73]],
                'anchor_rotations': [0, 1.57],
                'anchor_bottom_heights': [-0.6],
                'align_center': False,
                'feature_map_stride': 2,
                'matched_threshold': 0.5,
                'unmatched_threshold': 0.35
            }
        ]
        # 3.3.2 处理一个batch中所有点云的anchors和gt_boxes,计算前景和背景anchor的类别,box编码和回归权重
        TARGET_ASSIGNER_CONFIG:
            NAME: AxisAlignedTargetAssigner
            POS_FRACTION: -1.0
            SAMPLE_SIZE: 512
            NORM_BY_NUM_EXAMPLES: False
            MATCH_HEIGHT: False
            BOX_CODER: ResidualCoder  # loss中anchor和gt的编码与解码  代码在 pcdet\utils\box_coder_utils.py


        # 3.3.3 损失计算
        """
          1、分类损失计算:代码在pcdet/models/dense_heads/anchor_head_template.py

          与之对应的focal_loss分类计算的详细实现代码在:pcdet/utils/loss_utils.py

          2、box的回归SmoothL1损失计算和方向分类损失计算:代码在:pcdet/models/dense_heads/anchor_head_template.py

          3.box cls target assignment代码在:pcdet/models/dense_heads/anchor_head_template.py

          4.方向回归的smoothL1计算 ,代码在pcdet/utils/loss_utils.py

          5.方向分类损失计算:代码在pcdet/utils/loss_utils.py
        """


        LOSS_CONFIG:
            LOSS_WEIGHTS: {
                'cls_weight': 1.0,
                'loc_weight': 2.0,
                'dir_weight': 0.2,
                'code_weights': [1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0]
            }


    POST_PROCESSING:
        """
          后处理
          1. 根据index和mask进行box和cls进行筛选
          2. 对该帧点云进行NMS
          3. 计算召回率
          4. 返回该batch的预测结果和recall
          代码在 pcdet\models\detectors\detector3d_template.py
        """
        RECALL_THRESH_LIST: [0.3, 0.5, 0.7] #  thresh_list:阈值列表[0.3, 0.5, 0.7]
        SCORE_THRESH: 0.1
        OUTPUT_RAW_SCORE: False

        EVAL_METRIC: kitti

        NMS_CONFIG:
            MULTI_CLASSES_NMS: False   # 2.对该帧点云进行NMS,选择是否是多类别的NMS
            NMS_TYPE: nms_gpu
            NMS_THRESH: 0.01
            NMS_PRE_MAXSIZE: 4096      # 处理前选得框
            NMS_POST_MAXSIZE: 500      # 处理后选得框


# 代码在tools\optimization中
OPTIMIZATION:
    """
       构建学习率调度器:三种方式adam_onecycle、LambdaLR、CosineWarmupLR
       Args:
           optimizer:优化器
           total_iters_each_epoch:一个epoch的迭代次数:982
           total_epoch:总共的epoch数:80
           last_epoch:上一次的epoch_id
           optim_cfg:优化配置
    """
    BATCH_SIZE_PER_GPU: 4
    NUM_EPOCHS: 80

    OPTIMIZER: adam_onecycle
    LR: 0.003
    WEIGHT_DECAY: 0.01  # 更新学习率
    MOMENTUM: 0.9

    MOMS: [0.95, 0.85]
    PCT_START: 0.4
    DIV_FACTOR: 10
    DECAY_STEP_LIST: [35, 45]
    LR_DECAY: 0.1
    LR_CLIP: 0.0000001   # 防止学习率过小

    LR_WARMUP: False
    WARMUP_EPOCH: 1

    GRAD_NORM_CLIP: 10

你可能感兴趣的:(深度学习,python,人工智能)