[DiffusionDrive][NavSim] 구동방법

ad_official·2025년 2월 22일

diffusion planning

목록 보기
11/19

1. Getting started from NAVSIM environment preparation

1.1. Download and installation

git clone https://github.com/autonomousvision/navsim.git
cd navsim

Download the dataset

  • 아래 3가지를 다운받아야 함
    • OpenScene logs
      • 각 드라이빙 세션의 메타데이터를 기록한 파일 모음
      • 포함정보
        • 타임스탬프, 차량 상태, 센서 캘리브레이션 정보
        • 각 센서에서 생성된 데이터 파일(예: 이미지, 포인트 클라우드) 경로 및 관련 참조 정보
        • 주행 환경, 시나리오, 그리고 주행에 관련된 기타 정보
    • sensor blobs
      • 수집된 원시 센서 데이터를 이진 파일 형태로 저장한 것
      • 카메라 이미지, LiDAR 스캔, 레이더 데이터 등
      • 각 데이터는 OpenScene logs에서 참조되어, 시간 및 위치 정보와 함께 사용됩니다.
    • nuPlan maps
      • 고해상도 정적 맵 데이터
      • 도로 형상, 차선, 교차로, 교통 표지판 등

  • nuPlan maps ( mini split / test split ) 을 다운받을 수 있는 링크를 제공함
    • cd download && ./download_maps.sh

  • data splits을 다운로드 받는 방법
    • dataset splits 이 추천되는 Standard training/test splits 와 정확히 매칭되지 않음
    • Standard training / test splits에 대한 overviews를 보고 싶으면 splits 를 참고해라.
      • splits에 대한 크기 정보가 포함되어 있다.
      • 위 링크를 보고 어떤 splits를 다운받을지를 정해라.

  • 아래 4가지 옵션이 있다.
./download_mini
./download_trainval
./download_test
./download_private_test_e2e
# "navtrain" training split에 필요한 -> trainval의 일부를 다운 받고 싶으면, 아래를 이용해라.
./download_navtrain
  • navtest 는 따로 다운받을 수 없고, test 를 다운 받으면 된다.
    • test 자체의 용량이 크지 않기 떄문이다.
    • 실험돌릴때, train_test_split=navtest 로 설정하면 된다.

  • 다운로드된 폴더를 적절히 잘 옮겨서, 아래의 폴더 트리 구조를 만들어라.
~/navsim_workspace
├── navsim (containing the devkit)
├── exp
└── dataset
    ├── maps
    ├── navsim_logs
    |    ├── test
    |    ├── trainval
    |    ├── private_test_e2e
    │    └── mini
    └── sensor_blobs
         ├── test
         ├── trainval
         ├── private_test_e2e
         └── mini
  • ~/.bashrc 에 아래를 추가하여, 필요로 하는 환경 변수를 세팅해라. (위 structure 구조 기반)
export NUPLAN_MAP_VERSION="nuplan-maps-v1.0"
export NUPLAN_MAPS_ROOT="$HOME/PycharmProjects/dataset/maps"
export NAVSIM_EXP_ROOT="$HOME/PycharmProjects/exp"
export NAVSIM_DEVKIT_ROOT="$HOME/PycharmProjects/navsim"
export OPENSCENE_DATA_ROOT="$HOME/PycharmProjects/dataset"
export CKPT="$HOME/PycharmProjects/DiffusionDrive/ckpt/diffusiondrive_navsim_88p1_PDMS"
export NUPLAN_MAP_VERSION="nuplan-maps-v1.0"
export NUPLAN_MAPS_ROOT="$HOME/PycharmProjects/dataset/maps"
export NAVSIM_EXP_ROOT="$HOME/PycharmProjects/exp"
export NAVSIM_DEVKIT_ROOT="$HOME/PycharmProjects/DiffusionDrive"
export OPENSCENE_DATA_ROOT="$HOME/PycharmProjects/dataset"
export CKPT="$HOME/PycharmProjects/DiffusionDrive/ckpt/diffusiondrive_navsim_88p1_PDMS"

Install the navsim-devkit

conda env create --name navsim -f environment.yml
conda activate navsim
pip install -e .


1.2. Understanding and creating agents



1.3. Understanding the data format and classes

  • OpenScene은 대규모 nuPlan 데이터셋을 간소화하여 재배포한 것으로, 관련된 주석과 센서 데이터만 2Hz로 유지합니다. 이를 통해 데이터셋 크기를 10배 이상 줄일 수 있습니다.
  • NAVSIM에서 사용되는 데이터는 navsim.common.dataclasses.Scene 객체로 구성
    • Scene은 학습을 위한 주행 계획 Agent의 입력과 주석을 포함하는 각 Frame 객체들의 리스트
  • 캐싱.
    • 플래너를 평가하는 과정에서는 각 Frame에서 전역 지도를 접근하고 이를 지역 좌표계로 변환하는 등, 원시 주석 데이터를 대대적으로 전처리하는 과정이 포함
    • 다음 명령어로 캐시를 생성할 수 있습니다.
cd $NAVSIM_DEVKIT_ROOT/scripts/
./run_metric_caching.sh
  • 이 명령어는 설치 시 설정된 환경 변수에 의해 정의된 $NAVSIM_EXP_ROOT 아래에 metric cache를 생성


