본문으로 건너뛰기

© 2026 Molayo

GH Trending릴리즈2026. 05. 17. 20:35

facebookresearch/dinov3

요약

DINOv3는 다양한 비전 작업에서 미세 조정 없이도 최첨단 성능을 발휘하는 다재다능한 비전 파운데이션 모델 제품군입니다. 고해상도 밀집 특징을 생성하며, ViT 및 ConvNeXt 백본을 지원하고 Hugging Face Transformers 및 timm 라이브러리와의 호환성을 제공합니다.

핵심 포인트

  • 미세 조정 없이도 다양한 비전 작업에서 SOTA 성능을 능가하는 고품질 조밀 특징 생성
  • ViT 및 ConvNeXt 백본을 지원하며 LVD-1689M 및 SAT-493M 데이터셋으로 사전 학습됨
  • Hugging Face Transformers, Hugging Face Hub, timm 라이브러리와의 높은 호환성 제공
  • Canopy Height Maps v2(CHMv2) 모델을 통해 정확도와 전역적 일관성 개선

🆕 [2026-03-10] 🔥 The Canopy Height Maps v2 (CHMv2) 모델과 추론 (inference) 코드를 이제 사용할 수 있습니다 (모델 가중치 다운로드 및 코드 사용에 대한 자세한 내용은 여기를 참조하세요). 모델 가중치는 Hugging Face Hub에서도 사용할 수 있으며 Hugging Face Transformers 라이브러리에 의해 지원됩니다. 2024년에 공개된 기존의 고해상도 캐노피 높이 지도 (canopy height maps)를 기반으로, CHMv2는 DINOv3를 활용하여 정확도, 세부 사항 및 전역적 일관성 (global consistency) 면에서 상당한 개선을 제공합니다.

[2025-11-20] ConvNeXt 백본 (backbones)을 위한 증류 (Distillation) 코드와 설정이 이제 공개되었습니다!

[2025-10-13] 의미론적 분할 (Semantic segmentation, ADE20K) 및 단안 깊이 추정 (monocular depth estimation, NYUv2-Depth) 선형 프로빙 (linear probing) 코드가 이제 공개되었습니다!

[2025-09-17] DINOv3 백본은 버전 1.0.20부터 PyTorch Image Models / timm 라이브러리에서 지원됩니다.

[2025-08-29] DINOv3 백본은 버전 4.56.0부터 출시된 Hugging Face Transformers 라이브러리 버전에서 지원됩니다.

[2025-08-14] DINOv3 백본은 이제 Hugging Face Hub에서 사용할 수 있으며 Hugging Face Transformers 라이브러리의 개발 버전에서 지원됩니다.

Oriane Siméoni, Huy V. Vo, Maximilian Seitzer, Federico Baldassarre, Maxime Oquab,

Cijo Jose, Vasil Khalidov, Marc Szafraniec, Seungeun Yi, Michaël Ramamonjisoa,

Francisco Massa, Daniel Haziza, Luca Wehrstedt, Jianyuan Wang,

Timothée Darcet, Théo Moutakanni, Leonel Sentana, Claire Roberts,

Andrea Vedaldi, Jamie Tolan, John Brandt, Camille Couprie,

Julien Mairal, Hervé Jégou, Patrick Labatut, Piotr Bojanowski

[ 📜 Paper ] [ 📰 Blog ] [ 🌐 Website ] [ 📖 BibTeX ]

DINOv3를 위한 참조 PyTorch 구현 및 모델입니다. 자세한 내용은 DINOv3 논문을 참조하십시오.

고해상도 밀집 특징 (High-resolution dense features).

빨간색 십자가로 표시된 패치 (patches)와 다른 모든 패치 사이에서 DINOv3 출력 특징 (output features)으로 얻은 코사인 유사도 (cosine similarity) 맵을 시각화합니다.

고품질의 조밀한 특징 (dense features)을 생성하고, 미세 조정 (fine-tuning) 없이도 광범위한 설정에 걸쳐 전문화된 최첨단 (state of the art) 성능을 능가하는 것을 포함하여 다양한 비전 작업에서 뛰어난 성능을 달성하는 다재다능한 비전 파운데이션 모델 (vision foundation models)의 확장된 제품군입니다.

ℹ️ 모든 모델 가중치 (model weights)에 접근하려면 아래 제공된 링크를 따라가 주세요: 승인되면 모든 사용 가능한 모델 가중치 (백본 (backbones) 및 어댑터 (adapters) 모두 포함)를 가리키는 전체 URL 목록이 포함된 이메일이 전송됩니다. 이 URL들은 다음과 같은 용도로 사용할 수 있습니다:

  • 모델 또는 어댑터 가중치를 로컬 파일 시스템에 다운로드한 후, weights 또는 backbone_weights 파라미터를 통해 torch.hub.load()가 이 로컬 가중치를 가리키도록 설정하거나,
  • weights 또는 backbone_weights 파라미터를 사용하여 URL로부터 백본 또는 어댑터를 직접 다운로드하고 로드하도록 torch.hub.load()를 호출할 수 있습니다.

