[code] ConceptGraphs: Open-Vocabulary 3D Scene Graphs for Perception and Planning

About_work·2024년 8월 2일
0

global mapper

목록 보기
20/37

1. Updates

  • 코드베이스가 상당히 리팩토링되어 ali-dev 브랜치에 있음
    • 실시간, 간소화된 재구현이 제공되며,
    • iPhone에서 RGB-D 비디오를 지원하고
    • Rerun.io를 사용한 더 나은 시각화를 제공
  • 또한 시작하기 위한 비디오 튜토리얼도 제공됩니다. 꼭 확인해보세요!
  • Jackal 로봇을 사용한 실제 세계 매핑 및 내비게이션을 위한 코드는 여기에 오픈소스화되어 있습니다.
  • AI2Thor에서의 로컬라이제이션 및 매핑을 위한 코드는 코드베이스에 공개되어 있습니다.
    • 설명 아래를 참조하여 지침을 확인하세요.

2. 설정

  • 필요한 환경 변수는 env_vars.bash.template에서 찾을 수 있습니다.
    • 아래 설정 가이드를 따를 때, env_vars.bash.template 파일을 복사하여
      • 변수들을 적절히 변경하면 쉽게 설정할 수 있습니다.
  • https://velog.io/@jk01019/envvars.bash.template

2.1. 필요한 라이브러리 설치

  • virtualenv 또는 conda를 사용하여 가상 환경을 설정하는 것을 권장합니다.
  • 우리의 코드는 Python 3.10.12에서 테스트되었습니다.
  • 다른 이후 버전에서도 작동할 수 있습니다.
  • Conda 사용자에게는 environment.yml 파일도 제공합니다.
  • 일반적으로 .yml 파일을 사용하여 직접 conda 환경을 설치하면 예상치 못한 문제가 발생할 수 있으므로,
    • 아래 지침에 따라 환경을 설정하고 .yml 파일은 참고용으로만 사용하는 것을 권장합니다.
  • conda 사용자들을 위한 샘플 지침.
conda create -n conceptgraph anaconda python=3.10
conda activate conceptgraph

# Install the required libraries
pip install tyro open_clip_torch wandb h5py openai hydra-core distinctipy

# for yolo
pip install ultralytics

# Install the Faiss library (CPU version should be fine)
conda install -c pytorch faiss-cpu=1.7.4 mkl=2021 blas=1.0=mkl

##### Install Pytorch according to your own setup #####
# For example, if you have a GPU with CUDA 11.8 (We tested it Pytorch 2.0.1)
conda install pytorch==2.0.1 torchvision==0.15.2 torchaudio==2.0.2 pytorch-cuda=11.8 -c pytorch -c nvidia

# Install Pytorch3D (https://github.com/facebookresearch/pytorch3d/blob/main/INSTALL.md)
# conda install pytorch3d -c pytorch3d # This detects a conflict. You can use the command below, maybe with a different version
conda install https://anaconda.org/pytorch3d/pytorch3d/0.7.4/download/linux-64/pytorch3d-0.7.4-py310_cu118_pyt201.tar.bz2

# Install the gradslam package and its dependencies
# Please clone and install them in separate folders, not within the concept-graphs folder. 
git clone https://github.com/krrish94/chamferdist.git
cd chamferdist
pip install .
cd ..
git clone https://github.com/gradslam/gradslam.git
cd gradslam
git checkout conceptfusion
pip install .

2.2. Install Grounded-SAM package

2.2.1. 패키지 체크아웃

먼저 패키지를 체크아웃합니다:

git clone git@github.com:IDEA-Research/Grounded-Segment-Anything.git

2.2.2. 패키지 설치

  • 원래 GitHub 레포지토리의 명령어를 따라 패키지를 설치합니다.
  • osx 설치 단계와 "optional dependencies"는 건너뛸 수 있습니다.
  • 이 과정에서 CUDA toolkit이 설치된 위치를 CUDA_HOME으로 설정해야 합니다.
  • CUDA toolkit은 시스템 전체에 걸쳐 설정할 수 있거나 conda 환경 내에 설정할 수 있습니다.
    • 우리는 conda 환경 내에서 설치하는 방법을 테스트했습니다.

