Это реализация проекта «Семантическое понимание внешней среды для навигации», завершенного в лаборатории робототехнических систем ETH Zurich в весеннем семестре 2023 года.
Целью проекта было исследование того, как новейшая модель семантической сегментации без присмотра STEGO (Гамильтон и др., 2022) может быть использована в конвейере наружной навигации для наземного мобильного робота, с основным акцентом на контекст дикой визуальной навигации. система (Фрей и Маттамала и др.).
Этот пакет построен на переработанной версии STEGO: неконтролируемая семантическая сегментация путем дистилляции соответствий функций, автор Hamilton et al.
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 et al.:
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
В случае набора данных о коскосте 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
С изображениями RGB в каталоге imgs
и (необязательно) аннотациями в каталоге 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 реализован с помощью Pytorch Lightning, который обеспечивает сохранение контрольных точек во время обучения в каталоге, который можно указать в scripts/cfg/train_config.yaml
.
Ведение журнала осуществляется с помощью Weights & Biases. Чтобы использовать W&B через облако, войдите в wandb:
wandb login
Во время обучения, помимо неконтролируемых метрик, значений потерь и других параметров, регистрируются визуализации сегментации выборки и график распределения сходства изученных признаков.
Чтобы запустить эксперимент, сравнивающий методы сегментации в контексте конвейера наружной навигации:
Сгенерируйте двоичные метки проходимости для выбранного набора данных. В настоящее время доступна только предварительная обработка для Фрайбургского леса. Однако вы также можете предварительно обработать различные наборы данных для этого эксперимента с помощью этого сценария при условии, что вы измените TRAVERSABLE_IDS
на идентификаторы проходимых классов в вашем наборе данных. Бегать:
# 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.
Этот проект основан на предыдущей работе Марка Гамильтона.
Copyright (c) Mark Hamilton. All rights reserved. Licensed under the MIT license.
Файлы в stego/backbones/dino
лицензируются Facebook, Inc. и ее дочерними компаниями по лицензии Apache 2.0. Подробности смотрите в заголовках файлов.