개요
- V1SparseDriveHead는
- 다중 모드 예측,
- diffusion 기반 정제,
- 플러그인 기반 모듈 확장
- 입력 이미지로부터
detection, map, 그리고 motion planning 결과를 통합하여
- 최종적으로 자율주행 시스템의 후처리 단계로 넘겨줍니다.
4. 요약
- V1SparseDriveHead는
- 이미지 백본/넥으로부터 추출된 다중 스케일 feature maps과 메타 정보를 받아,
- detection, 지도(map) 추정, 그리고 diffusion 기반 모션 플래닝을 동시에 수행하는 멀티태스크 헤드
- 입력:
- feature_maps: List[Tensor] with shape [B, N, C_i, H_i, W_i]
- metas: dict (projection matrix, GT 정보 등)
- 내부 처리:
- 출력:
- 튜플 (det_output, map_output, motion_output, planning_output)이며, 후처리 단계에서 이들을 결합해 최종 inference 결과를 생성합니다.
1. V1SparseDriveHead의 역할 및 기능
통합 멀티태스크 헤드 (Multi-Task Head):
V1SparseDriveHead는 자율주행 end-to-end 파이프라인에서 이미지 백본과 넥(Neck)을 통해 추출된 다중 스케일 feature maps을 받아서 세 가지 주요 태스크의 예측을 동시에 수행
이때 태스크는 다음과 같이 구분됩니다.
-
Detection (객체 검출):
- 목적: 카메라 이미지로부터
차량, 보행자, 트럭 등 객체의 위치 및 클래스 정보를 예측
- 구현: 설정 파일에서
with_det=True로 지정되어 있으며, 내부에서는 det_head (예, Sparse4DHead)를 빌드하여 수행
-
Map Estimation (지도 정보 추출):
- 목적:
주변 환경의 지도 정보를 벡터화하여 추출합니다.
- 예를 들어,
차선, 경계선, 보행자 횡단보도 등의 정보를 파악
- 구현: 설정 파일에서
with_map=True로 지정되어 있으며, map_head를 통해 수행
-
Motion Planning (모션/플래닝 예측):
- 목적:
자차의 미래 주행 궤적(trajectory) 또는 모션을 예측하는 동시에,
- diffusion 기반 정제 과정을 활용해 다중 모드 예측의 다양성을 확보
- 구현: 설정 파일에서
with_motion_plan=True로 지정되어 있으며, motion_plan_head (실제로는 V13MotionPlanningHead 타입)가 이 역할을 담당
- 이 모듈은 체크포인트에서 학습한
diffusion 스케줄러와 트랜스포머 기반 네트워크를 이용하여 주행 경로 후보들을 생성하고, refine 및 후처리 과정을 거칩니다.
통합 및 결과 조합:
- V1SparseDriveHead는 위 세 가지 헤드의 결과를 받아 각각의 손실(loss) 계산과 후처리(post_process)를 수행합니다.
- 최종적으로, 각 배치마다 detection, 지도, 모션/플래닝 결과를 하나의 dictionary로 결합하여 반환합니다.
2. 입력 및 출력 명세 (Shape 포함)
입력
-
Feature Maps (feature_maps):
- 원천: 이미지 백본(예: ResNet-50)과 넥(FPN)에서 추출된 다중 스케일 특징.
- Shape:
List[Tensor]. 각 Tensor의 shape는
[B, N, C_i, H_i, W_i]
여기서
- B: 배치 크기
- N: 카메라 수 (예, 6)
- C_i: 해당 스케일의 채널 수
- H_i, W_i: 해당 스케일의 높이와 너비
- 이 feature_maps는
각 태스크(Detection, Map, Motion Planning)에 공통으로 입력
-
메타 정보 (metas):
- 내용: projection matrix, 이미지 크기, 타임스탬프, GT 정보(예:
gt_ego_fut_trajs, gt_ego_fut_cmd 등)
- 용도: 각 헤드에서 후처리 및 좌표 변환, 그리고
모션 플래닝에서 diffusion 과정에 활용
-
추가 정보 (내부적으로 전달되는 인자들):
- Detection 헤드 관련:
- det_head는 feature_maps와 metas를 받아서 객체 검출 결과(
det_output)를 생성
- Map 헤드 관련:
- map_head도 유사하게 feature_maps와 metas를 입력받아 지도 정보(
map_output)를 예측
- Motion Planning 헤드 관련:
- motion_plan_head는
det_output, map_output, feature_maps, metas와 더불어,
det_head의 anchor_encoder,
instance_bank의 mask,
instance_bank의 anchor_handler
를 추가로 입력받아 모션 예측(motion_output)과 플래닝 예측(planning_output)을 생성합니다.
출력
-
forward 메서드의 반환:
V1SparseDriveHead의 forward 메서드는 튜플
[(det_output, map_output, motion_output, planning_output)]
을 반환합니다.
-
각 헤드별 출력 설명:
-
det_output:
- Detection 헤드의 예측 결과로, 객체의 classification scores, bounding box 회귀 값, 앵커 정보 등이 포함됩니다.
- 예시 Shape:
- classification: (B, num_anchors, num_classes)
- prediction: (B, num_anchors, 4) 등 (정확한 shape은 헤드 구성에 따라 다름)
-
map_output:
- 지도 정보 추출 헤드의 결과로, 각 지도 요소(차선, 경계선 등)의 예측 결과를 포함합니다.
- Shape는 구성에 따라 다르며, 보통 (B, num_map_instances, …) 형태.
-
motion_output, planning_output:
- 모션 플래닝 헤드의 결과로,
- motion_output은 자차의 모션(미래 trajectory에 대한 classification 및 regression 결과)
- planning_output은 diffusion 기반 예측 후처리를 거친 주행 경로 후보 및 플래닝 상태 정보를 담습니다.
- Shape 예시:
- motion_output의 각 요소: (B, num_motion_candidates, …)
- planning_output: 모드별 주행 경로 후보가 포함되어 있으며, 예를 들어 [B, 3, ego_fut_ts, 2] (여기서 3은 다중 모드 수, ego_fut_ts는 미래 시점 수, 2는 x,y 좌표)를 내포할 수 있음
-
loss 및 post_process:
loss(model_outs, data)는 각 태스크별 손실을 계산하여 하나의 dictionary로 반환합니다.
post_process(model_outs, data)는
- 각 헤드의 후처리 결과를 하나의 결과 dict로 합쳐서,
- 최종적으로 inference 시 출력할 결과(예: img_bbox, motion/planning 결과)를 생성
3. 설정파일이 만드는 유니크한 행동양식
-
멀티태스크 통합:
- 설정 파일에서
task_config에 따라 detection, map, 그리고 motion planning 작업을 모두 활성화합니다.
- V1SparseDriveHead는 세 가지 하위 헤드를 동시에 구성하고, 각각의 예측 결과를 통합하여 반환합니다.
-
플러그인 시스템 활용:
plugin=True와 plugin_dir="projects/mmdet3d_plugin/" 설정을 통해, 커스텀 모듈(예: 모션 플래닝 헤드, Diffusion 기반 모듈 등)이 자동으로 로드되고 등록됩니다.
- 특히, motion_plan_head는 diffusion 기반 모션 플래닝(논문에서 제안한 truncated diffusion policy 등)을 구현한 모듈(V13MotionPlanningHead)로 구성되어 있으며, 이는 기존 회귀 기반 예측보다 다중 모드 예측의 다양성을 개선합니다.
-
데이터 전처리 및 후처리:
- NuScenes3D Dataset을 기반으로 하는 복합 데이터 파이프라인을 통해, 다중 뷰 이미지, 지도 정보, 그리고 GT 모션 정보가 입력됩니다.
- 각 파이프라인 단계(LoadMultiViewImage, ResizeCropFlipImage, NormalizeMultiviewImage, NuScenesSparse4DAdaptor 등)가 적용되어 모델 입력을 최적화
- 후처리 단계에서는 각 헤드에서 예측한 결과를 결합하여, 하나의 통합 결과(dict)를 생성
-
FP16 혼합 정밀도 및 최적화:
- 설정 파일의 fp16 설정과 optimizer, learning rate scheduler 설정 등은 학습뿐 아니라 inference 파이프라인에서도 효율성을 높이는 데 기여합니다.