[DiffusionDrive][nuscenes] V1SparseDriveHead

ad_official·2025년 2월 6일

diffusion planning

목록 보기
5/19

개요

  • 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을 받아서 세 가지 주요 태스크의 예측을 동시에 수행
이때 태스크는 다음과 같이 구분됩니다.

  1. Detection (객체 검출):

    • 목적: 카메라 이미지로부터 차량, 보행자, 트럭 등 객체의 위치 및 클래스 정보를 예측
    • 구현: 설정 파일에서 with_det=True로 지정되어 있으며, 내부에서는 det_head (예, Sparse4DHead)를 빌드하여 수행
  2. Map Estimation (지도 정보 추출):

    • 목적: 주변 환경의 지도 정보를 벡터화하여 추출합니다.
      • 예를 들어, 차선, 경계선, 보행자 횡단보도 등의 정보를 파악
    • 구현: 설정 파일에서 with_map=True로 지정되어 있으며, map_head를 통해 수행
  3. Motion Planning (모션/플래닝 예측):

    • 목적:
      • 자차의 미래 주행 궤적(trajectory) 또는 모션을 예측하는 동시에,
      • diffusion 기반 정제 과정을 활용해 다중 모드 예측의 다양성을 확보
    • 구현: 설정 파일에서 with_motion_plan=True로 지정되어 있으며, motion_plan_head (실제로는 V13MotionPlanningHead 타입)가 이 역할을 담당
    • 이 모듈은 체크포인트에서 학습한 diffusion 스케줄러트랜스포머 기반 네트워크를 이용하여 주행 경로 후보들을 생성하고, refine 및 후처리 과정을 거칩니다.

통합 및 결과 조합:

  • V1SparseDriveHead는 위 세 가지 헤드의 결과를 받아 각각의 손실(loss) 계산과 후처리(post_process)를 수행합니다.
  • 최종적으로, 각 배치마다 detection, 지도, 모션/플래닝 결과를 하나의 dictionary로 결합하여 반환합니다.

2. 입력 및 출력 명세 (Shape 포함)

입력

  1. 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)에 공통으로 입력
  2. 메타 정보 (metas):

    • 내용: projection matrix, 이미지 크기, 타임스탬프, GT 정보(예: gt_ego_fut_trajs, gt_ego_fut_cmd 등)
    • 용도: 각 헤드에서 후처리 및 좌표 변환, 그리고 모션 플래닝에서 diffusion 과정에 활용
  3. 추가 정보 (내부적으로 전달되는 인자들):

    • 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)]
    을 반환합니다.

  • 각 헤드별 출력 설명:

    1. det_output:

      • Detection 헤드의 예측 결과로, 객체의 classification scores, bounding box 회귀 값, 앵커 정보 등이 포함됩니다.
      • 예시 Shape:
        • classification: (B, num_anchors, num_classes)
        • prediction: (B, num_anchors, 4) 등 (정확한 shape은 헤드 구성에 따라 다름)
    2. map_output:

      • 지도 정보 추출 헤드의 결과로, 각 지도 요소(차선, 경계선 등)의 예측 결과를 포함합니다.
      • Shape는 구성에 따라 다르며, 보통 (B, num_map_instances, …) 형태.
    3. 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. 설정파일이 만드는 유니크한 행동양식

  1. 멀티태스크 통합:

    • 설정 파일에서 task_config에 따라 detection, map, 그리고 motion planning 작업을 모두 활성화합니다.
    • V1SparseDriveHead는 세 가지 하위 헤드를 동시에 구성하고, 각각의 예측 결과를 통합하여 반환합니다.
  2. 플러그인 시스템 활용:

    • plugin=Trueplugin_dir="projects/mmdet3d_plugin/" 설정을 통해, 커스텀 모듈(예: 모션 플래닝 헤드, Diffusion 기반 모듈 등)이 자동으로 로드되고 등록됩니다.
    • 특히, motion_plan_head는 diffusion 기반 모션 플래닝(논문에서 제안한 truncated diffusion policy 등)을 구현한 모듈(V13MotionPlanningHead)로 구성되어 있으며, 이는 기존 회귀 기반 예측보다 다중 모드 예측의 다양성을 개선합니다.
  3. 데이터 전처리 및 후처리:

    • NuScenes3D Dataset을 기반으로 하는 복합 데이터 파이프라인을 통해, 다중 뷰 이미지, 지도 정보, 그리고 GT 모션 정보가 입력됩니다.
    • 각 파이프라인 단계(LoadMultiViewImage, ResizeCropFlipImage, NormalizeMultiviewImage, NuScenesSparse4DAdaptor 등)가 적용되어 모델 입력을 최적화
    • 후처리 단계에서는 각 헤드에서 예측한 결과를 결합하여, 하나의 통합 결과(dict)를 생성
  4. FP16 혼합 정밀도 및 최적화:

    • 설정 파일의 fp16 설정과 optimizer, learning rate scheduler 설정 등은 학습뿐 아니라 inference 파이프라인에서도 효율성을 높이는 데 기여합니다.

profile
ad_official

0개의 댓글