bash ./tools/dist_test.sh \
projects/configs/diffusiondrive_configs/diffusiondrive_small_stage2.py \
ckpt/diffusiondrive_nusc_stage2.pth \
1 \
--deterministic \
--eval bbox
# tools/dist_test.sh
#!/usr/bin/env bash -> 이 스크립트를 bash 셸에서 실행하도록 지정
CONFIG=$1 -> projects/configs/diffusiondrive_configs/diffusiondrive_small_stage2.py
CHECKPOINT=$2 -> ckpt/diffusiondrive_stage2.pth
GPUS=$3 -> 8
PORT=${PORT:-29610}
"""
dirname $0는 이 스크립트 파일의 디렉토리 경로(tools)를 의미
여기서 /..를 붙여 상위 디렉토리를 지정하고,
이를 기존의 PYTHONPATH 앞에 추가
즉, 프로젝트의 최상위 디렉토리가 PYTHONPATH에 포함되어
파이썬 모듈들을 올바르게 임포트할 수 있도록 합니다.
"""
PYTHONPATH="$(dirname $0)/..":$PYTHONPATH \
"""
python3 -m torch.distributed.launch
파이토치의 분산 실행 모듈을 이용해서 여러 GPU를 사용할 수 있도록 테스트 스크립트를 실행
--nproc_per_node=$GPUS
노드 당 실행할 프로세스 수를 GPUS 변수의 값(여기서는 8)으로 지정
--master_port=$PORT
분산 실행 시 통신에 사용할 포트를 지정
--launcher pytorch 옵션
실행 환경이 PyTorch 분산 환경임을 알림
${@:4}는 네 번째 이후의 모든 인자를 의미
"""
python3 -m torch.distributed.launch --nproc_per_node=$GPUS
--master_port=$PORT $(dirname "$0")/test.py
$CONFIG $CHECKPOINT --launcher pytorch ${@:4}
tools/test.py를 분산 실행 모듈을 이용해서 실행. 인자로는 "--nproc_per_node=8": 한 노드(여기서는 당신의 컴퓨터)에 8개의 프로세스를 실행하라는 의미
tools/test.py를 분산 실행 모듈을 이용해서 실행. 인자로는 설정 및 초기화:
구성 파일과 체크포인트 등 설정 정보를 읽고, 데이터와 모델 구성:
cfg.model.train_cfg = None
model = build_detector(cfg.model, test_cfg=cfg.get("test_cfg"))
checkpoint = load_checkpoint(model, args.checkpoint, map_location="cpu")
모델은 분산(또는 단일 GPU) 처리를 위해 적절히 래핑
테스트 및 평가:
테스트 함수(single_gpu_test 또는 custom_multi_gpu_test)를 이용해 모델 추론 결과를 수집명령행 인자 파싱
parse_args() 함수가 호출되어, projects/configs/diffusiondrive_configs/diffusiondrive_small_stage2.py) ckpt/diffusiondrive_stage2.pth) --deterministic, --eval bbox) 등이 파싱되어 변수에 저장됩니다.구성 파일 로드 및 플러그인 임포트
Config.fromfile()를 사용해 구성 파일을 읽어 plugin: True가 설정되어 있으면,plugin_dir에 있는 사용자 정의 모듈들이 자동으로 임포트되어 분산 환경 초기화
--launcher 옵션을 확인하여 -> 분산 실행 여부를 결정init_dist() 함수를 호출하여 랜덤 시드 및 작업 디렉토리 설정
work_dir가 없다면, 기본적으로 config 파일 이름을 기반으로 작업 디렉토리를 생성데이터셋 및 데이터로더 구성
build_dataset() 함수를 호출하여 데이터셋 객체를 만듭니다.build_dataloader() (분산용) 또는 원래의 build_dataloader_origin() (싱글 GPU용) 함수를 이용하여 데이터 로더를 구성모델 생성 및 체크포인트 로드
model 변수를 기반으로, build_detector() 함수를 호출하여 모델 인스턴스를 생성모델의 병렬 처리 래핑
MMDistributedDataParallel로 모델을 감싸고, MMDataParallel로 감싸서 테스트 수행 및 결과 수집
custom_multi_gpu_test() 함수를 호출해, 모든 프로세스가 테스트를 수행하고 결과를 모음single_gpu_test() 함수로 테스트를 진행outputs에 저장결과 저장 및 평가
--out 옵션이 있다면, --eval bbox 옵션에 따라, 구성 파일 내 평가 설정과 추가 평가 옵션을 합쳐서 evaluate() 함수를 호출, bash ./tools/dist_test.sh \
projects/configs/diffusiondrive_configs/diffusiondrive_small_stage2.py \
ckpt/diffusiondrive_stage2.pth \
8 \
--deterministic \
--eval bbox
모델 구조와 데이터셋, 학습/평가 설정을 기반으로, plugin = True와 plugin_dir = "projects/mmdet3d_plugin/"가 설정되어 있으므로, mmcv의 레지스트리(예: PLUGIN_LAYERS, HEADS 등)에 등록data.test 설정에 따라 NuScenes3DDataset 형태의 테스트 데이터셋 객체가 생성테스트 파이프라인(이미지 로딩, 전처리, 정규화, Collect 등)이 적용model 딕셔너리를 바탕으로, build_detector() 함수를 호출하여 모델 인스턴스가 생성head 모듈(여기서는 V1SparseDriveHead)이 포함head 모듈 내부에는 motion_plan_head가 구성되어 있으며, 이 안에 refine_layer가 "V11MotionPlanningRefinementModule"으로 설정되어 있습니다.