CUDA toolkit 설치

conda를 사용하여 CUDA toolkit을 설치할 수 있습니다:

conda install -c conda-forge cudatoolkit-dev

그리고 다음과 같이 export CUDA_HOME=/path/to/cuda-11.3/

export CUDA_HOME=/path/to/anaconda3/envs/conceptgraph/

로 대체해야 합니다.

모델 파일 다운로드

환경 변수 설정

설치 후 Grounded-SAM 경로를 환경 변수로 설정합니다:

export GSA_PATH=/path/to/Grounded-Segment-Anything

이 지침을 따르면 Grounded-SAM 패키지를 성공적으로 설치할 수 있습니다. 도움이 필요하면 언제든지 문의하세요!

2.3. (Optional) Set up the EfficientSAM variants

2.4. Set up LLaVA (used for scene graph generation)

3. Prepare dataset (Replica as an example)

  • ConceptGraphs는 위치가 지정된 RGB-D 이미지를 입력으로 사용합니다.
  • 여기에서는 Replica를 예시로 하여 데이터셋을 준비하는 방법을 설명합니다.
  • 원본 Replica 데이터셋 대신 Nice-SLAM에서 제공하는 스캔된 RGB-D 트랙을 다운로드합니다.
  • 이 데이터셋은 원본 Replica 데이터셋에서 제공된 메쉬 모델을 사용하여 렌더링된 트랙을 포함하고 있습니다.
  • Nice-SLAM(https://github.com/cvg/nice-slam#replica-1)의 다운로드 스크립트(https://github.com/cvg/nice-slam/blob/master/scripts/download_replica.sh)를 사용하여,
    • Replica RGB-D 스캔 데이터셋을 다운로드하고 $REPLICA_ROOT를 저장된 경로로 설정
export REPLICA_ROOT=/path/to/Replica
export CG_FOLDER=/path/to/concept-graphs/
export REPLICA_CONFIG_PATH=${CG_FOLDER}/conceptgraph/dataset/dataconfigs/replica/replica.yaml
  • ConceptGraphs는 다른 데이터셋에서도 쉽게 실행할 수 있습니다.
  • dataset/datasets_common.py를 참조하여, 자신만의 데이터 로더를 작성하는 방법을 확인하세요.

4. ConceptGraph 실행

  • 다음 명령어는 conceptgraph 폴더에서 실행해야 합니다.
cd conceptgraph

4.1. (선택 사항) 정상 작동 여부를 확인하기 위한 일반 3D reconstruction 실행


4.2. Extract 2D (Detection) Segmentation and per-resgion features


4.3. Run the 3D object mapping system

4.4. Visualize the object-based mapping results

  • 다음 명령어를 사용하여 객체 기반 3D 매핑 결과를 시각화할 수 있습니다.
python scripts/visualize_cfslam_results.py --result_path /path/to/output.pkl.gz
  • 이후 open3d 시각화 창에서 다음 키 콜백을 사용하여 시각화를 변경할 수 있습니다.
    • b를 눌러 배경 포인트 클라우드(벽, 바닥, 천장 등)를 전환할 수 있습니다.
      • 이는 ConceptGraphs-Detect에서만 작동합니다.
    • c를 눌러 태깅 모델의 객체 클래스에 따라 포인트 클라우드를 색칠할 수 있습니다.
      • 이는 ConceptGraphs-Detect에서만 작동합니다.
    • r를 눌러 RGB에 따라 포인트 클라우드를 색칠할 수 있습니다.
    • f를 누르고 터미널에 텍스트를 입력하면
      • 입력한 텍스트CLIP 유사성에 따라 포인트 클라우드를 색칠할 수 있습니다.
    • i를 눌러 객체 인스턴스 ID에 따라 포인트 클라우드를 색칠할 수 있습니다.

4.5. Evaluate semantic segmentation from the object-based mapping results on Replica datasets

  • 먼저 Google Drive 링크에서 GT point cloud with per-point semantic segmentation labels를 다운로드하세요.
  • 생성 방법에 대한 간략한 설명은 이 이슈에 있습니다.
  • 파일을 압축 해제하고 위치를 REPLICA_SEMANTIC_ROOT에 기록하세요.
  • 그런 다음 다음 명령어를 실행하여 semantic segmentation results를 평가하세요.
  • 결과는 results 폴더에 저장되며,
    • mean recall (mrecall)은 논문에 보고된 mAcc이고,
    • fmiouF-mIoU입니다.

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

python scripts/eval_replica_semseg.py \
    --replica_root $REPLICA_ROOT \
    --replica_semantic_root $REPLICA_SEMANTIC_ROOT \
    --n_exclude 6 \
    --pred_exp_name none_overlap_maskconf0.95_simsum1.2_dbscan.1_merge20_masksub

ConceptGraphs-Detect 사용 (Grounding-DINO 객체 탐지기로 사용)

python scripts/eval_replica_semseg.py \
    --replica_root $REPLICA_ROOT \
    --replica_semantic_root $REPLICA_SEMANTIC_ROOT \
    --n_exclude 6 \
    --pred_exp_name ram_withbg_allclasses_overlap_maskconf0.25_simsum1.2_dbscan.1_masksub

4.6. Extract object captions and build scene graphs

  • https://velog.io/@jk01019/buildscenegraphcfslam.py
  • openai 패키지가 설치되어 있고 APIKEY가 설정되어 있는지 확인하세요.
  • GPT-3.5는 이 작업에서 일관되지 않은 결과를 자주 생성하므로, GPT-4를 사용하는 것을 권장
export OPENAI_API_KEY=<your GPT-4 API KEY here>
  • 또한 원본 LLaVa 레포에서 다음 줄을 다음과 같이 변경해야 할 수도 있습니다.
# if output_ids[0, -keyword_id.shape[0]:] == keyword_id:
#     return True
if torch.equal(output_ids[0, -keyword_id.shape[0]:], keyword_id):
    return True
  • 그런 다음 다음 명령어들을 순차적으로 실행하여 객체별 캡션을 추출하고 3D 장면 그래프를 구축하세요.
SCENE_NAME=room0
PKL_FILENAME=output.pkl.gz  # 실제 pkl.gz 파일 이름으로 변경하세요

python scenegraph/build_scenegraph_cfslam.py \
    --mode extract-node-captions \
    --cachedir ${REPLICA_ROOT}/${SCENE_NAME}/sg_cache \
    --mapfile ${REPLICA_ROOT}/${SCENE_NAME}/pcd_saves/${PKL_FILENAME}

python scenegraph/build_scenegraph_cfslam.py \
    --mode refine-node-captions \
    --cachedir ${REPLICA_ROOT}/${SCENE_NAME}/sg_cache \
    --mapfile ${REPLICA_ROOT}/${SCENE_NAME}/pcd_saves/${PKL_FILENAME}

python scenegraph/build_scenegraph_cfslam.py \
    --mode build-scenegraph \
    --cachedir ${REPLICA_ROOT}/${SCENE_NAME}/sg_cache \
    --mapfile ${REPLICA_ROOT}/${SCENE_NAME}/pcd_saves/${PKL_FILENAME}

그런 다음 다음 명령어를 사용하여 객체 맵과 장면 그래프를 시각화할 수 있습니다.

  • g를 눌러 장면 그래프를 표시합니다.
  • +-를 눌러 포인트 클라우드 크기를 증가 및 감소시켜 더 나은 시각화를 제공합니다.
python scripts/visualize_cfslam_results.py \
    --result_path ${REPLICA_ROOT}/${SCENE_NAME}/sg_cache/map/scene_map_cfslam_pruned.pkl.gz \
    --edge_file ${REPLICA_ROOT}/${SCENE_NAME}/sg_cache/cfslam_object_relations.json
profile
새로운 것이 들어오면 이미 있는 것과 충돌을 시도하라.

0개의 댓글