這是 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 授權。有關詳細信息,請參閱文件頭。