MODEL : PV-RCNN++
DATASET : 2025 자율주행 AI 챌린지 dataset (128ch+64ch)
TEST CODE : 대회의 baseline code에서 val.py(2025)를 사용해서 확인
TEST DATASET : 2024 dataset에서 train dataset의 64ch data만 뽑아서 사용
개선방법1
downsampling 증강 적용, 클래스 별 가중치 적용, LR + GT-Sampling 조정
개선방법2
개선방법1 + 클래스 별 가중치, NMS 임계값, MIN_RADIUS, GRID_SIZE 조정 + translation 증강 추가
개선방법3
개선방법1 + NMS 조정, PointCloudRange 조정
Labels의 범위 분포 확인
현재 기존 범위가 -70~70으로 잡혀있는데 -75~75로 늘려서 학습 진행
→ 이런 식으로 바꾸면 70정도 범위에 걸쳐 학습하지 않았던 데이터들을 학습할 수 있음
-75~75 이상으로 넘어가면 객체가 존재해도 노이즈가 심하기 때문에 이를 제외하고 진행함
POINT_CLOUD_RANGE: [-75.2, -75.2, -2, 75.2, 75.2, 4]
z축에 대해서는 64ch dataset이 제네시스 차량에서 수집되었기 때문에 카니발보단 낮은 높이에서 수집됨
→ -2~4 사이 범위에 대해서 조정하는 것으로 했음
ckpt 78이 가장 낮은 loss여서 이걸로 검증 진행함
점수가 많이 오른 것을 확인 후 제출
개선방법4 // 학습 중
개선방법3 + translation 증강 추가 + heatmap 조정 + point head 조정 + voxel size 조정
pv_rcnn_plusplus_custom.yaml
TARGET_ASSIGNER_CONFIG: # heatmap을 어떻게 생성할지를 정의하는 부분
FEATURE_MAP_STRIDE: 8
NUM_MAX_OBJS: 500
GAUSSIAN_OVERLAP: 0.05 # 모델이 중심을 약간 부정확하게 예측하더라도 어느 정도 정답으로 인정 -> 값을 더 낮춤
MIN_RADIUS: 2 # 실제 크기와 상관없이 모든 보행자는 히트맵 상에서 최소 2픽셀 반경의 넉넉한 크기 -> 보행자가 히트맵에서 더 넉넉하게 보이게 하기 위함
viewer로 개선방법3의 결과를 보니 객체의 박스가 너무 딱 붙어있어서 손실되는 포인트들이 있었음
따라서 히트맵을 좀 넓혀보기로 함
heatmap? center head 구조에서 사용하는 것
https://kind-slip-86b.notion.site/Center-based-3D-Object-Detection-and-Tracking-2808a2c2bfdb80d2a308c5ea2a45c8f4?source=copy_link
pv_rcnn_plusplus_custom.yaml
POINT_HEAD:
NAME: PointHeadSimple
CLS_FC: [256, 256]
CLASS_AGNOSTIC: True
USE_POINT_FEATURES_BEFORE_FUSION: True
TARGET_CONFIG:
GT_EXTRA_WIDTH: [0.25, 0.25, 0.25]
# GT_EXTRA_WIDTH: [0.2, 0.2, 0.2]
# 위 설정이 학습 시, 정답 박스의 각 축에 0.2씩 추가 여백을 줘서 포인트의 정답 라벨을 할당하는 식임
# 값을 증가시키면 실제 정답 박스보다 더 넓은 영역의 포인트들을 객체로 간주하고 학습하기 때문에 희소한 환경(64ch)에서 좋아질 거 같아 값을 늘리기로 함
LOSS_CONFIG:
LOSS_REG: smooth-l1
# 포인트 분할 성능을 위해 약간 높임
LOSS_WEIGHTS: {
'point_cls_weight': 1.3,
}
pv-rcnn++은 head가 center head, point head로 나누어져 있음
여기에서 point head는 객체인지 배경인지 분류하는 역할
GT_EXTRA_WIDTH: [0.25, 0.25, 0.25]
학습할 때 gtbox에 여백을 조금씩만 더 늘림
'point_cls_weight': 1.3,
모델의 전체 손실(Loss) 함수에서 Point Head가 계산한 분류 손실(point_cls_loss)이 얼마나 중요한지를 결정하는 가중치
이를 좀 더 늘려서 포인트 분할 성능을 좀 더 향상시키는 것을 목표로 함
custom_av_dataset_pv.yaml
VOXEL_SIZE: [0.075, 0.075, 0.15] # 0.1, 0.1, 0.15 # 1.7배 복셀 수가 증가
voxel size를 줄이면 voxel의 개수가 늘어남
이를 통해 작은 객체에 대한 recall값 향상을 기대해봄..
현재 훈련 중에 있음
80epoch or loss 수렴까지 학습 해 볼 예정
voxel size 조정으로 인해 voxel 수가 1.7배 정도 늘어서 학습 시간은 좀 증가함
ckpt 80에 수렴해서 val 진행 해봄
Pedestrian, Cyclist가 각각 4점씩 올랐음
이를 통해 voxel size와 뷰어를 통해 직접 시각화해보고 값을 조정하는게 효과적임을 알 수 있음.
| 성능지표 | 베이스라인 | 개선방법1(ckpt80) | 개선방법2(ckpt38) | 개선방법3(ckpt78) | 개선방법4 (ckpt80) |
| AP/L1 VEHICLE | 0.89 | 0.85 | 0.83 | 0.89 | 0.89 |
| AP/L2 VEHICLE | 0.88 | 0.83 | 0.81 | 0.88 | 0.88 |
| AP/L1 PEDESTRIAN | 0.90 | 0.67 | 0.60 | 0.82 | 0.85 |
| AP/L2 PEDESTRIAN | 0.89 | 0.65 | 0.58 | 0.80 | 0.84 |
| AP/L1 CYCLIST | 0.89 | 0.81 | 0.75 | 0.87 | 0.89 |
| AP/L2 CYCLIST | 0.88 | 0.79 | 0.73 | 0.85 | 0.88 |
첫댓글 논문에서 보행자 개선방법은 찾아본거냐?
했으면 정리한거 추가해줄것
개선방법4 훈련시간 : 에퍽당 1시간 30분, 전체 130시간 걸림 -> 약 5.5일
백본변경없다면 파인튜닝으로 훈련시간 줄일것
모의테스트시 보행자 점수의 상승폭(10점이상)에 비해 실제 리더보드점수의 상승폭(44.5->46.9->2.4점)이 작은걸로 봐서 보행자점수가 전체점수에 미치는 영향이 작은 걸로 판단됨
보행자뿐만아니라 가장 큰 비중을 차지하는 자동차점수를 올려야 50점이상을 기대해볼수 있을 것임