cfslam_pipeline_batch.py

About_work·2024년 9월 1일
0

global mapper

목록 보기
36/37
  • node는 물체
    • 위치/크기 + semantic 설명 + semantic feature vector 을 함께 저장
  • edge는 가까운 물체간 관계
    • 연결 뿐만 아니라, 두 물체간 상관관계를 text로 함께 저장.

1. README 개요

4.3. Run the 3D object mapping system

  • 다음 명령어는 위의 image segmentation 결과를 사용하여
    • object-based 3D map of the scene를 생성합니다.
  • save_objects_all_frames=True를 사용하여, 매 프레임마다 매핑 결과를 저장할 수 있습니다.
    • 이렇게 저장된 결과는 애니메이션 시각화에 사용할 수 있습니다.
      • scripts/animate_mapping_interactive.pyscripts/animate_mapping_save.py를 통해
  • merge_interval=20, merge_visual_sim_thresh=0.8, merge_text_sim_thresh=0.8을 사용하여
    • 매핑 과정 중 중첩 기반 병합을 수행할 수 있습니다.

4.3.1. ConceptGraphs 사용 (open-vocab 탐지기 없이)

THRESHOLD=1.2
python slam/cfslam_pipeline_batch.py \
    dataset_root=$REPLICA_ROOT \
    dataset_config=$REPLICA_CONFIG_PATH \
    stride=5 \
    scene_id=$SCENE_NAME \
    spatial_sim_type=overlap \
    mask_conf_threshold=0.95 \
    match_method=sim_sum \
    sim_threshold=${THRESHOLD} \
    dbscan_eps=0.1 \
    gsa_variant=none \
    class_agnostic=True \
    skip_bg=True \
    max_bbox_area_ratio=0.5 \
    save_suffix=overlap_maskconf0.95_simsum${THRESHOLD}_dbscan.1_merge20_masksub \
    merge_interval=20 \
    merge_visual_sim_thresh=0.8 \
    merge_text_sim_thresh=0.8

4.3.2. ConceptGraphs-Detect 사용

SCENE_NAMES=room0
THRESHOLD=1.2
python slam/cfslam_pipeline_batch.py \
    dataset_root=$REPLICA_ROOT \
    dataset_config=$REPLICA_CONFIG_PATH \
    stride=5 \
    scene_id=$SCENE_NAME \
    spatial_sim_type=overlap \
    mask_conf_threshold=0.25 \
    match_method=sim_sum \
    sim_threshold=${THRESHOLD} \
    dbscan_eps=0.1 \
    gsa_variant=ram_withbg_allclasses \
    skip_bg=False \
    max_bbox_area_ratio=0.5 \
    save_suffix=overlap_maskconf0.25_simsum${THRESHOLD}_dbscan.1
  • 위 명령어들은 매핑 결과를 $REPLICA_ROOT/$SCENE_NAME/pcd_saves에 저장
    • 두 개의 pkl.gz 파일이 생성되며,
    • _post 접미사가 있는 파일은 일부 후처리 후의 결과를 나타내며, 이 결과를 사용하는 것을 권장
  • 위 명령어를 save_objects_all_frames=True 옵션과 함께 실행하면,
    • $REPLICA_ROOT/$SCENE_NAME/objects_all_frames에 폴더가 생성
    • 그런 다음 다음 명령어를 실행하여 매핑 과정을 시각화하거나 비디오로 저장할 수 있음
    • 사용 가능한 시각화 옵션에 대한 키 콜백은 관련 파일을 참조
python scripts/animate_mapping_interactive.py --input_folder $REPLICA_ROOT/$SCENE_NAME/objects_all_frames/<folder_name>
python scripts/animate_mapping_save.py --input_folder $REPLICA_ROOT/$SCENE_NAME/objects_all_frames/<folder_name>


2. 코드 분석

  • 이 코드는 3D 공간에서 객체를 감지하고 추적하는 시스템을 구축하는 데 사용
  • 이 시스템은 SLAM과 유사한 방식으로 작동하여,
    • 카메라가 움직이는 동안 객체를 지속적으로 감지하고,
    • 이전에 감지된 객체새롭게 감지된 객체를 매칭하여 3D 모델을 갱신

