이 글은 3차원 포인트 클라우드 Segment 모델 Anything 3D를 간략히 설명한다.
Segment Anything 3D 예시
머리말
홍콩대에서 개발한 Segment Anything 모델은 2D 이미지 세그먼트 정보를 3D 공간에 맵핑해, 3D 세그먼트를 예측한다.
설치 방법
소스 코드를 다운로드 받은 후, 다음과 같이 터미널에서 실행한다.
conda create -n sam3d python=3.8 -y
conda activate sam3d
conda install pytorch==1.11.0 torchvision==0.12.0 torchaudio==0.11.0 cudatoolkit=11.3 -c pytorch
conda install plyfile -c conda-forge -y
pip install scikit-image opencv-python open3d imageio
pip install git+https://github.com/facebookresearch/segment-anything.git
cd libs/pointops
python setup.py install
TORCH_CUDA_ARCH_LIST="ARCH LIST" python setup.py install
cd ../..
데이터 준비 방법
다음과 같이 테스트 데이터셋을 다운로드한다.
- ScanNet: http://www.scan-net.org
ScanNet 전처리 코드를 다음과 같이 실행한다.
python scannet-preprocess/preprocess_scannet.py --dataset_root ${RAW_SCANNET_DIR} --output_root ${PROCESSED_SCANNET_DIR}
RGBD 데이터를 준비한다 (링크).
python scannet-preprocess/prepare_2d_data/prepare_2d_data.py --scannet_path data/scannetv2 --output_path data/scannetv2_images --export_label_images
모델 실행하기
다음과 같이 환경 변수를 설정한 후, sam3d.py를 실행한다.
# RGB_PATH: the path of rgb data
# DATA_PATH: the path of pointcload data
# SAVE_PATH: Where to save the pcd results
# SAVE_2DMASK_PATH: Where to save 2D segmentation result from SAM
# SAM_CHECKPOINT_PATH: the path of checkpoint for SAM
python sam3d.py --rgb_path $RGB_PATH --data_path $DATA_PATH --save_path $SAVE_PATH --save_2dmask_path $SAVE_2DMASK_PATH --sam_checkpoint_path $SAM_CHECKPOINT_PATH
데이터 처리 파이프라인은 다음과 같이 실행된다.
SAM 마스크: 생성 SAM을 사용하여 2D 프레임에서 세그먼트 마스크를 가져온 다음, 깊이 정보를 통해 3D 공간에 매핑한다.
두 개의 인접 포인트 클라우드 병합: Bidirectional-group-overlap-algorithm을 사용해 두 개의 인접한 포인트 클라우드를 병합한다.
영역 병합: 영역 별로 전체 포인트 클라우드를 병합한다.
병합 후 세그먼테이션 결과 생성: 기본 매개 변수를 사용하여 Felzenswalb 및 Huttenlocher의 그래프 기반 이미지 분할 알고리즘을 장면에 적용한다. 그런 다음 2개의 세그멘테이션 결과를 병합하여 최종 결과를 얻는다.
댓글 없음:
댓글 쓰기