Skip to content

Video Depth Anything -- 動画の深度推定

概要

このセクションでは、Video Depth Anythingがどのようなモデルであるか、そしてなぜ動画専用の深度推定モデルが必要なのかを説明します。

なぜ動画専用モデルが必要か

画像の深度推定モデル(Depth Anything V2など)を動画に適用する場合、最も素朴な方法は各フレームを1枚ずつ独立に処理することです。しかし、この方法には致命的な問題があります。フレーム間で深度マップがちらつく(フリッカーが発生する) のです。

深度推定モデルは、入力画像のわずかな変化(カメラの微小な動き、照明の変化など)に対して出力が大きく変動することがあります。人間の目にはほとんど同じに見える連続する2フレームでも、深度マップは大きく異なる場合があります。これを動画として再生すると、奥行きがフレームごとにパタパタと変わり、非常に見づらい映像になります。

Video Depth Anythingはこの「時間的一貫性(temporal consistency)」の課題を解決するために設計されたモデルです。Depth Anything V2のアーキテクチャをベースとしつつ、隣接フレーム間の情報を活用する時間的な伝搬モジュールを追加しています。これにより、前後のフレームの深度推定結果を考慮しながら各フレームの深度マップを生成するため、長尺の動画でも安定した深度マップが得られます。

LKG(Looking Glass)のような立体視ディスプレイで動画を再生する場合、深度マップのちらつきは立体感のガタつきとして直接体感されるため、時間的一貫性の確保は特に重要です。

基本情報

前提条件

このセクションでは、Video Depth Anythingを動作させるために必要な環境を説明します。

項目要件
OSWindows 10/11 + WSL(Ubuntu 22.04)
Python3.10以上
GPUCUDA対応のNVIDIA GPU
Gitインストール済みであること

なぜWSLが必要か

Video Depth Anythingの導入にはbashスクリプト(.shファイル)の実行が必要です。Windowsネイティブ環境ではbashスクリプトを直接実行できないため、WSL(Windows Subsystem for Linux)を使ってLinux環境を用意する必要があります。

WSLはWindows上でLinuxカーネルを動作させる仕組みであり、WSL2ではNVIDIA GPUのパススルーがサポートされています。Windows側にNVIDIAドライバがインストールされていれば、WSL内から追加設定なしでCUDAを利用できます(WSL内にCUDA Toolkitを別途インストールする必要はありません)。

WSLのセットアップ

このセクションでは、Linuxに不慣れな状態からWSLを導入する手順を説明します。松崎はLinuxについて無知な状態からWSLを導入しました。以下はその作業ログに基づく、実際に動作確認済みの手順です。

参考にした動画: https://youtu.be/E1exh1g2tos?si=wPhdHcUKQi6ncqRN

手順1. WSL2をデフォルトに設定

管理者権限のPowerShellで以下を実行します。

powershell
wsl --set-default-version 2

手順2. Ubuntuのインストール

powershell
wsl --install -d Ubuntu-22.04

インストール後、そのままユーザー名とパスワードの設定画面に入ります。任意のユーザー名とパスワードを設定します。

手順3. パッケージの更新とpipのインストール

WSL内で以下を実行します。sudo apt update先に実行することが重要です。これを飛ばすとパッケージのインストールに失敗します。

bash
# パッケージリストの更新(これをしないとpipがインストールできない)
sudo apt update && sudo apt upgrade -y

# pipのインストール
sudo apt install python3-pip

# 確認
pip3 --version

松崎所感: 最初にsudo apt install python3-pipを実行した際に「Package python3-pip has no installation candidate」エラーが出た。sudo apt updateを先に実行してからやり直すことで解決した。

手順4. PATHの設定

pipでインストールしたパッケージのコマンドが見つからない場合、PATHを追加します。

bash
export PATH="$PATH:$HOME/.local/bin"
source ~/.bashrc

手順5. WSLの起動と終了

次回以降の起動は以下のコマンドで行います。

powershell
wsl -d Ubuntu-22.04

終了する場合はexitで抜けたあと、以下で完全にシャットダウンできます。

powershell
wsl --shutdown

WSL Tips

WSLを使いこなすための実用的な知識をまとめます。

Windowsドライブへのアクセス: WSL内からWindowsのファイルシステムには/mnt/c/(Cドライブ)、/mnt/d/(Dドライブ)などでアクセスできます。松崎もcd /mnt/c/workでWindows側の作業フォルダに移動しています。

GPU パススルー: WSL2ではNVIDIA GPUのパススルーがサポートされています。Windows側にNVIDIAドライバがインストールされていれば、WSL2内から追加設定なしでCUDAが利用できます。WSL内にCUDA Toolkitを別途インストールする必要はありません(ドライバだけでよいです)。

よくあるトラブルと対処法

  • sudo apt installでパッケージが見つからない場合は、先にsudo apt updateを実行します
  • pythonコマンドが使えない場合はpython3を試します(Ubuntu 22.04ではデフォルトでpython3です)
  • /mnt/c/以下のファイル操作はWSLネイティブのファイルシステムより遅いです。大量のファイルI/Oがある場合はWSLのホームディレクトリ(~/以下)で作業する方が高速です
  • get_weights.shのような単純なシェルスクリプトであれば、Git Bashでも実行できる場合があります。ただし、Python環境やCUDA連携を含む場合はWSLの方が安定します

導入手順

このセクションでは、Video Depth Anythingのインストールから推論実行までの手順を説明します。

手順1. リポジトリのクローンと依存パッケージのインストール

WSL内で作業フォルダに移動し、以下を実行します。

