[DiffusionDrive][nuscenes] V1SparseDrive

ad_official·2025년 2월 6일

diffusion planning

목록 보기
4/19

개요

일반적 설명

  • V1SparseDrive 클래스는 end-to-end 자율주행 시스템의 “감지기(detector)” 역할을 수행
  • 즉, 다중 카메라 입력으로부터 특징(feature)을 추출하고,
    • 이를 기반으로 객체 검출(모션/플래닝) 예측을 수행하는 모듈

1. 주요 구성요소 및 역할

  • 이미지 백본 (img_backbone):

    • CNN(예: ResNet) 기반의 백본을 사용해 입력 이미지에서 고수준 특징을 추출합니다.
    • 입력이 다중 뷰(multi-view)일 경우, (batch, num_cams, ...)의 형태로 들어오며 내부에서 (batch×num_cams, …)로 평탄화되어 처리됩니다.
  • 이미지 넥(neck):

    • 백본에서 추출된 특징을 여러 스케일로 집합하여, 후속 헤드가 효과적으로 활용할 수 있도록 가공합니다.
    • 예를 들어, FPN(Feture Pyramid Network)처럼 동작하여 여러 해상도의 특징 맵을 생성합니다.
  • 헤드 (head): V1SparseDriveHead

    • V1SparseDriveHead
    • 객체 검출모션 플래닝 예측을 담당합니다.
    • input
      • 추출된 다중 뷰 특징(feature maps)
      • 추가 데이터(메타 정보, GT 정보 등)
    • output
      • 최종적인 예측 결과(예: bounding box, 주행 궤적 등)를 생성
    • 학습 시에는 손실(loss)을 계산합니다.
  • Depth Branch (옵션):

    • 추가적인 깊이 정보를 예측하는 모듈로,
      • 만약 설정되면 추출된 특징으로부터 depth map을 예측하고,
      • GT depth와 비교하여 손실을 계산
  • Grid Mask:

    • 학습 시 데이터 증강(data augmentation)의 한 형태로 사용되며,
    • 이미지에 랜덤 패턴의 마스크를 적용하여 모델의 일반화 능력을 높임
  • 옵션 – Deformable 기능:

    • deformable aggregation 관련 함수(DAF)를 사용할 수 있도록 선택적으로 활성화할 수 있습니다.

2. 주요 메서드와 동작 흐름

  • extract_feat(img, return_depth, metas):

    • 입력:
      • img: 다중 뷰 이미지 텐서. 보통 shape은
        [B, N, C, H, W]
        (B: 배치 크기, N: 카메라 수, C: 채널 수, H×W: 이미지 해상도)
      • metas: 카메라 행렬, focal 등 메타 정보 (옵션)
      • return_depth: 깊이(branch 사용 시 True 설정)
    • 동작:
      • 만약 입력 img의 차원이 5라면 (즉, 다중 뷰) flatten하여 (B×N, C, H, W)로 만든 뒤, grid mask를 적용합니다.
      • 백본을 통해 특징을 추출하고, 넥을 통과시켜 여러 스케일의 feature maps을 생성합니다.
      • 각 feature map은 다시 원래 배치 및 카메라 차원 (B, N, …)으로 재구성됩니다.
      • 옵션으로, depth branch를 이용해 깊이 예측 결과도 반환합니다.
    • 출력:
      • feature_maps: List[Tensor] — 각 Tensor의 shape은 보통 (B, N, C_i, H_i, W_i)
      • depths (옵션): 예측된 depth map 텐서
  • forward:

    • 학습/테스트 모드에 따라 forward_train 또는 forward_test를 호출합니다.
  • forward_train(img, data):**

    • 입력:
      • img: 위와 같이 다중 뷰 이미지 텐서
      • data: GT 정보(예: gt_depth, GT trajectory, 기타 메타 데이터 등)
    • 동작:
      • extract_feat로 이미지에서 feature_maps (및 depth, 옵션)를 추출한 후, 헤드에 전달하여 예측 결과(model_outs)를 생성합니다.
      • 헤드의 loss 함수를 통해 예측 결과와 GT 간의 손실을 계산합니다.
    • 출력:
      • 손실 딕셔너리(loss dict)
  • forward_test(img, data) / simple_test(img, data):

    • 입력:
      • img: 다중 뷰 이미지 텐서 (또는 list로 들어오는 경우 aug_test를 사용)
      • data: 메타 정보 및 기타 입력
    • 동작:
      • extract_feat를 통해 feature_maps을 추출한 뒤,
      • 헤드로부터 모델의 예측 결과(model_outs)를 얻고,
      • 후처리(post_process)를 통해 최종 검출 결과를 생성
    • 출력:
      • 보통 List[dict] 형태로, 각 dict는 예측 결과(예: "img_bbox": bounding boxes 등)를 담습니다.

3. 종합적 설명 (논문 및 코드 기반)

논문(예: DiffusionDrive 논문)에서는 end-to-end 자율주행 시스템에서 센서(카메라) 데이터를 입력받아, 다중 모드 주행 경로 및 객체 검출을 동시에 수행하는 방식을 제안합니다.
V1SparseDrive 클래스는 이 시스템의 “감지기” 부분으로,

  • 이미지 백본/넥을 통해 입력 이미지로부터 다양한 스케일의 특징을 추출하고,
  • 헤드를 통해 객체 검출, 모션/플래닝 예측(예: 주행 경로, trajectory 예측 등)을 수행하며,
  • 필요에 따라 depth branch를 통해 깊이 정보를 보조적으로 학습

