这是 2023 年春季学期在苏黎世联邦理工学院机器人系统实验室完成的“导航室外环境语义理解”项目的实施。
该项目的目标是研究如何将最近的无监督语义分割模型 STEGO(Hamilton 等人,2022)用于地面移动机器人的户外导航管道,主要关注野外视觉导航的背景系统(Frey 和 Mattamala 等人)。
该软件包基于 Hamilton 等人提出的 STEGO 的重构版本:通过蒸馏特征对应进行无监督语义分割。
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 等人。使用训练和验证样本的子集进行实验,这也在本项目中使用。可以通过从上面的链接下载数据集来获取样本列表。然后,可以使用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 使用 Pytorch Lightning 实现,它负责在训练期间将检查点保存在scripts/cfg/train_config.yaml
中指定的目录中。
日志记录是通过权重和偏差来实现的。要通过云使用 W&B,请登录 wandb:
wandb login
在训练期间,除了无监督指标、损失值和其他参数之外,还会记录样本分割的可视化和学习到的特征相似度分布图。
要运行在室外导航管道的上下文中比较分割方法的实验:
为选定的数据集生成二进制可遍历性标签。目前,仅适用于弗莱堡森林的预处理。但是,您还可以使用此脚本预处理此实验的不同数据集,前提是您将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.
该项目基于马克·汉密尔顿之前的工作。
Copyright (c) Mark Hamilton. All rights reserved. Licensed under the MIT license.
stego/backbones/dino
中的文件由 Facebook, Inc. 及其附属公司根据 Apache 2.0 许可证获得许可。有关详细信息,请参阅文件头。