bash
git clone https://github.com/DepthAnything/Video-Depth-Anything
cd Video-Depth-Anything
pip install -r requirements.txt

手順2. モデルの重みをダウンロード

方法A: bashスクリプトで一括ダウンロード

bash
bash get_weights.sh

get_weights.shの中身は以下の通りです。checkpointsディレクトリを作成し、HuggingFaceからSmallとLargeのモデルをwgetでダウンロードしています。

bash
#!/bin/bash

mkdir checkpoints
cd checkpoints
wget https://huggingface.co/depth-anything/Video-Depth-Anything-Small/resolve/main/video_depth_anything_vits.pth
wget https://huggingface.co/depth-anything/Video-Depth-Anything-Large/resolve/main/video_depth_anything_vitl.pth

方法B: 手動ダウンロード

HuggingFaceのリポジトリページからモデルファイルを直接ダウンロードし、checkpoints/ディレクトリに配置します。

スクリーンショット 2025-02-28 131536.png

推論の実行

このセクションでは、実際に動画の深度推定を実行する方法と、モデルサイズごとの違いを説明します。

以下のコマンドで動画の深度推定を実行します。

bash
python3 run.py \
  --input_video ./assets/example_videos/davis_rollercoaster.mp4 \
  --output_dir ./outputs \
  --encoder vitl

encoderオプション

末尾の--encoderオプションで使用するモデルサイズを指定します。vitはVision Transformerの略であり、lはLarge、sはSmallを意味します。パラメータ数が大きいほど精度は高いですが、処理時間も長くなります。

オプションモデルサイズ説明
vitlLarge高精度。処理時間は長い
vitsSmall高速。細部の精度はやや劣る

処理時間の実測値(松崎の環境)

動画エンコーダ処理時間
davis_rollercoaster.mp4(サンプル)vitl (Large)約3分
スマホ撮影の動画vitl (Large)約7分30秒
davis_rollercoaster.mp4(サンプル)vits (Small)約20秒
スマホ撮影の動画vits (Small)約20秒

出力結果

Largeモデル(vitl)での出力です。左が元動画、右が深度推定の出力です。

サンプル動画(davis_rollercoaster.mp4): https://youtu.be/06M_yMRpogU

松崎がスマホで撮った動画: https://www.youtube.com/watch?v=Cd_JziildBI&ab_channel=%E3%81%8F%E3%82%8B%E3%81%BF%E3%82%86%E3%81%B9%E3%81%97

LKGでの確認

このセクションでは、生成した深度推定動画をLKGで立体視した際の品質評価と、SmallモデルとLargeモデルの比較を行います。

Largeモデルでの所感

松崎所感: 一本目も二本目もガビガビすぎる。画像の深度推定しか経験がないのでどのくらいすごいとかは言えないが、立体視はできてる。でも奥行きのつき方がペーパーマリオ的にも見える。

「ガビガビ」に見える原因としては、以下が考えられます。

  1. 動画の解像度: 動画は画像と比べてフレームあたりの解像度が低いことが多いです。深度マップの解像度も元動画に引きずられるため、LKGの高精細ディスプレイで表示すると粗さが目立ちます
  2. 深度マップの量子化: 動画として出力する際に、深度値が8bitのグレースケールに量子化されます。画像の深度推定では16bitやfloatで出力できるのに対し、動画では256段階に丸められるため、段階的な奥行きの変化が「ペーパーマリオ的」に見える一因になりえます
  3. モデルの特性: 動画向けの時間的一貫性を優先した結果、各フレームの深度精度がやや犠牲になっている可能性があります

Small vs Large モデルの比較

Smallモデルで深度推定した結果:

https://youtu.be/qsR_RXnxJRI

https://www.youtube.com/watch?v=-kI18ZgSa30&ab_channel=%E3%81%8F%E3%82%8B%E3%81%BF%E3%82%86%E3%81%B9%E3%81%97

松崎所感: 確かに奥行きの付け方がSmallのほうが控えめというか、中間部分の深度推定がうまくできていない感じがあった。Largeのほうがうまいのは言い切れると思うが、rollercoasterのサンプル動画だとLargeで一瞬ガタつきがあったのがSmallのほうでなくなっていた。

項目Large (vitl)Small (vits)
処理速度遅い(サンプル3分)速い(サンプル20秒)
奥行きの精度高い中間部分が弱い
安定性サンプルで一瞬ガタつきありガタつきなし
全体的な品質Largeの方が上速度重視なら十分

Smallモデルでガタつきが解消されたのは興味深い結果です。パラメータ数が少ないモデルは、入力の微小な変化に対する感度が低い傾向があるため、結果として時間的な安定性が高くなったと考えられます。プレビュー用途など速度を優先する場合はSmall、最終出力にはLargeを使うという使い分けが現実的です。

関連技術と参考情報

モデルのバックボーン: Video Depth AnythingはDepth Anything V2をベースとしており、ViT(Vision Transformer)アーキテクチャを採用しています。vitlはViT-Large、vitsはViT-Smallを意味します。

Video Depth Anything V2: 本記事執筆後にVideo Depth Anything V2がリリースされており、時間的一貫性がさらに改善されています。同じGitHubリポジトリで公開されているので、最新のモデルを確認することを推奨します。

LKGでの利用について: 深度推定の結果をLKGで立体視するには、元の動画と深度マップ動画を組み合わせて表示します。深度マップの品質(解像度、時間的な安定性)が立体視の品質に直結するため、用途に合わせてモデルサイズを選択するとよいです。

参考リンク


Author: 松崎 | Source: 松崎/Video Depth Anything 1a8aba435ee780a5a574cee826331803.md | AI補完: 2026-03-05