설정 파일 기반 설명

  • detection, map, motion planning(플래닝) 세 가지 작업을 동시에 수행하도록 구성되어 있습니다.
  • 여러 서브 모듈(예: DenseDepthNet, V1SparseDriveHead 등)을 조합하여 최종적으로 객체(혹은 경로) 예측 결과를 생성

4. 요약

V1SparseDrive는 설정파일에서 정의된 대로,

  • 입력: 다중 뷰 이미지 (shape: [B, N, 3, 704, 256]) 및 관련 메타 데이터
  • 내부 처리:
    • ResNet-50 백본과 FPN 넥을 사용해 다중 스케일 feature maps을 추출하고,
    • Grid Mask로 증강하며,
    • 통합 헤드(V1SparseDriveHead)를 통해
      • detection, 지도(map), 모션 플래닝 작업을 동시에 수행
    • 특히, 모션 플래닝은 diffusion 기반 정제 과정을 통해 다중 모드 주행 경로를 예측
  • 출력:
    • 최종 추론 결과는 리스트 형태의 dict로 반환되며,
    • 여기에는 “img_bbox” 또는 플래닝 결과가 포함되어, 자율주행의 후처리에 활용

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

입력

  • 이미지 텐서 (img):

    • 형태: 보통 [B, N, C, H, W]
      • B: 배치 크기
      • N: 카메라 수 (예: 6)
      • C: 채널 수 (예: 3)
      • H×W: 이미지 해상도 – 설정파일에서는 input_shape = (704, 256)로 지정되어 있으므로, 각 이미지가 (704,256) 크기로 리사이즈됨
    • 특징:
      • 다중 뷰 이미지를 처리하며, 내부에서는 (B×N, C, H, W)로 평탄화한 후 백본에 넣고, 추출된 feature maps은 다시 (B, N, …) 형태로 복원됩니다.
    • 전처리:
      • 테스트 파이프라인에서는 LoadMultiViewImageFromFiles, ResizeCropFlipImage, NormalizeMultiviewImage 등의 파이프라인 단계를 거쳐 입력됩니다.
  • 추가 데이터 (data):

    • 메타 정보, projection matrix, 이미지 크기,
    • 그리고 자율주행에 필요한 GT 정보(예: gt_ego_fut_trajs, gt_ego_fut_cmd 등)가 포함
    • 특히, 플래닝 관련 정보는 후처리 단계에서 모션 플래닝 헤드가 활용

출력

  • 추론 결과:
    • V1SparseDrive의 forward_testsimple_test 메서드가 호출되어,
      • feature_maps을 추출한 후 헤드(V1SparseDriveHead)에 전달하고,
      • 헤드의 post_process 메서드를 통해 최종 결과를 생성합니다.
    • 형태: 최종적으로 List[dict] 형태로 출력되며, 각 dict는 보통 "img_bbox"라는 키를 가지고 예측된 bounding box 혹은 주행 경로, 모션 플래닝 결과 등을 담습니다.
  • 모션 플래닝/플래닝 결과:
    • 설정파일에서 task_config가 플래닝 작업(with_motion_plan=True)을 포함하고 있으므로,
      • 헤드 내부의 모션 플래닝 모듈(V13MotionPlanningHead)에서 주행 궤적(trajectory) 예측 및 플래닝 결과가 생성
    • 이 결과는 detection 결과와 달리 주행 경로, 예측된 trajectory, 혹은 future motion에 대한 정보를 포함할 수 있습니다.

3. 설정파일의 유니크한 행동양식

  • 모듈 통합 구성:

    • 다중 작업: detection, map, 그리고 motion planning을 한 모델 안에 통합하여 end-to-end 방식으로 예측
    • 플러그인 시스템 활용:
  • Diffusion 기반 모션 플래닝:

    • 모션 플래닝 헤드 내에 diffusion scheduler(DDIMScheduler)를 포함하여,
      • 여러 단계의 denoising 과정을 통해, 주행 궤적을 정제하는 diffusion 프로세스가 적용
    • 이는 논문(예: DiffusionDrive)에서 제안한 방식과 일치하며, 기존 단순 회귀 방식보다 다중 모드 예측 및 diversity를 높이는 역할을 합니다.
  • Grid Mask 데이터 증강:

    • use_grid_mask = True 설정으로, 입력 이미지에 Grid Mask augmentation이 적용되어,
      • 모델이 다양한 패턴의 occlusion 상황에 강인하게 학습
  • FP16 혼합 정밀도:

    • 설정파일에 fp16 = dict(loss_scale=32.0)이 있어,
      • 학습뿐 아니라 추론 시에도 FP16 혼합 정밀도를 사용할 수 있도록 구성되어 있어, GPU 메모리 사용을 최적화
  • 데이터 파이프라인:

    • NuScenes3D Dataset을 기반으로 하는
      • 다중 뷰 이미지,
      • 벡터화된 지도 정보, 그리고
      • 다양한 센서(예: LiDAR는 옵션) 데이터가 통합되어 처리
    • 테스트 파이프라인에서는 ResizeCropFlipImage, NormalizeMultiviewImage, NuScenesSparse4DAdaptor 등이 적용되어, 모델이 필요한 입력 형태로 데이터를 전처리

profile
ad_official

0개의 댓글