はじめに
SegAnyMoは、UCバークレーと北京大学の研究者チームによって開発されたオープンソースプロジェクトで、Nan Huangなどのメンバーが参加している。このツールはビデオ処理に重点を置いており、ビデオ内の任意の移動体(人、動物、乗り物など)を自動的に識別し、セグメント化することができる。TAPNet、DINOv2、SAM2などの技術を組み合わせており、CVPR 2025で成果を発表する予定である。SegAnyMoの目標は、動く映像の解析を簡素化し、効率的なセグメンテーションソリューションを提供することである。
機能一覧
- ビデオ内の動くオブジェクトを自動的に検出し、正確なセグメンテーションマスクを生成します。
- ビデオフォーマット(MP4、AVIなど)または画像シーケンス入力をサポート。
- 訓練済みモデルを提供し、迅速な展開とテストをサポートします。
- TAPNetとの統合は、2Dトラッキングトレースを生成し、モーション情報をキャプチャします。
- DINOv2を使って意味的特徴を抽出し、セグメンテーションの精度を向上させる。
- SAM2微細化マスクを使用したピクセルレベルのセグメンテーション。
- さまざまなシナリオに適応できるよう、カスタマイズされたデータセットのトレーニングをサポート。
- 結果を視覚化して出力するため、チェックや調整が容易。
ヘルプの使用
SegAnyMoは一定の技術的基礎を必要とし、主にプログラミング経験のあるユーザーを対象としています。以下は詳細なインストールと使用ガイドです。
設置プロセス
- ハードウェアとソフトウェアの準備
このプロジェクトはUbuntu 22.04で開発されており、NVIDIA RTX A6000または同様のCUDA対応グラフィックカードを推奨する。GitとAnacondaのプリインストールが必要です。- コードリポジトリをクローンする:
git clone --recurse-submodules https://github.com/nnanhuang/SegAnyMo
- プロジェクト・カタログにアクセスする:
cd SegAnyMo
- コードリポジトリをクローンする:
- 仮想環境の構築
依存関係の衝突を避けるために、Anaconda で別の Python 環境を作成する。- 環境を整える:
conda create -n seg python=3.12.4
- 環境を活性化させる:
conda activate seg
- 環境を整える:
- コアの依存関係をインストールする
PyTorchとその他の必要なライブラリをインストールする。- PyTorchをインストールする(CUDA 12.1をサポート):
conda install pytorch==2.4.0 torchvision==0.19.0 torchaudio==2.4.0 pytorch-cuda=12.1 -c pytorch -c nvidia
- 他の依存関係をインストールします:
pip install -r requirements.txt
- xformers(加速推論)をインストールする:
pip install -U xformers --index-url https://download.pytorch.org/whl/cu121
- PyTorchをインストールする(CUDA 12.1をサポート):
- DINOv2のインストール
特徴抽出にはDINOv2を使用。- 前処理カタログにアクセスし、クローンを作成する:
cd preproc && git clone https://github.com/facebookresearch/dinov2
- 前処理カタログにアクセスし、クローンを作成する:
- SAM2のインストール
SAM2はマスク精製コアである。- SAM2カタログへ
cd sam2
- インストール:
pip install -e .
- 訓練済みモデルをダウンロードする:
cd checkpoints && ./download_ckpts.sh && cd ../..
- SAM2カタログへ
- TAPNetのインストール
TAPNetは2Dトラッキングトレースの生成に使用される。- TAPNetカタログへ
cd preproc/tapnet
- インストール:
pip install .
- モデルをダウンロードする:
cd ../checkpoints && wget https://storage.googleapis.com/dm-tapnet/bootstap/bootstapir_checkpoint_v2.pt
- TAPNetカタログへ
- インストールの確認
環境が正常であることを確認する:
python -c "import torch; print(torch.cuda.is_available())"
輸出 True
成功を示す。
使用方法
データ準備
SegAnyMoはビデオまたは画像シーケンスの入力をサポートします。データは次のような構造で整理する必要がある:
data
├── images
│ ├── scene_name
│ │ ├── image_name
│ │ ├── ...
├── bootstapir
│ ├── scene_name
│ │ ├── image_name
│ │ ├── ...
├── dinos
│ ├── scene_name
│ │ ├── image_name
│ │ ├── ...
├── depth_anything_v2
│ ├── scene_name
│ │ ├── image_name
│ │ ├── ...
- 入力がビデオの場合は、ツール(FFmpegなど)を使ってフレームを抽出し、それを
images
フォルダー - 画像シーケンスの場合は、対応するディレクトリに直接入れてください。
オペレーションの前処理
- 深度マップ、フィーチャー、軌跡の生成
以下のコマンドを使用してデータを処理する(データ量にもよるが、約10分):- 画像シーケンスの場合:
python core/utils/run_inference.py --data_dir $DATA_DIR --gpus 0 --depths --tracks --dinos --e
- ビデオは?
python core/utils/run_inference.py --video_path $VIDEO_PATH --gpus 0 --depths --tracks --dinos --e
パラメータの説明
--e
Efficient Modeを有効にすると、フレームレートと解像度が下がり、処理が速くなります。--step 10
10フレーム中1フレームがクエリフレームとして使用されることを示す。
- 画像シーケンスの場合:
運動軌道の予測
- モデルウェイトのダウンロード
をとおして ハグする顔 もしかしたら グーグルドライブ 訓練済みモデルをダウンロードする。そのパスをconfigs/example_train.yaml
なresume_path
フィールド- 走行軌跡の予測:
python core/utils/run_inference.py --data_dir $DATA_DIR --motin_seg_dir $OUTPUT_DIR --config_file configs/example_train.yaml --gpus 0 --motion_seg_infer --e
出力は
$OUTPUT_DIR
. - 走行軌跡の予測:
セグメンテーション・マスクの生成
- SAM2リファインメントマスクの使用
- マスク生成を実行する:
python core/utils/run_inference.py --data_dir $DATA_DIR --sam2dir $RESULT_DIR --motin_seg_dir $OUTPUT_DIR --gpus 0 --sam2 --e
パラメータの説明
$DATA_DIR
は元画像のパスである。$RESULT_DIR
はマスクの保存パスである。$OUTPUT_DIR
は軌跡予測結果のパスである。
注:SAM2はデフォルトで.jpg
もしかしたら.jpeg
フォーマットの場合、ファイル名はプレーンな数字である必要がある。一致しない場合は、コードを変更するか、ファイル名を変更してください。
- マスク生成を実行する:
評価結果
- 事前計算結果のダウンロード
譲渡団体 グーグルドライブ 比較のために公式マスクをダウンロードする。- DAVISデータセットの評価:
CUDA_VISIBLE_DEVICES=0 python core/eval/eval_mask.py --res_dir $RES_DIR --eval_dir $GT_DIR --eval_seq_list core/utils/moving_val_sequences.txt
- 洗練された評価:
cd core/eval/davis2017-evaluation && CUDA_VISIBLE_DEVICES=0 python evaluation_method.py --task unsupervised --results_path $MASK_PATH
- DAVISデータセットの評価:
カスタマイズ・トレーニング
- データ前処理
例としてHOI4Dデータセットを使用:
python core/utils/process_HOI.py
python core/utils/run_inference.py --data_dir $DATA_DIR --gpus 0 --tracks --depths --dinos
カスタムデータセットにはRGB画像とダイナミックマスクが必要です。
- データの整合性をチェックする:
python current-data-dir/dynamic_stereo/dynamic_replica_data/check_process.py
- データをクリーンアップすることで、スペースを節約できる:
python core/utils/run_inference.py --data_dir $DATA_DIR --gpus 0 --clean
- モデルトレーニング
修正configs/$CONFIG.yaml
Kubric、HOI4Dなどのデータセットで訓練されたコンフィギュレーション:
CUDA_VISIBLE_DEVICES=0 python train_seq.py ./configs/$CONFIG.yaml
アプリケーションシナリオ
- ビデオ・ポストプロダクション
映像から動くオブジェクト(走っている人など)を分離してマスクを生成し、エフェクト合成に使用する。 - 行動分析学研究
動物や人間の移動軌跡を追跡し、行動パターンを分析する。 - 自律走行開発
運転映像中の移動物体(車両、歩行者など)をセグメンテーションし、知覚システムを最適化する。 - 監視システムの最適化
監視カメラの映像から異常な動きを抽出し、セキュリティ効率を向上させる。
品質保証
- GPUが必要ですか?
そうです。NVIDIAのカードはCUDAをサポートしていることが推奨されています。 - リアルタイム処理に対応しているか?
現在のバージョンはオフライン処理に適しており、リアルタイムアプリケーションは独自に最適化する必要がある。 - トレーニングに必要なスペースは?
データセットにもよるが、小さなデータセットは数ギガバイト、大きなデータセットは数百ギガバイトになる。 - セグメンテーションの精度を上げるには?
減らす--step
値でモデルを訓練するか、より多くのラベル付きデータでモデルを訓練する。