아래의 예시 코드 스니펫을 참조하세요.

가중치를 다운로드할 때 웹 브라우저 대신 wget을 사용하세요.

웹 데이터셋 (LVD-1689M)으로 사전 학습된 (pretrained) ViT 모델:

모델파라미터 (Parameters)사전 학습 데이터셋다운로드
ViT-S/16 distilled21MLVD-1689M[link]
ViT-S+/16 distilled29MLVD-1689M[link]
...

웹 데이터셋 (LVD-1689M)으로 사전 학습된 ConvNeXt 모델:

모델파라미터 (Parameters)사전 학습 데이터셋다운로드
ConvNeXt Tiny29MLVD-1689M[link]
ConvNeXt Small50MLVD-1689M[link]
...

위성 데이터셋 (SAT-493M)으로 사전 학습된 ViT 모델:

모델파라미터 (Parameters)사전 학습 데이터셋다운로드
ViT-L/16 distilled300MSAT-493M[link]
ViT-7B/166,716MSAT-493M[link]

PyTorch (모델 로드에 필요한 유일한 의존성)를 설치하려면 여기의 지침을 따르세요. CUDA 지원을 포함하여 PyTorch를 설치하는 것을 강력히 권장합니다.

import torch
REPO_DIR = <DINOV3/REPO/가/클론된/로컬/디렉토리의/경로>
# 웹 이미지로 사전 학습된 DINOv3 ViT 모델
...

모든 백본 (Backbone)은 Hugging Face Hub의 DINOv3 컬렉션에서 사용할 수 있으며, Hugging Face Transformers 라이브러리(버전 4.56.0부터 출시된 패키지)를 통해 지원됩니다. 사용법에 대해서는 해당 문서를 참조하시기 바랍니다. 아래는 [Pipeline] 또는 [AutoModel] 클래스를 사용하여 이미지 임베딩 (Image embedding)을 얻는 방법을 보여주는 짧은 예시입니다.

from transformers import pipeline
from transformers.image_utils import load_image
url = "https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/pipeline-cat-chonk.jpeg"
...
import torch
from transformers import AutoImageProcessor, AutoModel
from transformers.image_utils import load_image
...

여기서 위의 modelpretrained_model_name은 다음 중 하나가 될 수 있습니다:

facebook/dinov3-vits16-pretrain-lvd1689m

facebook/dinov3-vits16plus-pretrain-lvd1689m

facebook/dinov3-vitb16-pretrain-lvd1689m

facebook/dinov3-vitl16-pretrain-lvd1689m

facebook/dinov3-vith16plus-pretrain-lvd1689m

facebook/dinov3-vit7b16-pretrain-lvd1689m

facebook/dinov3-convnext-base-pretrain-lvd1689m

facebook/dinov3-convnext-large-pretrain-lvd1689m

facebook/dinov3-convnext-small-pretrain-lvd1689m

facebook/dinov3-convnext-tiny-pretrain-lvd1689m

facebook/dinov3-vitl16-pretrain-sat493m

facebook/dinov3-vit7b16-pretrain-sat493m

LVD-1689M 가중치(웹 이미지로 사전 학습됨)를 사용하는 모델의 경우, 다음 변환 (Transform, 표준 ImageNet 평가 변환)을 사용하십시오:

import torchvision
from torchvision.transforms import v2
def make_transform(resize_size: int = 256):
...

SAT-493M 가중치(위성 이미지로 사전 학습됨)를 사용하는 모델의 경우, 다음 변환을 사용하십시오:

import torchvision
from torchvision.transforms import v2
def make_transform(resize_size: int = 256):
...
백본 (Backbone)사전 학습 데이터셋 (Pretraining Dataset)헤드 데이터셋 (Head Dataset)다운로드 (Download)
ViT-7B/16LVD-1689MImageNet[link]

(전체) 분류기 (Classifier) 모델은 PyTorch Hub를 통해 로드할 수 있습니다:

import torch
# DINOv3
dinov3_vit7b16_lc = torch.hub.load(REPO_DIR, 'dinov3_vit7b16_lc', source="local", weights=<DEPTHER/CHECKPOINT/URL/OR/PATH>, backbone_weights=<BACKBONE/CHECKPOINT/URL/OR/PATH>)
BackbonePretraining DatasetHead DatasetDownload
ViT-7B/16LVD-1689MSYNTHMIX[link]

