Ini adalah implementasi proyek "Pemahaman Semantik Lingkungan Luar Ruangan untuk Navigasi" yang diselesaikan di Lab Sistem Robotik di ETH Zurich pada Semester Musim Semi 2023.
Tujuan dari proyek ini adalah untuk menyelidiki bagaimana model segmentasi semantik tanpa pengawasan terbaru STEGO (Hamilton et al., 2022) dapat digunakan dalam jalur navigasi luar ruangan untuk robot bergerak di darat, dengan fokus utama pada konteks Navigasi Visual Liar sistem (Frey & Mattamala dkk.).
Paket ini dibuat pada versi STEGO yang telah difaktorkan ulang: Segmentasi Semantik Tanpa Pengawasan oleh Distilling Feature Correspondences oleh Hamilton dkk.
SLIC (metode segmentasi WVN), STEGO standar, dan STEGO dengan pengelompokan fitur per gambar yang mengelompokkan pemandangan alam.
Pengaturan
Instalasi
Unduh Kumpulan Data
Pemrosesan Awal Data
Unduhan Model
Pemrosesan Awal KNN
Segmentasi Demo
Evaluasi Segmentasi
Segmentasi Kereta Api
Evaluasi untuk WVN
Hasilkan Plot
Lisensi
Kloning repositori:
git clone https://github.com/leggedrobotics/self_supervised_segmentation.git cd self_supervised_segmentation
Instal lingkungan:
conda env create -f environment.yml conda activate stego pip install -e .
Unduh kumpulan data umum yang digunakan oleh Hamilton dkk.:
python scripts/download_stego_datasets.py
CATATAN: wget
, yang digunakan dalam skrip unduhan mungkin tidak selalu berfungsi dengan baik dengan unduhan berukuran besar ini. Jika pengunduhan gagal, coba unduh kumpulan data yang dipilih dengan azcopy. Misalnya, untuk mendownload dataset cocostuff:
azcopy copy https://marhamilresearch4.blob.core.windows.net/stego-public/pytorch_data/cocostuff.zip ./cocostuff.zip
Dalam kasus kumpulan data cocostuff, Hamilton et al. menggunakan subkumpulan sampel pelatihan dan validasi untuk eksperimen, yang juga digunakan dalam proyek ini. Daftar sampel dapat diperoleh dengan mendownload dataset dari link di atas. Kemudian, kumpulan data yang dikurasi berdasarkan daftar yang dipilih dapat dibuat dengan scripts/create_curated_dataset.py
.
Unduh kumpulan data dengan pemandangan alam:
# 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*
Untuk memfasilitasi penggunaan berbagai kumpulan data dengan paket, skrip prapemrosesan telah ditambahkan ke scripts/data_preprocessing
. Sebelum dijalankan, sesuaikan jalur di setiap skrip prapemrosesan.
Pemrosesan awal bahan kelapa:
# 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
Pemrosesan awal RUGD:
# Preprocess RUGD python scripts/data_preprocessing/preprocess_RUGD.py # Crop the dataset (only for training) python scripts/data_preprocessing/crop_dataset.py
Pemrosesan awal Hutan Freiburg:
# Preprocess Freiburg Forest python scripts/data_preprocessing/preprocess_freiburg_forest.py # Crop the dataset (only for training) python scripts/data_preprocessing/crop_dataset.py
Untuk menggunakan data khusus dengan paket ini, praproses agar memiliki struktur berikut:
YOUR_DATASET |-- imgs |-- train |-- val |-- labels |-- train |-- val
Dengan gambar RGB di direktori imgs
, dan (opsional) anotasi di direktori labels
.
Jika direktori labels
disediakan, direktori tersebut harus berisi label untuk semua gambar di imgs
, dengan setiap label diberi nama yang sama dengan gambar terkait (tidak termasuk ekstensi file). Anotasi harus disediakan sebagai masker saluran tunggal dengan ukuran yang sama dengan gambar terkait.
Unduh pos pemeriksaan model STEGO:
python scripts/download_stego_models.py
Konversikan pos pemeriksaan yang dipilih ke struktur model yang digunakan oleh paket ini. Tetapkan jalur input dan output di scripts/cfg/convert_checkpoint_config.yaml
dan jalankan:
python scripts/convert_original_stego_checkpoint.py
Untuk menggunakan kumpulan data yang telah diproses sebelumnya dengan model yang dipilih dan pada resolusi yang dipilih, skrip precompute_knns.py
perlu dijalankan dengan parameter dan model yang dipilih. Ini akan membuat file tetangga terdekat di subdirektori terpisah nns
dari kumpulan data yang dipilih. Sesuaikan parameter di scripts/cfg/knn_config.yaml
dan jalankan:
python scripts/precompute_knns.py
Untuk menghasilkan prediksi segmentasi untuk folder gambar yang dipilih:
Sesuaikan jalur input dan output di scripts/cfg/demo_config.yaml
Berlari:
python scripts/demo_segmentation.py
Ini akan menghasilkan visualisasi segmentasi tanpa pengawasan di output_dir/experiment_name/cluster
dan visualisasi segmentasi probe linier di output_dir/experiment_name/linear
.
Untuk mengevaluasi STEGO pada kumpulan data yang dipilih dengan metrik tanpa pengawasan:
Sesuaikan jalur dan parameter di scripts/cfg/eval_config.yaml
Berlari:
python scripts/eval_segmentation.py
Script akan menghitung dan mencetak hasil evaluasi pada data yang diberikan.
Setelah melakukan langkah-langkah prapemrosesan yang diuraikan dalam Penyiapan, Anda dapat melatih STEGO pada data yang dipilih.
Sebelum pelatihan, pilih tulang punggung dan sesuaikan parameter model dan pelatihan.
STEGO dibuat berdasarkan DINO ViT, tetapi dapat digunakan dengan Vision Transformer apa pun. Semua backbone yang tersedia dapat ditemukan di stego/backbones/backbone.py
. Untuk menambahkan backbone baru, tambahkan semua kode yang diperlukan untuk backbone ke folder stego/backbones
dan modifikasi stego/backbone/backbones.py
:
Tambahkan implementasi kelas Backbone
untuk backbone Anda,
Tambahkan implementasi Anda ke fungsi get_backbone
dengan nama yang diinginkan.
Parameter STEGO ditentukan di stego/cfg/model_config.yaml
. Dalam file ini Anda dapat:
pilih tulang punggung,
tentukan parameter model lainnya,
tentukan parameter pelatihan: kecepatan pembelajaran dan parameter kerugian korespondensi STEGO.
Parameter lain untuk pelatihan dapat diatur di scripts/cfg/train_config.yaml
.
Setelah menyesuaikan parameter, jalankan pelatihan dengan:
python scripts/train.py
STEGO diimplementasikan dengan Pytorch Lightning, yang menangani penyimpanan pos pemeriksaan selama pelatihan, dalam direktori yang dapat ditentukan dalam scripts/cfg/train_config.yaml
.
Logging diimplementasikan dengan Bobot & Bias. Untuk menggunakan W&B melalui cloud, login ke Wandb:
wandb login
Selama pelatihan, selain metrik tanpa pengawasan, nilai kerugian, dan parameter lainnya, visualisasi segmentasi sampel dan plot distribusi kesamaan fitur yang dipelajari akan dicatat.
Untuk menjalankan eksperimen yang membandingkan metode segmentasi dalam konteks saluran navigasi luar ruang:
Hasilkan label traversabilitas biner untuk kumpulan data yang dipilih. Saat ini, hanya pra-pemrosesan untuk Hutan Freiburg yang tersedia. Namun, Anda juga dapat melakukan praproses kumpulan data yang berbeda untuk eksperimen ini dengan skrip ini asalkan Anda mengubah TRAVERSABLE_IDS
menjadi ID kelas yang dapat dilintasi dalam kumpulan data Anda. Berlari:
# Adjust paths in the script before running python scripts/data_preprocessing/generate_traversability_labels_freiburg_forest.py
Sesuaikan parameter di scripts/cfg/eval_clusters_wvn.yaml
Berlari:
python scripts/eval_clusters_wvn.py
Script akan menghitung dan mencetak hasil evaluasi pada data yang diberikan, dan menyimpan visualisasi yang dipilih.
Skrip scripts/plot.py
memungkinkan pembuatan kurva pemanggilan presisi yang menunjukkan kinerja fitur dalam memprediksi kemunculan bersama label. Ini juga menyediakan plot interaktif yang memvisualisasikan kesamaan fitur dalam gambar yang dipilih.
Untuk menghasilkan plot:
Sesuaikan jalur dan parameter di scripts/cfg/plot_config.yaml
Berlari:
python scripts/plot.py
Copyright (c) 2022-2024, ETH Zurich, Piotr Libera, Jonas Frey, Matias Mattamala. All rights reserved. Licensed under the MIT license.
Proyek ini didasarkan pada karya sebelumnya oleh Mark Hamilton.
Copyright (c) Mark Hamilton. All rights reserved. Licensed under the MIT license.
File dalam stego/backbones/dino
dilisensikan di bawah lisensi Apache 2.0 oleh Facebook, Inc. dan afiliasinya. Lihat header file untuk detailnya.