이는 2023년 봄학기에 ETH 취리히 로봇 시스템 연구실에서 완료된 "내비게이션을 위한 야외 환경의 의미론적 이해" 프로젝트의 구현입니다.
프로젝트의 목표는 Wild Visual Navigation의 맥락에 중점을 두고 최근의 비지도 의미론적 분할 모델 STEGO(Hamilton et al., 2022)가 지상 이동 로봇의 실외 네비게이션 파이프라인에서 어떻게 사용될 수 있는지 조사하는 것이었습니다. 시스템(Frey & Mattamala 등).
이 패키지는 Hamilton et al의 STEGO: Distilling Feature Correspondences에 의한 Unsupervised Semantic Segmentation의 리팩터링 버전을 기반으로 구축되었습니다.
SLIC(WVN의 분할 방법), 표준 STEGO 및 자연 장면을 분할하는 이미지별 특징 클러스터링을 갖춘 STEGO.
설정
설치
데이터세트 다운로드
데이터 전처리
모델 다운로드
KNN 전처리
데모 세분화
세분화 평가
열차 분할
WVN 평가
플롯 생성
특허
저장소를 복제합니다.
git clone https://github.com/leggedrobotics/self_supervised_segmentation.git cd self_supervised_segmentation
환경을 설치합니다.
conda env create -f environment.yml conda activate stego pip install -e .
Hamilton 등이 사용하는 일반 데이터세트를 다운로드하세요.
python scripts/download_stego_datasets.py
참고: 다운로드 스크립트에 사용되는 wget
이러한 대용량 다운로드에서 항상 제대로 작동하지 않을 수 있습니다. 다운로드가 실패하는 경우 azcopy를 사용하여 선택한 데이터 세트를 다운로드해 보세요. 예를 들어 cocostuff 데이터 세트를 다운로드하려면 다음을 수행하세요.
azcopy copy https://marhamilresearch4.blob.core.windows.net/stego-public/pytorch_data/cocostuff.zip ./cocostuff.zip
cocostuff 데이터 세트의 경우 Hamilton et al. 이 프로젝트에서도 사용된 훈련 및 검증 샘플의 하위 집합을 실험에 사용합니다. 샘플 목록은 위 링크에서 데이터 세트를 다운로드하여 얻을 수 있습니다. 그런 다음 scripts/create_curated_dataset.py
사용하여 선택한 목록에 따라 선별된 데이터세트를 생성할 수 있습니다.
자연스러운 장면이 포함된 데이터 세트 다운로드:
# Download RUGD wget http://rugd.vision/data/RUGD_frames-with-annotations.zip wget http://rugd.vision/data/RUGD_annotations.zip unzip RUGD_frames-with-annotations.zip -d RUGD unzip RUGD_annotations.zip -d RUGD rm RUGD_annotations.zip RUGD_frames-with-annotations.zip # Download Freiburg Forest wget http://deepscene.cs.uni-freiburg.de/static/datasets/download_freiburg_forest_annotated.sh bash download_freiburg_forest_annotated.sh tar -xzf freiburg_forest_annotated.tar.gz rm freiburg_forest_annotated.tar.gz*
패키지와 함께 다양한 데이터 세트를 쉽게 사용할 수 있도록 전처리 스크립트가 scripts/data_preprocessing
에 추가되었습니다. 실행하기 전에 각 전처리 스크립트의 경로를 조정하세요.
코코스터프 전처리:
# Preprocess full Cocostuff python scripts/data_preprocessing/preprocess_cocostuff.py # Create the curated dataset python scripts/data_preprocessing/create_curated_dataset.py # Crop the dataset (only for training) python scripts/data_preprocessing/crop_dataset.py
RUGD 전처리:
# Preprocess RUGD python scripts/data_preprocessing/preprocess_RUGD.py # Crop the dataset (only for training) python scripts/data_preprocessing/crop_dataset.py
프라이부르크 산림 전처리:
# Preprocess Freiburg Forest python scripts/data_preprocessing/preprocess_freiburg_forest.py # Crop the dataset (only for training) python scripts/data_preprocessing/crop_dataset.py
이 패키지에서 사용자 정의 데이터를 사용하려면 다음과 같은 구조를 갖도록 사전 처리해야 합니다.
YOUR_DATASET |-- imgs |-- train |-- val |-- labels |-- train |-- val
imgs
디렉터리에 RGB 이미지가 있고 (선택적으로) labels
디렉터리에 주석이 있습니다.
labels
디렉토리가 제공되면 imgs
의 모든 이미지에 대한 라벨을 포함해야 하며, 각 라벨의 이름은 해당 이미지와 동일해야 합니다(파일 확장자 제외). 주석은 해당 이미지와 동일한 크기의 단일 채널 마스크로 제공되어야 합니다.
STEGO 모델 체크포인트 다운로드:
python scripts/download_stego_models.py
선택한 체크포인트를 이 패키지에서 사용하는 모델 구조로 변환합니다. scripts/cfg/convert_checkpoint_config.yaml
에서 입력 및 출력 경로를 설정하고 다음을 실행합니다.
python scripts/convert_original_stego_checkpoint.py
선택한 모델과 선택한 해상도로 전처리된 데이터세트를 사용하려면 precompute_knns.py
스크립트를 선택한 매개변수와 모델로 실행해야 합니다. 그러면 선택한 데이터세트의 별도 하위 디렉터리 nns
에 최근접 이웃 파일이 생성됩니다. scripts/cfg/knn_config.yaml
에서 매개변수를 조정하고 다음을 실행합니다.
python scripts/precompute_knns.py
선택한 이미지 폴더에 대한 분할 예측을 생성하려면 다음을 수행하십시오.
scripts/cfg/demo_config.yaml
에서 입력 및 출력 경로를 조정합니다.
달리다:
python scripts/demo_segmentation.py
그러면 output_dir/experiment_name/cluster
에 감독되지 않은 분할 시각화가 생성되고, output_dir/experiment_name/linear
에 선형 프로브 분할 시각화가 생성됩니다.
비지도 측정항목을 사용하여 선택한 데이터세트에서 STEGO를 평가하려면 다음 안내를 따르세요.
scripts/cfg/eval_config.yaml
에서 경로와 매개변수를 조정하세요.
달리다:
python scripts/eval_segmentation.py
스크립트는 주어진 데이터에 대한 평가 결과를 계산하고 인쇄합니다.
설정에 설명된 전처리 단계를 수행한 후 선택한 데이터에 대해 STEGO를 훈련할 수 있습니다.
훈련하기 전에 백본을 선택하고 모델과 훈련의 매개변수를 조정합니다.
STEGO는 DINO ViT를 기반으로 제작되었지만 모든 Vision Transformer와 함께 사용할 수 있습니다. 사용 가능한 모든 백본은 stego/backbones/backbone.py
에서 찾을 수 있습니다. 새 백본을 추가하려면 백본에 필요한 모든 코드를 stego/backbones
폴더에 추가하고 stego/backbone/backbones.py
수정합니다.
백본에 대한 Backbone
클래스 구현을 추가합니다.
원하는 이름으로 get_backbone
함수에 구현을 추가합니다.
STEGO의 매개변수는 stego/cfg/model_config.yaml
에 지정됩니다. 이 파일에서는 다음을 수행할 수 있습니다.
백본을 선택하고,
다른 모델 매개변수를 지정합니다.
학습 매개변수(학습률 및 STEGO의 대응 손실 매개변수)를 지정합니다.
훈련을 위한 다른 매개변수는 scripts/cfg/train_config.yaml
에서 설정할 수 있습니다.
매개변수를 조정한 후 다음을 사용하여 훈련을 실행합니다.
python scripts/train.py
STEGO는 scripts/cfg/train_config.yaml
에 지정할 수 있는 디렉터리에 훈련 중 체크포인트 저장을 처리하는 Pytorch Lightning으로 구현됩니다.
로깅은 가중치 및 편향으로 구현됩니다. 클라우드를 통해 W&B를 사용하려면 wandb에 로그인하세요.
wandb login
훈련 중에는 감독되지 않은 측정항목, 손실 값 및 기타 매개변수 외에도 샘플 분할의 시각화 및 학습된 특징 유사성 분포 플롯이 기록됩니다.
실외 탐색 파이프라인의 맥락에서 분할 방법을 비교하는 실험을 실행하려면 다음을 수행하십시오.
선택한 데이터세트에 대한 바이너리 순회성 라벨을 생성합니다. 현재는 Freiburg Forest에 대한 전처리만 가능합니다. 그러나 TRAVERSABLE_IDS
데이터 세트의 순회 가능한 클래스 ID로 변경하는 경우 이 스크립트를 사용하여 이 실험에 대한 다양한 데이터 세트를 전처리할 수도 있습니다. 달리다:
# Adjust paths in the script before running python scripts/data_preprocessing/generate_traversability_labels_freiburg_forest.py
scripts/cfg/eval_clusters_wvn.yaml
에서 매개변수를 조정하세요.
달리다:
python scripts/eval_clusters_wvn.py
스크립트는 주어진 데이터에 대한 평가 결과를 계산 및 인쇄하고 선택한 시각화를 저장합니다.
scripts/plot.py
스크립트를 사용하면 라벨 동시 발생을 예측하는 기능의 성능을 보여주는 정밀도-재현율 곡선을 생성할 수 있습니다. 또한 선택한 이미지의 특징 유사성을 시각화하는 대화형 플롯을 제공합니다.
플롯을 생성하려면 다음을 수행하십시오.
scripts/cfg/plot_config.yaml
에서 경로와 매개변수를 조정하세요.
달리다:
python scripts/plot.py
Copyright (c) 2022-2024, ETH Zurich, Piotr Libera, Jonas Frey, Matias Mattamala. All rights reserved. Licensed under the MIT license.
이 프로젝트는 Mark Hamilton의 이전 작업을 기반으로 합니다.
Copyright (c) Mark Hamilton. All rights reserved. Licensed under the MIT license.
stego/backbones/dino
에 있는 파일은 Facebook, Inc. 및 그 계열사의 Apache 2.0 라이선스에 따라 라이선스가 부여됩니다. 자세한 내용은 파일 헤더를 참조하세요.