depther = torch.hub.load(REPO_DIR, 'dinov3_vit7b16_dd', source="local", weights=<DEPTHER/CHECKPOINT/URL/OR/PATH>, backbone_weights=<BACKBONE/CHECKPOINT/URL/OR/PATH>)

이미지에 대한 depther의 전체 예제 코드

from PIL import Image
import torch
from torchvision.transforms import v2
...

NYU 데이터셋이 다음 지침에 따라 설정되었는지 확인하십시오.

SYNTHMIX로 학습된 사전 학습된 (Pretrained) Depther를 사용하여 NYUv2에서 저희 논문의 깊이 추정 (Depth Estimation) 결과를 재현하려면 다음을 실행하십시오:

PYTHONPATH=. python -m dinov3.run.submit dinov3/eval/depth/run.py \
config=dinov3/eval/depth/configs/config-nyu-synthmix-dpt-inference.yaml \
datasets.root=<PATH/TO/DATASET> \
...

참고 사항:

  • dinov3.run.submit 없이 코드를 실행하려면 python을 직접 사용하거나 torchrun을 사용할 수 있습니다:
PYTHONPATH=. python dinov3/eval/depth/run.py \
config=dinov3/eval/depth/configs/config-nyu-synthmix-dpt-inference.yaml \
datasets.root=<PATH/TO/DATASET> \
...
  • result_config.save_results=true를 사용하여 예측 결과를 저장할 수도 있습니다.
BackbonePretraining DatasetHead DatasetDownload
ViT-7B/16LVD-1689MCOCO2017[link]

detector = torch.hub.load(REPO_DIR, 'dinov3_vit7b16_de', source="local", weights=<DETECTOR/CHECKPOINT/URL/OR/PATH>, backbone_weights=<BACKBONE/CHECKPOINT/URL/OR/PATH>)

BackbonePretraining DatasetHead DatasetDownload
ViT-7B/16LVD-1689MADE20K[link]

segmentor = torch.hub.load(REPO_DIR, 'dinov3_vit7b16_ms', source="local", weights=<SEGMENTOR/CHECKPOINT/URL/OR/PATH>, backbone_weights=<BACKBONE/CHECKPOINT/URL/OR/PATH>)

제공된 세그멘터(segmentor) (ViT-7B + M2F)를 사용하여 ADE20K에서 전체 추론 (inference)을 실행하는 예시 명령입니다:

PYTHONPATH=. python -m dinov3.run.submit dinov3/eval/segmentation/run.py \
config=dinov3/eval/segmentation/configs/config-ade20k-m2f-inference.yaml \
datasets.root=<PATH/TO/DATASET> \
...

이미지에 대한 세그멘터의 전체 예시 코드:

import sys
sysystem.path.append(REPO_DIR)
from PIL import Image
...
BackboneDownload
ViT-L/16 distilled[link], vocabulary, vocabulary license

(전체) dino.txt 모델은 PyTorch Hub를 통해 로드할 수 있습니다:

import torch
# DINOv3
dinov3_vitl16_dinotxt_tet1280d20h24l, tokenizer = torch.hub.load(REPO_DIR, 'dinov3_vitl16_dinotxt_tet1280d20h24l', weights=<SEGMENTOR/CHECKPOINT/URL/OR/PATH>, backbone_weights=<BACKBONE/CHECKPOINT/URL/OR/PATH>)

학습 (training) 및 평가 (evaluation) 코드는 PyTorch 버전 >= 2.7.1과 몇 가지 다른 제3자 패키지 (3rd party packages)를 필요로 합니다. 해당 코드는 지정된 버전에서만 테스트되었으며 Linux 환경을 요구한다는 점에 유의하십시오. 학습 및 평가를 위한 모든 필수 의존성 (dependencies)을 설정하려면 아래 지침을 따르십시오:

micromamba (권장) - 저장소 (repository)를 클론 (clone)한 다음, 제공된 환경 정의를 사용하여 dinov3 conda 환경을 생성하고 활성화하십시오:

micromamba env create -f conda.yaml
micromamba activate dinov3

