|
|
현재 진행 상황
나머지 사전 후보 모델 돌려서 성능 확인 후 증강 기법 적용 할 예정
그래프 확인 후 로스 떨어지지 않는 선에서 중지하고 checkpoint model로 이어서 증식 적용 후 학습
위제 - pv-rcnn++ (5070GPU 사양 맞추는 중, CUDA version 12.0 이상 지원) -> 불가능 확인
윤지 - centerpointpillar (증강 넣고 훈련)
https://github.com/open-mmlab/OpenPCDet/blob/master/tools/cfgs/waymo_models/dsvt_pillar.yaml
일단 Waymo model에 있는 DSVT-Pillar는 Point Cloud의 Range, Voxel Size가 다르고 증식을 넣는 방식도 다름
이를 제외하고 설정 파일을 수정함
작년 대회의 베이스라인 모델의 CenterPointPillar의 설정 파일 구조 확인
Class name, Data Config, Model, Optimization으로 구성되어 있음
centerpoint_pillar_1x_long_epoch.yaml
---------------------------------------------------------------------------------------------------------------------------------------
CLASS_NAMES: ['Vehicle', 'Pedestrian', 'Cyclist']
DATA_CONFIG:
_BASE_CONFIG_: cfgs/dataset_configs/custom_av_dataset.yaml
POINT_CLOUD_RANGE: [-70.0, -70.0, -4.0, 70.0, 70.0, 4.0]
---------------------------------------------------------------------------------------------------------------------------------------
Point Cloud Range가 기존 Waymo와 다름
이는 대회에서 제공하는 dataset에 맞춰져있기 때문에 DSVT-Pillar의 설정파일이 이를 맞춰줘야 함
---------------------------------------------------------------------------------------------------------------------------------------
DATA_PROCESSOR:
- NAME: mask_points_and_boxes_outside_range
REMOVE_OUTSIDE_BOXES: True
- NAME: shuffle_points
SHUFFLE_ENABLED: {
'train': True,
'test': True
}
- NAME: transform_points_to_voxels
VOXEL_SIZE: [ 0.25, 0.25, 8.0 ]
MAX_POINTS_PER_VOXEL: 20
MAX_NUMBER_OF_VOXELS: {
'train': 150000,
'test': 150000
}
---------------------------------------------------------------------------------------------------------------------------------------
마찬가지로 Voxel size도 맞춰줘야 함
---------------------------------------------------------------------------------------------------------------------------------------
MODEL:
NAME: CenterPoint
VFE:
NAME: PillarVFE
WITH_DISTANCE: False
USE_ABSLOTE_XYZ: True
USE_NORM: True
NUM_FILTERS: [ 64, 64 ]
MAP_TO_BEV:
NAME: PointPillarScatter
NUM_BEV_FEATURES: 64
BACKBONE_2D:
NAME: BaseBEVBackbone
LAYER_NUMS: [ 3, 5, 5 ]
LAYER_STRIDES: [ 1, 2, 2 ]
NUM_FILTERS: [ 64, 128, 256 ]
UPSAMPLE_STRIDES: [ 1, 2, 4 ]
NUM_UPSAMPLE_FILTERS: [ 128, 128, 128 ]
DENSE_HEAD:
NAME: CenterHead
CLASS_AGNOSTIC: False
CLASS_NAMES_EACH_HEAD: [
['Vehicle', 'Pedestrian', 'Cyclist']
]
SHARED_CONV_CHANNEL: 64
USE_BIAS_BEFORE_NORM: True
NUM_HM_CONV: 2
SEPARATE_HEAD_CFG:
HEAD_ORDER: ['center', 'center_z', 'dim', 'rot']
HEAD_DICT: {
'center': {'out_channels': 2, 'num_conv': 2},
'center_z': {'out_channels': 1, 'num_conv': 2},
'dim': {'out_channels': 3, 'num_conv': 2},
'rot': {'out_channels': 2, 'num_conv': 2},
}
TARGET_ASSIGNER_CONFIG:
FEATURE_MAP_STRIDE: 1
NUM_MAX_OBJS: 500
GAUSSIAN_OVERLAP: 0.1
MIN_RADIUS: 2
LOSS_CONFIG:
LOSS_WEIGHTS: {
'cls_weight': 1.0,
'loc_weight': 2.0,
'code_weights': [1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0]
}
POST_PROCESSING:
SCORE_THRESH: 0.1
POST_CENTER_LIMIT_RANGE: [-80, -80, -10.0, 80, 80, 10.0]
MAX_OBJ_PER_SAMPLE: 500
NMS_CONFIG:
NMS_TYPE: nms_gpu
NMS_THRESH: 0.7
NMS_PRE_MAXSIZE: 4096
NMS_POST_MAXSIZE: 500
POST_PROCESSING:
RECALL_THRESH_LIST: [0.3, 0.5, 0.7]
EVAL_METRIC: waymo
---------------------------------------------------------------------------------------------------------------------------------------
이 부분은 모델 네트워크를 설정해놓은 부분인데 여기를 DSVT-Pillar 네트워크로 교체했음
---------------------------------------------------------------------------------------------------------------------------------------
OPTIMIZATION:
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
---------------------------------------------------------------------------------------------------------------------------------------
이 부분은 훈련 시에 필요한 정보들이라 사용자가 변경해서 사용할 수도 있어서 수정을 하지 않았음
Waymo DSVT-Pillar 설정 파일 구조 변경
dsvt_pillar.yaml을 가지고 와서 그대로 수정한다기보다
작년 베이스라인 모델의 설정 파일의 네트워크 구조를 변경하는 것이 쉬움
위 설정 파일에서 모델 네트워크 구조를 변경해주면 됨
---------------------------------------------------------------------------------------------------------------------------------------
CLASS_NAMES: ['Vehicle', 'Pedestrian', 'Cyclist']
DATA_CONFIG:
_BASE_CONFIG_: cfgs/dataset_configs/custom_av_dataset.yaml
POINT_CLOUD_RANGE: [-70.0, -70.0, -4.0, 70.0, 70.0, 4.0]
DATA_PROCESSOR:
- NAME: mask_points_and_boxes_outside_range
REMOVE_OUTSIDE_BOXES: True
- NAME: shuffle_points
SHUFFLE_ENABLED: {
'train': True,
'test': True
}
- NAME: transform_points_to_voxels
VOXEL_SIZE: [ 0.1, 0.1, 6.0 ]
MAX_POINTS_PER_VOXEL: 20
MAX_NUMBER_OF_VOXELS: {
'train': 150000,
'test': 150000
}
---------------------------------------------------------------------------------------------------------------------------------------
여기 voxel size 수정한 이유는 훈련 시간이 너무 커서 이를 일단 키우고 훈련 시작함
여기 모델 설정 부분을 DSVT-Pillar 구조로 덮어씌웠음
---------------------------------------------------------------------------------------------------------------------------------------
MODEL:
NAME: CenterPoint
VFE:
NAME: DynamicVoxelVFE
WITH_DISTANCE: False
USE_ABSLOTE_XYZ: True
USE_NORM: True
NUM_FILTERS: [ 192, 192 ]
BACKBONE_3D:
NAME: DSVT
INPUT_LAYER:
sparse_shape: [468, 468, 1]
downsample_stride: []
d_model: [192]
set_info: [[36, 4]]
window_shape: [[12, 12, 1]]
hybrid_factor: [2, 2, 1] # x, y, z
shifts_list: [[[0, 0, 0], [6, 6, 0]]]
normalize_pos: False
block_name: ['DSVTBlock']
set_info: [[36, 4]]
d_model: [192]
nhead: [8]
dim_feedforward: [384]
dropout: 0.0
activation: gelu
output_shape: [468, 468]
conv_out_channel: 192
# You can enable torch.utils.checkpoint to save GPU memory
USE_CHECKPOINT: True
MAP_TO_BEV:
NAME: PointPillarScatter3d
INPUT_SHAPE: [468, 468, 1]
NUM_BEV_FEATURES: 192
BACKBONE_2D:
NAME: BaseBEVResBackbone
LAYER_NUMS: [ 1, 2, 2 ]
LAYER_STRIDES: [ 1, 2, 2 ]
NUM_FILTERS: [ 128, 128, 256 ]
UPSAMPLE_STRIDES: [ 1, 2, 4 ]
NUM_UPSAMPLE_FILTERS: [ 128, 128, 128 ]
DENSE_HEAD:
NAME: CenterHead
CLASS_AGNOSTIC: False
CLASS_NAMES_EACH_HEAD: [
['Vehicle', 'Pedestrian', 'Cyclist']
]
SHARED_CONV_CHANNEL: 64
USE_BIAS_BEFORE_NORM: True
NUM_HM_CONV: 2
BN_EPS: 0.001
BN_MOM: 0.01
SEPARATE_HEAD_CFG:
HEAD_ORDER: ['center', 'center_z', 'dim', 'rot']
HEAD_DICT: {
'center': {'out_channels': 2, 'num_conv': 2},
'center_z': {'out_channels': 1, 'num_conv': 2},
'dim': {'out_channels': 3, 'num_conv': 2},
'rot': {'out_channels': 2, 'num_conv': 2},
'iou': {'out_channels': 1, 'num_conv': 2},
}
TARGET_ASSIGNER_CONFIG:
FEATURE_MAP_STRIDE: 1
NUM_MAX_OBJS: 500
GAUSSIAN_OVERLAP: 0.1
MIN_RADIUS: 2
IOU_REG_LOSS: True
LOSS_CONFIG:
LOSS_WEIGHTS: {
'cls_weight': 1.0,
'loc_weight': 2.0,
'code_weights': [1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0]
}
POST_PROCESSING:
SCORE_THRESH: 0.1
POST_CENTER_LIMIT_RANGE: [-80, -80, -10.0, 80, 80, 10.0]
MAX_OBJ_PER_SAMPLE: 500
USE_IOU_TO_RECTIFY_SCORE: True
IOU_RECTIFIER: [0.68, 0.71, 0.65]
NMS_CONFIG:
NMS_TYPE: nms_gpu
NMS_THRESH: [0.75, 0.6, 0.55]
NMS_PRE_MAXSIZE: [4096, 4096, 4096]
NMS_POST_MAXSIZE: [500, 500, 500]
POST_PROCESSING:
RECALL_THRESH_LIST: [0.3, 0.5, 0.7]
EVAL_METRIC: waymo
---------------------------------------------------------------------------------------------------------------------------------------
모델 부분은 그대로 진행함
---------------------------------------------------------------------------------------------------------------------------------------
OPTIMIZATION:
BATCH_SIZE_PER_GPU: 2
NUM_EPOCHS: 20
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
---------------------------------------------------------------------------------------------------------------------------------------

첫댓글 다시 작성해 결과를 처음에 정리할것