DINOv2
DINOv2 は、Meta が DINO を 大規模化 + 高品質データ + distillation によって発展させ、汎用 visual backbone として一気に普及させた self-supervised foundation model です。
DINO からの変更点
| 改良 | 内容 |
|---|---|
| Data | Web から集めた raw image を、retrieval ベースで自動 curate (重複削除、品質確保) |
| Objective | DINO + iBOT (patch-level self-distillation + masked) を併用 |
| Scale | ViT-g/14 まで pretrain |
| Distillation | ViT-S / ViT-B / ViT-L へ蒸留して提供 |
何が嬉しいのか
DINOv2 features は、
- ImageNet classification (linear probe / kNN)
- Semantic segmentation
- Depth estimation
- 3D / matching / tracking
- Open-vocabulary 3D
など、多くの downstream で fine-tune なしでも非常に強いことが知られています。Foundation backbone として、CLIP と並ぶ位置を占めるようになりました。
どこで使われているか
- Depth Anything の backbone
- SAM 系の image encoder
- VGGT などの geometry model
- Open-vocabulary 3D / NeRF feature field
- 多くの VLM / robot policy の feature
数式で見る DINOv2 の複合目的
DINOv2 は、image-level の DINO objective と、patch-level の iBOT objective を組み合わせることで、global な semantic feature と dense な local feature を同時に強くします。簡略化すると、全体の loss は次のように書けます。
は class token や global representation に対する self-distillation loss です。 は masked patch の teacher distribution を student が予測する loss であり、 は patch-level objective の重みです。
Masked patch の index 集合を とし、patch に対する teacher distribution を 、masked view からの student distribution を とすると、patch-level loss は次のように書けます。
ここで、 は mask された入力における patch の情報を表します。この式の気持ちは、「画像全体として同じ意味を持つだけではなく、各 patch が周囲の文脈からどのような意味を持つかも学ばせる」というものです。DINOv2 の dense feature が segmentation、depth、matching で強いのは、この patch-level な蒸留が局所構造を保つ方向に効くためです。
DINOv2 と CLIP
| 観点 | CLIP | DINOv2 |
|---|---|---|
| Supervision | Caption | なし (self-supervised) |
| Language alignment | あり | なし |
| Dense feature 品質 | 中程度 | 非常に高い |
| Zero-shot classification | 強い | 弱い (linear probe が必要) |
両者は相補的で、よく一緒に使われます。
関連ページ
- DINO
- DINOv3
- Self-Distillation Overview
- iBOT 系の Masked Image Modeling
- Depth Anything Overview
- VGGT Overview
主なソース
- DINOv2 paper: https://arxiv.org/abs/2304.07193
- DINOv2 GitHub: https://github.com/facebookresearch/dinov2
- iBOT: https://arxiv.org/abs/2111.07832