DINOv3 적용을 시작하기 위한 여러 노트북 (notebooks)이 제공됩니다:

  • 패치 특징(patch features)의 PCA: 전경 객체(foreground object)에 대한 DINOv3 패치 특징의 PCA를 시각화합니다 (논문에 포함된 무지개색 시각화) [Google Colab에서 실행]
  • 전경 세그멘테이션 (Foreground segmentation): DINOv3 특징을 기반으로 선형 전경 세그멘테이션 모델을 학습합니다 [Google Colab에서 실행]
  • 조밀 및 희소 매칭 (Dense and sparse matching): DINOv3 특징을 기반으로 서로 다른 두 이미지에 있는 객체의 패치를 매칭합니다 [Google Colab에서 실행]
  • 세그멘테이션 트래킹 (Segmentation tracking): DINOv3 특징을 기반으로 한 비매개변수적 방법 (non-parametric method)을 사용하여 비디오 세그멘테이션 트래킹을 수행합니다 [Google Colab에서 실행]
  • DINOv3 기반 dino.txt를 이용한 제로샷 세그멘테이션 (Zero-shot segmentation): dino.txt 전략을 사용하여 오픈 보캐블러리 (open-vocabulary) 세그멘테이션 결과를 계산합니다.

데이터셋의 루트 디렉토리 (root directory)에는 다음과 같은 내용이 포함되어 있어야 합니다:

<ROOT>/test/ILSVRC2012_test_00000001.JPEG

<ROOT>/test/[..]

<ROOT>/test/ILSVRC2012_test_00100000.JPEG

<ROOT>/train/n01440764/n01440764_10026.JPEG

<ROOT>/train/[...]

<ROOT>/train/n15075141/n15075141_9993.JPEG

<ROOT>/val/n01440764/ILSVRC2012_val_00000293.JPEG

<ROOT>/val/[...]

<ROOT>/val/n15075141/ILSVRC2012_val_00049174.JPEG

<ROOT>/labels.txt

제공된 데이터셋 구현체는 추가 디렉토리 (extra directory) 아래에 몇 가지 추가 메타데이터 (metadata) 파일이 존재할 것을 요구합니다:

<EXTRA>/class-ids-TRAIN.npy

<EXTRA>/class-ids-VAL.npy

<EXTRA>/class-names-TRAIN.npy

<EXTRA>/class-names-VAL.npy

<EXTRA>/entries-TEST.npy

<EXTRA>/entries-TRAIN.npy

<EXTRA>/entries-VAL.npy

이 메타데이터 파일들은 다음의 Python 코드를 통해 (한 번) 생성할 수 있습니다:

from dinov3.data.datasets import ImageNet
for split in ImageNet.Split:
    dataset = ImageNet(split=split, root="<ROOT>", extra="<EXTRA>")
...

루트 (root) 디렉토리와 추가 (extra) 디렉토리가 반드시 서로 다른 디렉토리일 필요는 없다는 점에 유의하세요.

로컬 설정에 맞게 데이터셋 클래스를 조정해 주세요.

dinov3 패키지는 Python 모듈 검색 경로 (search path)에 포함되어야 합니다. 즉, 실행할 명령 앞에 단순히 PYTHONPATH=.를 접두어로 붙이면 됩니다.

submitit을 사용하여 SLURM 클러스터 환경의 4 H100-80GB 노드 (32 GPUs)에서 DINOv3 사전 학습 (pre-training)을 실행합니다:

PYTHONPATH=${PWD} python -m dinov3.run.submit dinov3/train/train.py \
--nodes 4 \
--config-file dinov3/configs/train/vitl_im1k_lin834.yaml \
...

학습 시간은 약 14시간이며, 결과물인 체크포인트 (checkpoint)는 k-NN 평가 (k-NN eval)에서 82.0%, 선형 평가 (linear eval)에서 83.5%에 도달해야 합니다.

학습 코드 (training code)는 평가를 위해 매 12500 반복 (iterations)마다 eval 폴더에 교사 모델 (teacher)의 가중치 (weights)를 저장합니다.

DINOv3 ViT-7B/16은 비공개 데이터셋 (private dataset)으로 학습됩니다. 학습은 다음 3단계를 포함합니다:

  • 사전 학습 (Pretraining)
  • Gram anchoring
  • 고해상도 적응 (High resolution adaptation)

submitit을 사용하여 SLURM 클러스터 환경의 32개 노드 (256 GPUs)에서 DINOV3 ViT-7B/16 사전 학습을 시작합니다.

PYTHONPATH=${PWD} python -m dinov3.run.submit dinov3/train/train.py \
--nodes 32 \
--config-file dinov3/configs/train/dinov3_vit7b16_pretrain.yaml \
...
PYTHONPATH=${PWD} python -m dinov3.run.submit dinov3/train/train.py \
--nodes 32 \
--config-file dinov3/configs/train/dinov3_vit7b16_gram_anchor.yaml \
...
PYTHONPATH=${PWD} python -m dinov3.run.submit dinov3/train/train.py \
--nodes 32 \
--config-file dinov3/configs/train/dinov3_vit7b16_high_res_adapt.yaml \
...

AI 자동 생성 콘텐츠

본 콘텐츠는 GitHub Trending Jupyter Notebook (weekly)의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.

원문 바로가기
1

댓글

0