2.1. 코드의 작동 방식 요약

  • 데이터 로드: 코드가 시작되면 설정값을 읽고 데이터셋을 초기화
  • 객체 감지:
    • 각 프레임에서 객체를 감지하고, 기존 객체와 매칭하여 모델을 업데이트
  • 데이터 저장:
    • 주기적으로 객체 데이터를 후처리하고, 필요에 따라 시각화 및 저장
  • 비디오 생성:
    • 마지막으로 모든 프레임을 시각화한 결과를 비디오로 저장합니다.

2.2. 환경 설정 및 데이터셋 로딩

  • Imports 및 라이브러리 초기화:
    • hydraomegaconf를 사용하여 설정 파일(yaml)에서 설정값을 읽어옵니다.
  • compute_match_batch 함수:
    • 이 함수는 새로운 객체 감지기존 객체 간의 매칭을 수행
    • 공간적 유사도(spatial_sim)와 시각적 유사도(visual_sim)를 기반으로,
      • 새로 감지된 객체를 기존 객체와 연결
    • 이 매칭 방식은 sim_sum 방법을 사용하며,
      • 유사도의 합이 가장 큰 객체와 매칭
  • prepare_objects_save_vis 함수:
    • 이 함수는 객체 데이터를 저장하거나 시각화하기 위해 전처리
    • 객체의 포인트 클라우드를 다운샘플링하고, 필요 없는 키를 제거하여 데이터를 간소화
  • process_cfg 함수:
    • 이 함수는 설정 파일에서 필요한 설정값을 가져오고, 데이터셋의 이미지 해상도를 설정
    • 데이터셋이 multiscan.yaml인지 아닌지에 따라 처리 방식이 달라집니다.

2.3. 객체 감지 및 매칭 과정

  • 메인 함수 (main):
    • hydra의 데코레이터(@hydra.main)를 통해 yaml 설정 파일에서 설정값을 읽어옵니다.
    • 코드의 핵심 흐름이 여기서 시작됩니다.
  • 데이터셋 초기화:
    • 설정값(cfg)을 처리한 후, get_dataset 함수를 통해 데이터셋을 로드
    • 데이터셋은 이미지 시퀀스와 관련된 메타데이터(깊이, 카메라 내재 행렬 등)를 포함
  • 배경 객체 처리:
    • BG_CLASSES에 지정된 "벽", "바닥", "천장"과 같은 배경 클래스들을 따로 처리
    • 각 배경 객체들은 한 번에 하나씩 모델에 통합
  • 시각화 초기화:
    • OnlineObjectRenderer를 사용하여, 객체의 시각화를 위한 초기 설정 진행
    • 시각화 결과는 frames 리스트에 저장되어 나중에 비디오로 변환

2.4. 객체 데이터의 통합 및 저장

  • 객체 감지 및 매칭:

    • 각 프레임에 대해 gobs_to_detection_list 함수가 호출되어,
      • 객체 감지 정보를 처리하고, 포인트 클라우드를 생성
    • 그 후,
      • 기존 객체와 감지된 객체를 매칭하여, 새로운 객체를 기존 모델에 통합
      • 이때 공간적 유사도와 시각적 유사도를 계산하여 객체의 일치성을 판단
  • 객체 매칭:

    • 객체 매칭을 위해 compute_spatial_similarities, compute_visual_similarities, aggregate_similarities와 같은 함수를 사용합니다.
    • 이러한 유사도를 바탕으로 객체 매칭을 수행하며, 그 결과로 객체를 통합하거나 새로운 객체로 추가합니다.
  • 객체 데이터의 후처리:

    • 일정 주기마다 객체 데이터를 후처리합니다.
    • 이 후처리 과정은 denoise_objects, filter_objects, merge_objects 등의 함수를 통해 수행됩니다.
    • 후처리 후, 객체 데이터를 저장하거나 비디오로 시각화하는 작업이 이어집니다.

2.5. 결과 시각화 및 비디오 생성

  • 결과 시각화:
    • 각 프레임에서 감지된 객체와 기존 객체를 시각화하고, 이를 frames 리스트에 저장
    • 최종적으로 이 시각화된 결과는 비디오 파일로 저장
  • 결과 저장:
    • 모든 객체 데이터를 pickle 형식으로 저장
    • 이 데이터에는 객체의 포인트 클라우드, 카메라 포즈, 설정값 등이 포함
profile
새로운 것이 들어오면 이미 있는 것과 충돌을 시도하라.

0개의 댓글