1.5. The Predictive Driver Model Score (PDMS)

  • PDM 점수는 주행 성능의 다양한 측면을 종합적으로 분석할 수 있도록 다섯 개의 하위 메트릭을 조합한 것입니다.
  • 이 하위 메트릭 중 다섯 개는 이산 값이며, 하나는 연속 값입니다.
  • 모든 메트릭은 플래너 출력의 4초간 비반응 시뮬레이션 후에 계산
    • 백그라운드 액터들은 기록된 미래 궤적을 따르고, ego 차량은 LQR 컨트롤러에 따라 이동
  • PDM 점수의 전체 구성은 아래와 같이 자세히 설명되어 있습니다.
메트릭가중치범위
무과실 충돌 (NC)multiplier{0, 1/2, 1}
주행 가능 영역 준수 (DAC)multiplier{0, 1}
Time to Collision (TTC) 제한 내5{0, 1}
Ego Progress (EP)5[0, 1]
Comfort (C)2{0, 1}
Driving Direction Compliance (DDC)0{0, 1/2, 1}

참고: Driving Direction Compliance (DDC) 메트릭은 PDMS에서 가중치가 0이므로 무시됩니다.

즉,
PDMS = NC * DAC * (5*TTC + 5*EP + 2*C + 0*DDC) / 12

  • 에이전트의 PDM 점수를 평가하려면 다음 명령어를 실행하면 됩니다.
cd $NAVSIM_DEVKIT_ROOT/scripts/
./run_cv_pdm_score_evaluation.sh
  • 기본적으로, 이 명령어는 간단한 일정 속도 기반 플래닝 baseline에 대한 평가 csv 파일을 생성합니다.
    • 스크립트를 수정하여 여러분의 플래닝 에이전트를 평가할 수도 있습니다.
  • 예를 들어, $NAVSIM_DEVKIT_ROOT/navsim/navsim/planning/script/config/pdm_scoring/agent/my_new_agent.yaml 아래에 여러분의 에이전트를 위한 새로운 구성을 추가할 수 있습니다.
  • 그 후, 스크립트에 오버라이드 agent=my_new_agent를 추가하는 것만으로 여러분의 에이전트를 실행할 수 있습니다.
  • 예제는 run_human_agent_pdm_score_evaluation.sh에서 확인할 수 있습니다.


1.6. Submitting to the Leaderboard




2. Peparation of DiffusionDrive environment

  • 빠르게 다운로드 받는법
cd /path/to/DiffusionDrive/download
bash super_download.sh
  • 요약하자면, 이 스크립트는 tmux를 이용해 여러 창과 분할 창에서 동시에
    • OpenScene 메타데이터navtrain 데이터(split별 현재 및 히스토리 파일)를 자동으로 처리하는 역할
    • 네 개의 센서 데이터 스플릿(각각 현재와 과거 데이터 파일)을 자동으로 다운로드, 압축 해제, 정리 및 지정된 폴더로 이동시키는 작업

  • 표준 방법
conda env create --name navsim2 -f environment.yml
conda activate navsim2
python setup.py build develop
pip install -e .
pip install diffusers einops 



3. Training and Evaluation

3.1. 학습 및 평가 속도를 높이기 위한 데이터셋 캐싱

# 학습을 위한 데이터셋 캐싱
python navsim/planning/script/run_dataset_caching.py agent=diffusiondrive_agent experiment_name=training_diffusiondrive_agent train_test_split=navtrain

# 평가를 위한 데이터셋 캐싱
python navsim/planning/script/run_metric_caching.py train_test_split=navtest cache.cache_path=$NAVSIM_EXP_ROOT/metric_cache


3.2. 학습

  • 네트워크에 접속할 수 없는 컴퓨터를 사용하는 경우,
    • Hugging Face에서 사전 학습된 ResNet-34 모델을 다운로드한 후 학습 머신에 업로드해야 합니다.
    • 또한, 클러스터링된 앵커도 다운로드해야 합니다.
  • 학습을 시작하기 전에, 다운로드한 사전 학습된 ResNet-34 모델의 경로를 bkb_path에 올바르게 설정했는지 확인하십시오.
  • 또한, /path/to/DiffusionDrive/navsim/agents/diffusiondrive/transfuser_config.py 파일 내에서 다운로드한 클러스터링된 앵커의 경로를 plan_anchor_path에 설정하십시오.
python $NAVSIM_DEVKIT_ROOT/navsim/planning/script/run_training.py \
        agent=diffusiondrive_agent \
        experiment_name=training_diffusiondrive_agent  \
        train_test_split=navtrain  \
        split=trainval   \
        trainer.params.max_epochs=100 \
        cache_path="${NAVSIM_EXP_ROOT}/training_cache/" \
        use_cache_without_dataset=True  \
        force_cache_computation=False 


3.3. 평가

python $NAVSIM_DEVKIT_ROOT/navsim/planning/script/run_pdm_score.py \
        train_test_split=navtest \
        agent=diffusiondrive_agent \
        worker=ray_distributed \
        agent.checkpoint_path=$CKPT \
        experiment_name=diffusiondrive_agent_eval



profile
ad_official

0개의 댓글