これは、2023 年春学期にチューリッヒ工科大学のロボット システム ラボで完了したプロジェクト「ナビゲーションのための屋外環境の意味的理解」の実施です。
プロジェクトの目標は、主にワイルド ビジュアル ナビゲーションのコンテキストに焦点を当て、最新の教師なしセマンティック セグメンテーション モデル STEGO (Hamilton et al., 2022) を地上移動ロボットの屋外ナビゲーション パイプラインでどのように使用できるかを調査することでした。システム (Frey & Mattamala et al.)。
このパッケージは、STEGO: Unsupervised Semantic Segmentation by Distilling Feature Correspondences (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 .
ハミルトンらによって使用されている一般的なデータセットをダウンロードします。
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 に基づいて構築されていますが、どのビジョン トランスフォーマーでも使用できます。利用可能なバックボーンはすべて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 ライセンスに基づいてライセンスされています。詳細については、ファイルのヘッダーを参照してください。