[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-74022":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":10,"language":11,"languages":10,"totalLinesOfCode":10,"stars":12,"forks":13,"watchers":14,"openIssues":15,"contributorsCount":16,"subscribersCount":16,"size":16,"stars1d":17,"stars7d":18,"stars30d":19,"stars90d":16,"forks30d":16,"starsTrendScore":20,"compositeScore":21,"rankGlobal":10,"rankLanguage":10,"license":22,"archived":23,"fork":23,"defaultBranch":24,"hasWiki":23,"hasPages":23,"topics":25,"createdAt":10,"pushedAt":10,"updatedAt":26,"readmeContent":27,"aiSummary":28,"trendingCount":16,"starSnapshotCount":16,"syncStatus":29,"lastSyncTime":30,"discoverSource":31},74022,"dinov3","facebookresearch\u002Fdinov3","facebookresearch","Reference PyTorch implementation and models for DINOv3","",null,"Jupyter Notebook",10633,874,35,131,0,32,91,270,96,118.83,"Other",false,"main",[],"2026-06-12 04:01:12",":new: [2026-03-10] :fire: The [Canopy Height Maps v2 (CHMv2) model](https:\u002F\u002Farxiv.org\u002Fabs\u002F2603.06382) and inference code are now available (more details on downloading the model weights and using the code [here](#canopy-height-maps-v2-chmv2)). The model weights are also available in [Hugging Face Hub](https:\u002F\u002Fhuggingface.co\u002Ffacebook\u002Fdinov3-vitl16-chmv2-dpt-head) and [supported](https:\u002F\u002Fgithub.com\u002Fhuggingface\u002Ftransformers\u002Fblob\u002Fmain\u002Fdocs\u002Fsource\u002Fen\u002Fmodel_doc\u002Fchmv2.md) by the Hugging Face [Transformers](https:\u002F\u002Fhuggingface.co\u002Fdocs\u002Ftransformers\u002Findex) library. Building on our original high-resolution canopy height maps released in 2024, CHMv2 delivers substantial improvements in accuracy, detail, and global consistency by leveraging DINOv3.\n\n[2025-11-20] Distillation code and configurations for ConvNeXt backbones are now released!\n\n[2025-10-13] [Semantic segmentation](https:\u002F\u002Fgithub.com\u002Ffacebookresearch\u002Fdinov3?tab=readme-ov-file#linear-segmentation-with-data-augmentation-on-ade20k) (ADE20K) and [monocular depth estimation](https:\u002F\u002Fgithub.com\u002Ffacebookresearch\u002Fdinov3?tab=readme-ov-file#linear-depth-estimation-on-nyuv2-depth) (NYUv2-Depth) linear probing code are now released!\n\n[2025-09-17] DINOv3 backbones are now supported by the [PyTorch Image Models \u002F timm](https:\u002F\u002Fgithub.com\u002Fhuggingface\u002Fpytorch-image-models\u002F) library starting with version [1.0.20](https:\u002F\u002Fgithub.com\u002Fhuggingface\u002Fpytorch-image-models\u002Freleases\u002Ftag\u002Fv1.0.20)\n\n[2025-08-29] DINOv3 backbones are [supported](https:\u002F\u002Fhuggingface.co\u002Fdocs\u002Ftransformers\u002Fmodel_doc\u002Fdinov3) by released versions of the Hugging Face [Transformers](https:\u002F\u002Fhuggingface.co\u002Fdocs\u002Ftransformers\u002Findex) library starting with version [4.56.0](https:\u002F\u002Fgithub.com\u002Fhuggingface\u002Ftransformers\u002Freleases\u002Ftag\u002Fv4.56.0)\n\n[2025-08-14] DINOv3 backbones are now available in [Hugging Face Hub](https:\u002F\u002Fhuggingface.co\u002Fcollections\u002Ffacebook\u002Fdinov3-68924841bd6b561778e31009) and [supported](https:\u002F\u002Fhuggingface.co\u002Fdocs\u002Ftransformers\u002Fmodel_doc\u002Fdinov3) by the [development](https:\u002F\u002Fgithub.com\u002Fhuggingface\u002Ftransformers\u002F) version of the Hugging Face [Transformers](https:\u002F\u002Fhuggingface.co\u002Fdocs\u002Ftransformers\u002Findex) library\n\n# DINOv3 🦖🦖🦖\n\n**[Meta AI Research, FAIR](https:\u002F\u002Fai.meta.com\u002Fresearch\u002F)**\n\nOriane Siméoni, Huy V. Vo, Maximilian Seitzer, Federico Baldassarre, Maxime Oquab, \u003Cbr\u002F>\nCijo Jose, Vasil Khalidov, Marc Szafraniec, Seungeun Yi, Michaël Ramamonjisoa, \u003Cbr\u002F>\nFrancisco Massa, Daniel Haziza, Luca Wehrstedt, Jianyuan Wang, \u003Cbr\u002F>\nTimothée Darcet, Théo Moutakanni, Leonel Sentana, Claire Roberts, \u003Cbr\u002F>\nAndrea Vedaldi, Jamie Tolan, John Brandt, Camille Couprie, \u003Cbr\u002F>\nJulien Mairal, Hervé Jégou, Patrick Labatut, Piotr Bojanowski\n\n[ :scroll: [`Paper`](https:\u002F\u002Farxiv.org\u002Fabs\u002F2508.10104)] [ :newspaper: [`Blog`](https:\u002F\u002Fai.meta.com\u002Fblog\u002Fdinov3-self-supervised-vision-model\u002F)] [ :globe_with_meridians: [`Website`](https:\u002F\u002Fai.meta.com\u002Fdinov3\u002F)] [ :book: [`BibTeX`](#citing-dinov3)]\n\nReference PyTorch implementation and models for DINOv3. For details, see the **[DINOv3](https:\u002F\u002Farxiv.org\u002Fabs\u002F2508.10104)** paper.\n\n## Overview\n\n\u003Cdiv align=\"center\">\n  \u003Cimg width=\"1364\" height=\"1024\" alt=\"market\" src=\"https:\u002F\u002Fgithub.com\u002Fuser-attachments\u002Fassets\u002F1411f491-988e-49cb-95ae-d03fe6e3c268\" \u002F>\n\n  \u003Ci>\u003C\u002Fem>\u003Cb>High-resolution dense features.\u003C\u002Fb>\u003Cbr\u002F>We visualize the cosine similarity maps obtained with DINOv3 output features\u003Cbr\u002F> between the patches marked with a red cross and all other patches.\u003C\u002Fi>\n\u003C\u002Fdiv>\n\n\u003Cbr\u002F>\n\nAn extended family of versatile vision foundation models producing high-quality dense features and achieving outstanding performance on various vision tasks including outperforming the specialized state of the art across a broad range of settings, without fine-tuning\n\n## Pretrained models\n\n:information_source: Please follow the link provided below to get access to all the model weights: once accepted, an e-mail will be sent with the complete list of URLs pointing to all the available model weights (both backbones and adapters). These URLs can then be used to either:\n- download the model or adapter weights to a local filesystem and point `torch.hub.load()` to these local weights via the `weights` or `backbone_weights` parameters, or\n- directly invoke `torch.hub.load()` to download and load a backbone or an adapter from its URL via also the `weights` or `backbone_weights` parameters.\n\nSee the example code snippets below.\n\n:warning: Please use `wget` instead of a web browser to download the weights.\n\nViT models pretrained on web dataset (LVD-1689M):\n\u003Ctable style=\"margin: auto\">\n  \u003Cthead>\n    \u003Ctr>\n      \u003Cth>Model\u003C\u002Fth>\n      \u003Cth>Parameters\u003C\u002Fth>\n      \u003Cth>Pretraining\u003Cbr\u002F>Dataset\u003C\u002Fth>\n      \u003Cth>Download\u003C\u002Fth>\n    \u003C\u002Ftr>\n  \u003C\u002Fthead>\n  \u003Ctbody>\n    \u003Ctr>\n      \u003Ctd>ViT-S\u002F16 distilled \u003C\u002Ftd>\n      \u003Ctd align=\"right\">21M\u003C\u002Ftd>\n      \u003Ctd align=\"center\">LVD-1689M\u003C\u002Ftd>\n      \u003Ctd align=\"center\">\u003Ca href=\"https:\u002F\u002Fai.meta.com\u002Fresources\u002Fmodels-and-libraries\u002Fdinov3-downloads\u002F\">[link]\u003C\u002Fa>\u003C\u002Ftd>\n    \u003C\u002Ftr>\n    \u003Ctr>\n      \u003Ctd>ViT-S+\u002F16 distilled\u003C\u002Ftd>\n      \u003Ctd align=\"right\">29M\u003C\u002Ftd>\n      \u003Ctd align=\"center\">LVD-1689M\u003C\u002Ftd>\n      \u003Ctd align=\"center\">\u003Ca href=\"https:\u002F\u002Fai.meta.com\u002Fresources\u002Fmodels-and-libraries\u002Fdinov3-downloads\u002F\">[link]\u003C\u002Fa>\u003C\u002Ftd>\n    \u003C\u002Ftr>\n    \u003Ctr>\n      \u003Ctd>ViT-B\u002F16 distilled\u003C\u002Ftd>\n      \u003Ctd align=\"right\">86M\u003C\u002Ftd>\n      \u003Ctd align=\"center\">LVD-1689M\u003C\u002Ftd>\n      \u003Ctd align=\"center\">\u003Ca href=\"https:\u002F\u002Fai.meta.com\u002Fresources\u002Fmodels-and-libraries\u002Fdinov3-downloads\u002F\">[link]\u003C\u002Fa>\u003C\u002Ftd>\n    \u003C\u002Ftr>\n    \u003Ctr>\n      \u003Ctd>ViT-L\u002F16 distilled\u003C\u002Ftd>\n      \u003Ctd align=\"right\">300M\u003C\u002Ftd>\n      \u003Ctd align=\"center\">LVD-1689M\u003C\u002Ftd>\n      \u003Ctd align=\"center\">\u003Ca href=\"https:\u002F\u002Fai.meta.com\u002Fresources\u002Fmodels-and-libraries\u002Fdinov3-downloads\u002F\">[link]\u003C\u002Fa>\u003C\u002Ftd>\n    \u003C\u002Ftr>\n    \u003Ctr>\n      \u003Ctd>ViT-H+\u002F16 distilled\u003C\u002Ftd>\n      \u003Ctd align=\"right\">840M\u003C\u002Ftd>\n      \u003Ctd align=\"center\">LVD-1689M\u003C\u002Ftd>\n      \u003Ctd align=\"center\">\u003Ca href=\"https:\u002F\u002Fai.meta.com\u002Fresources\u002Fmodels-and-libraries\u002Fdinov3-downloads\u002F\">[link]\u003C\u002Fa>\u003C\u002Ftd>\n    \u003C\u002Ftr>\n    \u003Ctr>\n      \u003Ctd>ViT-7B\u002F16\u003C\u002Ftd>\n      \u003Ctd align=\"right\">6,716M\u003C\u002Ftd>\n      \u003Ctd align=\"center\">LVD-1689M\u003C\u002Ftd>\n      \u003Ctd align=\"center\">\u003Ca href=\"https:\u002F\u002Fai.meta.com\u002Fresources\u002Fmodels-and-libraries\u002Fdinov3-downloads\u002F\">[link]\u003C\u002Fa>\u003C\u002Ftd>\n    \u003C\u002Ftr>\n  \u003C\u002Ftbody>\n\u003C\u002Ftable>\n\nConvNeXt models pretrained on web dataset (LVD-1689M):\n\u003Ctable style=\"margin: auto\">\n  \u003Cthead>\n    \u003Ctr>\n      \u003Cth>Model\u003C\u002Fth>\n      \u003Cth>Parameters\u003C\u002Fth>\n      \u003Cth>Pretraining\u003Cbr\u002F>Dataset\u003C\u002Fth>\n      \u003Cth>Download\u003C\u002Fth>\n    \u003C\u002Ftr>\n  \u003C\u002Fthead>\n  \u003Ctbody>\n    \u003Ctr>\n      \u003Ctd>ConvNeXt Tiny\u003C\u002Ftd>\n      \u003Ctd align=\"right\">29M\u003C\u002Ftd>\n      \u003Ctd align=\"center\">LVD-1689M\u003C\u002Ftd>\n      \u003Ctd align=\"center\">\u003Ca href=\"https:\u002F\u002Fai.meta.com\u002Fresources\u002Fmodels-and-libraries\u002Fdinov3-downloads\u002F\">[link]\u003C\u002Fa>\u003C\u002Ftd>\n    \u003C\u002Ftr>\n    \u003Ctr>\n      \u003Ctd>ConvNeXt Small\u003C\u002Ftd>\n      \u003Ctd align=\"right\">50M\u003C\u002Ftd>\n      \u003Ctd align=\"center\">LVD-1689M\u003C\u002Ftd>\n      \u003Ctd align=\"center\">\u003Ca href=\"https:\u002F\u002Fai.meta.com\u002Fresources\u002Fmodels-and-libraries\u002Fdinov3-downloads\u002F\">[link]\u003C\u002Fa>\u003C\u002Ftd>\n    \u003C\u002Ftr>\n    \u003Ctr>\n      \u003Ctd>ConvNeXt Base\u003C\u002Ftd>\n      \u003Ctd align=\"right\">89M\u003C\u002Ftd>\n      \u003Ctd align=\"center\">LVD-1689M\u003C\u002Ftd>\n      \u003Ctd align=\"center\">\u003Ca href=\"https:\u002F\u002Fai.meta.com\u002Fresources\u002Fmodels-and-libraries\u002Fdinov3-downloads\u002F\">[link]\u003C\u002Fa>\u003C\u002Ftd>\n    \u003C\u002Ftr>\n    \u003Ctr>\n      \u003Ctd>ConvNeXt Large\u003C\u002Ftd>\n      \u003Ctd align=\"right\">198M\u003C\u002Ftd>\n      \u003Ctd align=\"center\">LVD-1689M\u003C\u002Ftd>\n      \u003Ctd align=\"center\">\u003Ca href=\"https:\u002F\u002Fai.meta.com\u002Fresources\u002Fmodels-and-libraries\u002Fdinov3-downloads\u002F\">[link]\u003C\u002Fa>\u003C\u002Ftd>\n    \u003C\u002Ftr>\n  \u003C\u002Ftbody>\n\u003C\u002Ftable>\n\nViT models pretrained on satellite dataset (SAT-493M):\n\u003Ctable style=\"margin: auto\">\n  \u003Cthead>\n    \u003Ctr>\n      \u003Cth>Model\u003C\u002Fth>\n      \u003Cth>Parameters\u003C\u002Fth>\n      \u003Cth>Pretraining\u003Cbr\u002F>Dataset\u003C\u002Fth>\n      \u003Cth>Download\u003C\u002Fth>\n    \u003C\u002Ftr>\n  \u003C\u002Fthead>\n  \u003Ctbody>\n    \u003Ctr>\n      \u003Ctd>ViT-L\u002F16 distilled\u003C\u002Ftd>\n      \u003Ctd align=\"right\">300M\u003C\u002Ftd>\n      \u003Ctd align=\"center\">SAT-493M\u003C\u002Ftd>\n      \u003Ctd align=\"center\">\u003Ca href=\"https:\u002F\u002Fai.meta.com\u002Fresources\u002Fmodels-and-libraries\u002Fdinov3-downloads\u002F\">[link]\u003C\u002Fa>\u003C\u002Ftd>\n    \u003C\u002Ftr>\n    \u003Ctr>\n      \u003Ctd>ViT-7B\u002F16\u003C\u002Ftd>\n      \u003Ctd align=\"right\">6,716M\u003C\u002Ftd>\n      \u003Ctd align=\"center\">SAT-493M\u003C\u002Ftd>\n      \u003Ctd align=\"center\">\u003Ca href=\"https:\u002F\u002Fai.meta.com\u002Fresources\u002Fmodels-and-libraries\u002Fdinov3-downloads\u002F\">[link]\u003C\u002Fa>\u003C\u002Ftd>\n    \u003C\u002Ftr>\n  \u003C\u002Ftbody>\n\u003C\u002Ftable>\n\n\n### Pretrained backbones (via PyTorch [Hub](https:\u002F\u002Fdocs.pytorch.org\u002Fdocs\u002Fstable\u002Fhub.html))\n\nPlease follow the instructions [here](https:\u002F\u002Fpytorch.org\u002Fget-started\u002Flocally\u002F) to install PyTorch (the only required dependency for loading the model). Installing PyTorch with CUDA support is strongly recommended.\n\n```python\nimport torch\n\nREPO_DIR = \u003CPATH\u002FTO\u002FA\u002FLOCAL\u002FDIRECTORY\u002FWHERE\u002FTHE\u002FDINOV3\u002FREPO\u002FWAS\u002FCLONED>\n\n# DINOv3 ViT models pretrained on web images\ndinov3_vits16 = torch.hub.load(REPO_DIR, 'dinov3_vits16', source='local', weights=\u003CCHECKPOINT\u002FURL\u002FOR\u002FPATH>)\ndinov3_vits16plus = torch.hub.load(REPO_DIR, 'dinov3_vits16plus', source='local', weights=\u003CCHECKPOINT\u002FURL\u002FOR\u002FPATH>)\ndinov3_vitb16 = torch.hub.load(REPO_DIR, 'dinov3_vitb16', source='local', weights=\u003CCHECKPOINT\u002FURL\u002FOR\u002FPATH>)\ndinov3_vitl16 = torch.hub.load(REPO_DIR, 'dinov3_vitl16', source='local', weights=\u003CCHECKPOINT\u002FURL\u002FOR\u002FPATH>)\ndinov3_vith16plus = torch.hub.load(REPO_DIR, 'dinov3_vith16plus', source='local', weights=\u003CCHECKPOINT\u002FURL\u002FOR\u002FPATH>)\ndinov3_vit7b16 = torch.hub.load(REPO_DIR, 'dinov3_vit7b16', source='local', weights=\u003CCHECKPOINT\u002FURL\u002FOR\u002FPATH>)\n\n# DINOv3 ConvNeXt models pretrained on web images\ndinov3_convnext_tiny = torch.hub.load(REPO_DIR, 'dinov3_convnext_tiny', source='local', weights=\u003CCHECKPOINT\u002FURL\u002FOR\u002FPATH>)\ndinov3_convnext_small = torch.hub.load(REPO_DIR, 'dinov3_convnext_small', source='local', weights=\u003CCHECKPOINT\u002FURL\u002FOR\u002FPATH>)\ndinov3_convnext_base = torch.hub.load(REPO_DIR, 'dinov3_convnext_base', source='local', weights=\u003CCHECKPOINT\u002FURL\u002FOR\u002FPATH>)\ndinov3_convnext_large = torch.hub.load(REPO_DIR, 'dinov3_convnext_large', source='local', weights=\u003CCHECKPOINT\u002FURL\u002FOR\u002FPATH>)\n\n# DINOv3 ViT models pretrained on satellite imagery\ndinov3_vitl16 = torch.hub.load(REPO_DIR, 'dinov3_vitl16', source='local', weights=\u003CCHECKPOINT\u002FURL\u002FOR\u002FPATH>)\ndinov3_vit7b16 = torch.hub.load(REPO_DIR, 'dinov3_vit7b16', source='local', weights=\u003CCHECKPOINT\u002FURL\u002FOR\u002FPATH>)\n```\n\n### Pretrained backbones (via Hugging Face [Transformers](https:\u002F\u002Fhuggingface.co\u002Fdocs\u002Ftransformers\u002F))\n\nAll the backbones are available in the [DINOv3](https:\u002F\u002Fhuggingface.co\u002Fcollections\u002Ffacebook\u002Fdinov3-68924841bd6b561778e31009) collection on Hugging Face Hub and supported via the Hugging Face [Transformers](https:\u002F\u002Fhuggingface.co\u002Fdocs\u002Ftransformers\u002Findex) library (with released packages from version 4.56.0). Please refer to the corresponding documentation for usage, but below is a short example that demonstrates how to obtain an image embedding with either [Pipeline] or the [AutoModel] class.\n\n```python\nfrom transformers import pipeline\nfrom transformers.image_utils import load_image\n\nurl = \"https:\u002F\u002Fhuggingface.co\u002Fdatasets\u002Fhuggingface\u002Fdocumentation-images\u002Fresolve\u002Fmain\u002Fpipeline-cat-chonk.jpeg\"\nimage = load_image(url)\n\nfeature_extractor = pipeline(\n    model=\"facebook\u002Fdinov3-convnext-tiny-pretrain-lvd1689m\",\n    task=\"image-feature-extraction\",\n)\nfeatures = feature_extractor(image)\n```\n\n```python\nimport torch\nfrom transformers import AutoImageProcessor, AutoModel\nfrom transformers.image_utils import load_image\n\nurl = \"http:\u002F\u002Fimages.cocodataset.org\u002Fval2017\u002F000000039769.jpg\"\nimage = load_image(url)\n\npretrained_model_name = \"facebook\u002Fdinov3-convnext-tiny-pretrain-lvd1689m\"\nprocessor = AutoImageProcessor.from_pretrained(pretrained_model_name)\nmodel = AutoModel.from_pretrained(\n    pretrained_model_name,\n    device_map=\"auto\",\n)\n\ninputs = processor(images=image, return_tensors=\"pt\").to(model.device)\nwith torch.inference_mode():\n    outputs = model(**inputs)\n\npooled_output = outputs.pooler_output\nprint(\"Pooled output shape:\", pooled_output.shape)\n```\n\nwhere `model` and `pretrained_model_name` above can be one of:\n- `facebook\u002Fdinov3-vits16-pretrain-lvd1689m`\n- `facebook\u002Fdinov3-vits16plus-pretrain-lvd1689m`\n- `facebook\u002Fdinov3-vitb16-pretrain-lvd1689m`\n- `facebook\u002Fdinov3-vitl16-pretrain-lvd1689m`\n- `facebook\u002Fdinov3-vith16plus-pretrain-lvd1689m`\n- `facebook\u002Fdinov3-vit7b16-pretrain-lvd1689m`\n- `facebook\u002Fdinov3-convnext-base-pretrain-lvd1689m`\n- `facebook\u002Fdinov3-convnext-large-pretrain-lvd1689m`\n- `facebook\u002Fdinov3-convnext-small-pretrain-lvd1689m`\n- `facebook\u002Fdinov3-convnext-tiny-pretrain-lvd1689m`\n- `facebook\u002Fdinov3-vitl16-pretrain-sat493m`\n- `facebook\u002Fdinov3-vit7b16-pretrain-sat493m`\n\n### Image transforms\n\nFor models using the LVD-1689M weights (pretrained on web images), please use the following transform (standard ImageNet evaluation transform):\n\n```python\nimport torchvision\nfrom torchvision.transforms import v2\n\ndef make_transform(resize_size: int = 256):\n    to_tensor = v2.ToImage()\n    resize = v2.Resize((resize_size, resize_size), antialias=True)\n    to_float = v2.ToDtype(torch.float32, scale=True)\n    normalize = v2.Normalize(\n        mean=(0.485, 0.456, 0.406),\n        std=(0.229, 0.224, 0.225),\n    )\n    return v2.Compose([to_tensor, resize, to_float, normalize])\n```\n\n\nFor models using the SAT-493M weights (pretrained on satellite imagery), please use the following transform:\n\n\n```python\nimport torchvision\nfrom torchvision.transforms import v2\n\ndef make_transform(resize_size: int = 256):\n    to_tensor = v2.ToImage()\n    resize = v2.Resize((resize_size, resize_size), antialias=True)\n    to_float = v2.ToDtype(torch.float32, scale=True)\n    normalize = v2.Normalize(\n        mean=(0.430, 0.411, 0.296),\n        std=(0.213, 0.156, 0.143),\n    )\n    return v2.Compose([to_tensor, resize, to_float, normalize])\n```\n\n### Pretrained heads - Image classification\n\n\u003Ctable style=\"margin: auto\">\n  \u003Cthead>\n    \u003Ctr>\n      \u003Cth>Backbone\u003C\u002Fth>\n      \u003Cth>Pretraining\u003Cbr\u002F>Dataset\u003C\u002Fth>\n      \u003Cth>Head\u003Cbr\u002F>Dataset\u003C\u002Fth>\n      \u003Cth>Download\u003C\u002Fth>\n    \u003C\u002Ftr>\n  \u003C\u002Fthead>\n  \u003Ctbody>\n    \u003Ctr>\n      \u003Ctd>ViT-7B\u002F16\u003C\u002Ftd>\n      \u003Ctd align=\"center\">LVD-1689M\u003C\u002Ftd>\n      \u003Ctd align=\"center\">ImageNet\u003C\u002Ftd>\n      \u003Ctd align=\"center\">\u003Ca href=\"https:\u002F\u002Fai.meta.com\u002Fresources\u002Fmodels-and-libraries\u002Fdinov3-downloads\u002F\">[link]\u003C\u002Fa>\u003C\u002Ftd>\n    \u003C\u002Ftr>\n  \u003C\u002Ftbody>\n\u003C\u002Ftable>\n\n\nThe (full) classifier models can be loaded via PyTorch Hub:\n\n```python\nimport torch\n\n# DINOv3\ndinov3_vit7b16_lc = torch.hub.load(REPO_DIR, 'dinov3_vit7b16_lc', source=\"local\", weights=\u003CDEPTHER\u002FCHECKPOINT\u002FURL\u002FOR\u002FPATH>, backbone_weights=\u003CBACKBONE\u002FCHECKPOINT\u002FURL\u002FOR\u002FPATH>)\n\n```\n\n### Pretrained heads - Depther trained on SYNTHMIX dataset\n\n\u003Ctable style=\"margin: auto\">\n  \u003Cthead>\n    \u003Ctr>\n      \u003Cth>Backbone\u003C\u002Fth>\n      \u003Cth>Pretraining\u003Cbr\u002F>Dataset\u003C\u002Fth>\n      \u003Cth>Head\u003Cbr\u002F>Dataset\u003C\u002Fth>\n      \u003Cth>Download\u003C\u002Fth>\n    \u003C\u002Ftr>\n  \u003C\u002Fthead>\n  \u003Ctbody>\n    \u003Ctr>\n      \u003Ctd>ViT-7B\u002F16\u003C\u002Ftd>\n      \u003Ctd align=\"center\">LVD-1689M\u003C\u002Ftd>\n      \u003Ctd align=\"center\">SYNTHMIX\u003C\u002Ftd>\n      \u003Ctd align=\"center\">\u003Ca href=\"https:\u002F\u002Fai.meta.com\u002Fresources\u002Fmodels-and-libraries\u002Fdinov3-downloads\u002F\">[link]\u003C\u002Fa>\u003C\u002Ftd>\n    \u003C\u002Ftr>\n  \u003C\u002Ftbody>\n\u003C\u002Ftable>\n\n\n```python\ndepther = torch.hub.load(REPO_DIR, 'dinov3_vit7b16_dd', source=\"local\", weights=\u003CDEPTHER\u002FCHECKPOINT\u002FURL\u002FOR\u002FPATH>, backbone_weights=\u003CBACKBONE\u002FCHECKPOINT\u002FURL\u002FOR\u002FPATH>)\n```\n\nFull example code of depther on an image\n\n```python\nfrom PIL import Image\nimport torch\nfrom torchvision.transforms import v2\nimport matplotlib.pyplot as plt\nfrom matplotlib import colormaps\n\ndef get_img():\n    import requests\n    url = \"http:\u002F\u002Fimages.cocodataset.org\u002Fval2017\u002F000000039769.jpg\"\n    image = Image.open(requests.get(url, stream=True).raw).convert(\"RGB\")\n    return image\n\ndef make_transform(resize_size: int | list[int] = 768):\n    to_tensor = v2.ToImage()\n    resize = v2.Resize((resize_size, resize_size), antialias=True)\n    to_float = v2.ToDtype(torch.float32, scale=True)\n    normalize = v2.Normalize(\n        mean=(0.485, 0.456, 0.406),\n        std=(0.229, 0.224, 0.225),\n    )\n    return v2.Compose([to_tensor, resize, to_float, normalize])\n\ndepther = torch.hub.load(REPO_DIR, 'dinov3_vit7b16_dd', source=\"local\", weights=\u003CDEPTHER\u002FCHECKPOINT\u002FURL\u002FOR\u002FPATH>, backbone_weights=\u003CBACKBONE\u002FCHECKPOINT\u002FURL\u002FOR\u002FPATH>)\n\nimg_size = 1024\nimg = get_img()\ntransform = make_transform(img_size)\nwith torch.inference_mode():\n    with torch.autocast('cuda', dtype=torch.bfloat16):\n        batch_img = transform(img)[None]\n        batch_img = batch_img\n        depths = depther(batch_img)\n\nplt.figure(figsize=(12, 6))\nplt.subplot(121)\nplt.imshow(img)\nplt.axis(\"off\")\nplt.subplot(122)\nplt.imshow(depths[0,0].cpu(), cmap=colormaps[\"Spectral\"])\nplt.axis(\"off\")\n\n```\n\n#### Reproduce paper results\n\nMake sure the NYU dataset is setup following [this](DATASETS.md#depth-estimation-on-nyu).\n\nLaunch the following to reproduce our paper's depth estimation results on NYUv2 with the pretrained Depther trained on SYNTHMIX:\n\n```shell\nPYTHONPATH=. python -m dinov3.run.submit dinov3\u002Feval\u002Fdepth\u002Frun.py \\\nconfig=dinov3\u002Feval\u002Fdepth\u002Fconfigs\u002Fconfig-nyu-synthmix-dpt-inference.yaml \\\ndatasets.root=\u003CPATH\u002FTO\u002FDATASET> \\\nload_from=dinov3_vit7b16_dd \\\n--output-dir \u003CPATH\u002FTO\u002FOUTPUT\u002FDIR>\n```\n\nNotes:\n- if you want to launch the code without dinov3.run.submit, you can do so using python directly or torchrun:\n\n```shell\nPYTHONPATH=. python dinov3\u002Feval\u002Fdepth\u002Frun.py \\\nconfig=dinov3\u002Feval\u002Fdepth\u002Fconfigs\u002Fconfig-nyu-synthmix-dpt-inference.yaml \\\ndatasets.root=\u003CPATH\u002FTO\u002FDATASET> \\\nload_from=dinov3_vit7b16_dd \\\noutput_dir=\u003CPATH\u002FTO\u002FOUTPUT\u002FDIR>\n```\n\n- One can also save prediction results using `result_config.save_results=true`.\n\n\n### Pretrained heads - Detector trained on COCO2017 dataset\n\n\u003Ctable style=\"margin: auto\">\n  \u003Cthead>\n    \u003Ctr>\n      \u003Cth>Backbone\u003C\u002Fth>\n      \u003Cth>Pretraining\u003Cbr\u002F>Dataset\u003C\u002Fth>\n      \u003Cth>Head\u003Cbr\u002F>Dataset\u003C\u002Fth>\n      \u003Cth>Download\u003C\u002Fth>\n    \u003C\u002Ftr>\n  \u003C\u002Fthead>\n  \u003Ctbody>\n    \u003Ctr>\n      \u003Ctd>ViT-7B\u002F16\u003C\u002Ftd>\n      \u003Ctd align=\"center\">LVD-1689M\u003C\u002Ftd>\n      \u003Ctd align=\"center\">COCO2017\u003C\u002Ftd>\n      \u003Ctd align=\"center\">\u003Ca href=\"https:\u002F\u002Fai.meta.com\u002Fresources\u002Fmodels-and-libraries\u002Fdinov3-downloads\u002F\">[link]\u003C\u002Fa>\u003C\u002Ftd>\n    \u003C\u002Ftr>\n  \u003C\u002Ftbody>\n\u003C\u002Ftable>\n\n\n```python\ndetector = torch.hub.load(REPO_DIR, 'dinov3_vit7b16_de', source=\"local\", weights=\u003CDETECTOR\u002FCHECKPOINT\u002FURL\u002FOR\u002FPATH>, backbone_weights=\u003CBACKBONE\u002FCHECKPOINT\u002FURL\u002FOR\u002FPATH>)\n```\n\n### Pretrained heads - Segmentor trained on ADE20K dataset\n\n\u003Ctable style=\"margin: auto\">\n  \u003Cthead>\n    \u003Ctr>\n      \u003Cth>Backbone\u003C\u002Fth>\n      \u003Cth>Pretraining\u003Cbr\u002F>Dataset\u003C\u002Fth>\n      \u003Cth>Head\u003Cbr\u002F>Dataset\u003C\u002Fth>\n      \u003Cth>Download\u003C\u002Fth>\n    \u003C\u002Ftr>\n  \u003C\u002Fthead>\n  \u003Ctbody>\n    \u003Ctr>\n      \u003Ctd>ViT-7B\u002F16\u003C\u002Ftd>\n      \u003Ctd align=\"center\">LVD-1689M\u003C\u002Ftd>\n      \u003Ctd align=\"center\">ADE20K\u003C\u002Ftd>\n      \u003Ctd align=\"center\">\u003Ca href=\"https:\u002F\u002Fai.meta.com\u002Fresources\u002Fmodels-and-libraries\u002Fdinov3-downloads\u002F\">[link]\u003C\u002Fa>\u003C\u002Ftd>\n    \u003C\u002Ftr>\n  \u003C\u002Ftbody>\n\u003C\u002Ftable>\n\n```python\nsegmentor = torch.hub.load(REPO_DIR, 'dinov3_vit7b16_ms', source=\"local\", weights=\u003CSEGMENTOR\u002FCHECKPOINT\u002FURL\u002FOR\u002FPATH>, backbone_weights=\u003CBACKBONE\u002FCHECKPOINT\u002FURL\u002FOR\u002FPATH>)\n```\n\nExample command to run a full inference on ADE20K with the provided segmentor (ViT-7B + M2F):\n\n```shell\nPYTHONPATH=. python -m dinov3.run.submit dinov3\u002Feval\u002Fsegmentation\u002Frun.py \\\nconfig=dinov3\u002Feval\u002Fsegmentation\u002Fconfigs\u002Fconfig-ade20k-m2f-inference.yaml  \\\ndatasets.root=\u003CPATH\u002FTO\u002FDATASET> \\\nload_from=dinov3_vit7b16_ms \\\n--output-dir \u003CPATH\u002FTO\u002FOUTPUT\u002FDIR>\n```\n\nFull example code of segmentator on an image\n\n```python\nimport sys\nsys.path.append(REPO_DIR)\n\nfrom PIL import Image\nimport torch\nfrom torchvision import transforms\nimport matplotlib.pyplot as plt\nfrom matplotlib import colormaps\nfrom functools import partial\nfrom dinov3.eval.segmentation.inference import make_inference\n\n\ndef get_img():\n    import requests\n    url = \"http:\u002F\u002Fimages.cocodataset.org\u002Fval2017\u002F000000039769.jpg\"\n    image = Image.open(requests.get(url, stream=True).raw).convert(\"RGB\")\n    return image\n\ndef make_transform(resize_size: int | list[int] = 768):\n    to_tensor = v2.ToImage()\n    resize = v2.Resize((resize_size, resize_size), antialias=True)\n    to_float = v2.ToDtype(torch.float32, scale=True)\n    normalize = v2.Normalize(\n        mean=(0.485, 0.456, 0.406),\n        std=(0.229, 0.224, 0.225),\n    )\n    return v2.Compose([to_tensor, resize, to_float, normalize])\n\nsegmentor = torch.hub.load(REPO_DIR, 'dinov3_vit7b16_ms', source=\"local\", weights=\u003CSEGMENTOR\u002FCHECKPOINT\u002FURL\u002FOR\u002FPATH>, backbone_weights=\u003CBACKBONE\u002FCHECKPOINT\u002FURL\u002FOR\u002FPATH>)\n\nimg_size = 896\nimg  = get_img()\ntransform = make_transform(img_size)\nwith torch.inference_mode():\n    with torch.autocast('cuda', dtype=torch.bfloat16):\n        batch_img = transform(img)[None]\n        pred_vit7b = segmentor(batch_img)  # raw predictions\n        # actual segmentation map\n        segmentation_map_vit7b = make_inference(\n            batch_img,\n            segmentor,\n            inference_mode=\"slide\",\n            decoder_head_type=\"m2f\",\n            rescale_to=(img.size[-1], img.size[-2]),\n            n_output_channels=150,\n            crop_size=(img_size, img_size),\n            stride=(img_size, img_size),\n            output_activation=partial(torch.nn.functional.softmax, dim=1),\n        ).argmax(dim=1, keepdim=True)\nplt.figure(figsize=(12, 6))\nplt.subplot(121)\nplt.imshow(img)\nplt.axis(\"off\")\nplt.subplot(122)\nplt.imshow(segmentation_map_vit7b[0,0].cpu(), cmap=colormaps[\"Spectral\"])\nplt.axis(\"off\")\n```\n\n\n\n\n### Pretrained heads - Zero-shot tasks with `dino.txt`\n\n\u003Ctable style=\"margin: auto\">\n  \u003Cthead>\n    \u003Ctr>\n      \u003Cth rowspan=\"2\">Backbone\u003C\u002Fth>\n      \u003Cth>Download\u003C\u002Fth>\n    \u003C\u002Ftr>\n  \u003C\u002Fthead>\n  \u003Ctbody>\n    \u003Ctr>\n      \u003Ctd>ViT-L\u002F16 distilled\u003C\u002Ftd>\n      \u003Ctd align=\"center\">\n        \u003Ca href=\"https:\u002F\u002Fai.meta.com\u002Fresources\u002Fmodels-and-libraries\u002Fdinov3-downloads\u002F\">[link]\u003C\u002Fa>,\n        \u003Ca href=\"https:\u002F\u002Fdl.fbaipublicfiles.com\u002Fdinov3\u002Fthirdparty\u002Fbpe_simple_vocab_16e6.txt.gz\">vocabulary\u003C\u002Fa>,\n        \u003Ca href=\"https:\u002F\u002Fdl.fbaipublicfiles.com\u002Fdinov2\u002Fthirdparty\u002FLICENSE\">vocabulary license\u003C\u002Fa>\n      \u003C\u002Ftd>\n    \u003C\u002Ftr>\n  \u003C\u002Ftbody>\n\u003C\u002Ftable>\n\nThe (full) dino.txt model can be loaded via PyTorch Hub:\n\n```python\nimport torch\n# DINOv3\ndinov3_vitl16_dinotxt_tet1280d20h24l, tokenizer = torch.hub.load(REPO_DIR, 'dinov3_vitl16_dinotxt_tet1280d20h24l', weights=\u003CSEGMENTOR\u002FCHECKPOINT\u002FURL\u002FOR\u002FPATH>, backbone_weights=\u003CBACKBONE\u002FCHECKPOINT\u002FURL\u002FOR\u002FPATH>)\n```\n\n\n## Installation\n\nThe training and evaluation code requires PyTorch version >= 2.7.1 as well as a few other 3rd party packages. Note that the code has only been tested with the specified versions and also expects a Linux environment. To setup all the required dependencies for training and evaluation, please follow the instructions below:\n\n*[micromamba](https:\u002F\u002Fmamba.readthedocs.io\u002Fen\u002Flatest\u002Fuser_guide\u002Fmicromamba.html)* **(Recommended)** - Clone the repository and then create and activate a `dinov3` conda environment using the provided environment definition:\n\n```shell\nmicromamba env create -f conda.yaml\nmicromamba activate dinov3\n```\n\n## Getting started\n\nSeveral notebooks are provided to get started applying DINOv3:\n- [PCA of patch features](notebooks\u002Fpca.ipynb): display the PCA of DINOv3 patch features on a foreground object (rainbow visualizations from the paper) [[Run in Google Colab]](https:\u002F\u002Fcolab.research.google.com\u002Fgithub\u002Ffacebookresearch\u002Fdinov3\u002Fblob\u002Fmain\u002Fnotebooks\u002Fpca.ipynb)\n- [Foreground segmentation](notebooks\u002Fforeground_segmentation.ipynb): train a linear foreground segmentation model based on DINOv3 features [[Run in Google Colab]](https:\u002F\u002Fcolab.research.google.com\u002Fgithub\u002Ffacebookresearch\u002Fdinov3\u002Fblob\u002Fmain\u002Fnotebooks\u002Fforeground_segmentation.ipynb)\n- [Dense and sparse matching](notebooks\u002Fdense_sparse_matching.ipynb): match patches from objects on two different images based on DINOv3 features [[Run in Google Colab]](https:\u002F\u002Fcolab.research.google.com\u002Fgithub\u002Ffacebookresearch\u002Fdinov3\u002Fblob\u002Fmain\u002Fnotebooks\u002Fdense_sparse_matching.ipynb)\n- [Segmentation tracking](notebooks\u002Fsegmentation_tracking.ipynb): video segmentation tracking using a non-parametric method based on DINOv3 features [[Run in Google Colab]](https:\u002F\u002Fcolab.research.google.com\u002Fgithub\u002Ffacebookresearch\u002Fdinov3\u002Fblob\u002Fmain\u002Fnotebooks\u002Fsegmentation_tracking.ipynb)\n- [Zero-shot segmentation with DINOv3-based dino.txt](notebooks\u002Fdinotxt_segmentation_inference.ipynb): compute the open-vocabulary segmentation results with dino.txt strategy.\n\n## Data preparation\n\n### ImageNet-1k\n\nThe root directory of the dataset should hold the following contents:\n\n- `\u003CROOT>\u002Ftest\u002FILSVRC2012_test_00000001.JPEG`\n- `\u003CROOT>\u002Ftest\u002F[..]`\n- `\u003CROOT>\u002Ftest\u002FILSVRC2012_test_00100000.JPEG`\n- `\u003CROOT>\u002Ftrain\u002Fn01440764\u002Fn01440764_10026.JPEG`\n- `\u003CROOT>\u002Ftrain\u002F[...]`\n- `\u003CROOT>\u002Ftrain\u002Fn15075141\u002Fn15075141_9993.JPEG`\n- `\u003CROOT>\u002Fval\u002Fn01440764\u002FILSVRC2012_val_00000293.JPEG`\n- `\u003CROOT>\u002Fval\u002F[...]`\n- `\u003CROOT>\u002Fval\u002Fn15075141\u002FILSVRC2012_val_00049174.JPEG`\n- `\u003CROOT>\u002Flabels.txt`\n\nThe provided dataset implementation expects a few additional metadata files to be present under the extra directory:\n\n- `\u003CEXTRA>\u002Fclass-ids-TRAIN.npy`\n- `\u003CEXTRA>\u002Fclass-ids-VAL.npy`\n- `\u003CEXTRA>\u002Fclass-names-TRAIN.npy`\n- `\u003CEXTRA>\u002Fclass-names-VAL.npy`\n- `\u003CEXTRA>\u002Fentries-TEST.npy`\n- `\u003CEXTRA>\u002Fentries-TRAIN.npy`\n- `\u003CEXTRA>\u002Fentries-VAL.npy`\n\nThese metadata files can be generated (once) with the following lines of Python code:\n\n```python\nfrom dinov3.data.datasets import ImageNet\n\nfor split in ImageNet.Split:\n    dataset = ImageNet(split=split, root=\"\u003CROOT>\", extra=\"\u003CEXTRA>\")\n    dataset.dump_extra()\n```\n\nNote that the root and extra directories do not have to be distinct directories.\n\n### ImageNet-22k\n\nPlease adapt the [dataset class](dinov3\u002Fdata\u002Fdatasets\u002Fimage_net_22k.py) to match your local setup.\n\n\u003Cbr \u002F>\n\n:warning: To execute the commands provided in the next sections for training and evaluation, the `dinov3` package should be included in the Python module search path, i.e. simply prefix the command to run with `PYTHONPATH=.`.\n\n## Training\n\n### Fast setup: training DINOv3 ViT-L\u002F16 on ImageNet-1k\n\nRun DINOv3 pre-training on 4 H100-80GB nodes (32 GPUs) in a SLURM cluster environment with submitit:\n\n```shell\n PYTHONPATH=${PWD} python -m dinov3.run.submit dinov3\u002Ftrain\u002Ftrain.py \\\n  --nodes 4 \\\n  --config-file dinov3\u002Fconfigs\u002Ftrain\u002Fvitl_im1k_lin834.yaml \\\n  --output-dir \u003CPATH\u002FTO\u002FOUTPUT\u002FDIR> \\\n  train.dataset_path=ImageNet22k:root=\u003CPATH\u002FTO\u002FDATASET>:extra=\u003CPATH\u002FTO\u002FDATASET>\n```\nTraining time is approximately 14 hours and the resulting checkpoint should reach 82.0% on k-NN eval and 83.5% on linear eval.\n\nThe training code saves the weights of the teacher in the eval folder every 12500 iterations for evaluation.\n\n### Exact DINOv3 setup: training DINOv3 ViT-7B\u002F16\n\nDINOv3 ViT-7B\u002F16 is trained on a private dataset. The training involves 3 stages:\n- Pretraining\n- Gram anchoring\n- High resolution adaptation\n\n#### Pretraining\n\nLaunch DINOV3 ViT-7B\u002F16 pretraining on 32 nodes (256 GPUs) in a SLURM cluster environment with submitit.\n\n```shell\nPYTHONPATH=${PWD} python -m dinov3.run.submit dinov3\u002Ftrain\u002Ftrain.py \\\n  --nodes 32 \\\n  --config-file dinov3\u002Fconfigs\u002Ftrain\u002Fdinov3_vit7b16_pretrain.yaml \\\n  --output-dir \u003CPATH\u002FTO\u002FOUTPUT\u002FDIR> \\\n  train.dataset_path=\u003CDATASET>:root=\u003CPATH\u002FTO\u002FDATASET>:extra=\u003CPATH\u002FTO\u002FDATASET>\n```\n\n#### Gram anchoring\n\n```shell\nPYTHONPATH=${PWD} python -m dinov3.run.submit dinov3\u002Ftrain\u002Ftrain.py \\\n  --nodes 32 \\\n  --config-file dinov3\u002Fconfigs\u002Ftrain\u002Fdinov3_vit7b16_gram_anchor.yaml \\\n  --output-dir \u003CPATH\u002FTO\u002FOUTPUT\u002FDIR> \\\n  train.dataset_path=\u003CDATASET>:root=\u003CPATH\u002FTO\u002FDATASET>:extra=\u003CPATH\u002FTO\u002FDATASET> \\\n  gram.ckpt=\u003CPATH\u002FTO\u002FGRAM_TEACHER_FROM_PREVIOUS_STEP>\n```\n\n#### High-resolution adaptation\n\n\n```shell\nPYTHONPATH=${PWD} python -m dinov3.run.submit dinov3\u002Ftrain\u002Ftrain.py \\\n  --nodes 32 \\\n  --config-file dinov3\u002Fconfigs\u002Ftrain\u002Fdinov3_vit7b16_high_res_adapt.yaml \\\n  --output-dir \u003CPATH\u002FTO\u002FOUTPUT\u002FDIR> \\\n  train.dataset_path=\u003CDATASET>:root=\u003CPATH\u002FTO\u002FDATASET>:extra=\u003CPATH\u002FTO\u002FDATASET> \\\n  gram.ckpt=\u003CPATH\u002FTO\u002FTEACHER_FROM_GRAM> \\\n  student.resume_from_teacher_chkpt=\u003CPATH\u002FTO\u002FTEACHER_FROM_GRAM>\n```\n\n## Multi-distillation\n\n### Test setup:\n\n```shell\nPYTHONPATH=${PWD} python -m dinov3.run.submit dinov3\u002Ftrain\u002Ftrain.py \\\n  --nodes 1 \\\n  --config-file dinov3\u002Fconfigs\u002Ftrain\u002Fmulti_distillation_test.yaml \\\n  --output-dir \u003CPATH\u002FTO\u002FOUTPUT\u002FDIR> \\\n  --multi-distillation \\\n  train.dataset_path=\u003CDATASET>:root=\u003CPATH\u002FTO\u002FDATASET>:extra=\u003CPATH\u002FTO\u002FDATASET>\n```\n\n## Evaluation\n\nThe training code regularly saves the teacher weights. In order to evaluate the model, run the following evaluation on a single node:\n\n\n### Logistic regression classification on ImageNet-1k\n\n```shell\nPYTHONPATH=${PWD} python -m dinov3.run.submit dinov3\u002Feval\u002Flog_regression.py \\\n  model.config_file=\u003CPATH\u002FTO\u002FOUTPUT\u002FDIR>\u002Fconfig.yaml \\\n  model.pretrained_weights=\u003CPATH\u002FTO\u002FOUTPUT\u002FDIR>\u002Fteacher_checkpoint.pth \\\n  output_dir=\u003CPATH\u002FTO\u002FOUTPUT\u002FDIR> \\\n  train.dataset=ImageNet:split=TRAIN:root=\u003CPATH\u002FTO\u002FDATASET>:extra=\u003CPATH\u002FTO\u002FDATASET> \\\n  eval.test_dataset=ImageNet:split=VAL:root=\u003CPATH\u002FTO\u002FDATASET>:extra=\u003CPATH\u002FTO\u002FDATASET>\n```\n\n### k-NN classification on ImageNet-1k\n\n```shell\nPYTHONPATH=${PWD} python -m dinov3.run.submit dinov3\u002Feval\u002Fknn.py \\\n  model.config_file=\u003CPATH\u002FTO\u002FOUTPUT\u002FDIR>\u002Fconfig.yaml \\\n  model.pretrained_weights=\u003CPATH\u002FTO\u002FOUTPUT\u002FDIR>\u002Fteacher_checkpoint.pth \\\n  output_dir=\u003CPATH\u002FTO\u002FOUTPUT\u002FDIR> \\\n  train.dataset=ImageNet:split=TRAIN:root=\u003CPATH\u002FTO\u002FDATASET>:extra=\u003CPATH\u002FTO\u002FDATASET> \\\n  eval.test_dataset=ImageNet:split=VAL:root=\u003CPATH\u002FTO\u002FDATASET>:extra=\u003CPATH\u002FTO\u002FDATASET>\n```\n\n### Linear classification with data augmentation on ImageNet-1k\n\n```shell\nPYTHONPATH=${PWD} python -m dinov3.run.submit dinov3\u002Feval\u002Flinear.py \\\n  model.config_file=\u003CPATH\u002FTO\u002FOUTPUT\u002FDIR>\u002Fconfig.yaml \\\n  model.pretrained_weights=\u003CPATH\u002FTO\u002FOUTPUT\u002FDIR>\u002Fteacher_checkpoint.pth \\\n  output_dir=\u003CPATH\u002FTO\u002FOUTPUT\u002FDIR> \\\n  train.dataset=ImageNet:split=TRAIN:root=\u003CPATH\u002FTO\u002FDATASET>:extra=\u003CPATH\u002FTO\u002FDATASET> \\\n  train.val_dataset=ImageNet:split=VAL:root=\u003CPATH\u002FTO\u002FDATASET>:extra=\u003CPATH\u002FTO\u002FDATASET>\n```\n\n### Linear segmentation with data augmentation on ADE20K\n\n```shell\nPYTHONPATH=. python -m dinov3.run.submit dinov3\u002Feval\u002Fsegmentation\u002Frun.py \\\nmodel.dino_hub=dinov3_vit7b16 \\\nconfig=dinov3\u002Feval\u002Fsegmentation\u002Fconfigs\u002Fconfig-ade20k-linear-training.yaml \\\ndatasets.root=\u003CPATH\u002FTO\u002FDATASET> \\\n--output-dir \u003CPATH\u002FTO\u002FOUTPUT\u002FDIR>\n```\n\nAfter the job completes, you will find in the output path directory you specified\n- `segmentation_config.yaml` that contains the config you trained the model with;\n- `model_final.pth`, the final linear head checkpoint at the end of training; and\n- `results-semantic-segmentation.csv` with the final metrics.\n\n\n#### Linear depth estimation on NYUv2 Depth\n```shell\nPYTHONPATH=. python -m dinov3.run.submit dinov3\u002Feval\u002Fdepth\u002Frun.py \\\n    model.dino_hub=dinov3_vit7b16 \\\n    config=dinov3\u002Feval\u002Fdepth\u002Fconfigs\u002Fconfig-nyu.yaml \\\n    datasets.root=\u003CPATH\u002FTO\u002FDATASET> \\\n    --output-dir \u003CPATH\u002FTO\u002FOUTPUT\u002FDIR>\n```\n\nAfter the job completes, you will find in the output path directory you specified\n- `depth_config.yaml` that contains the config you trained the model with;\n- `model_final.pth`, the final linear head checkpoint at the end of training; and\n- `results-depth.csv` with the final metrics.\n\n### Text alignment on DINOv3 using dino.txt\n\nText alignment can be done following the method from `dino.txt` aka [DINOv2 Meets Text](https:\u002F\u002Farxiv.org\u002Fabs\u002F2412.16334).\n\n```shell\nPYTHONPATH=${PWD} python -m dinov3.run.submit dinov3\u002Feval\u002Ftext\u002Ftrain_dinotxt.py \\\n   --nodes 4 \\\n  # An example config for text alignment is here: dinov3\u002Feval\u002Ftext\u002Fconfigs\u002Fdinov3_vitl_text.yaml \\\n  trainer_config_file=\"\u003CPATH\u002FTO\u002FDINOv3\u002FTEXT\u002FCONFIG>\" \\\n  output-dir=\u003CPATH\u002FTO\u002FOUTPUT\u002FDIR>\n```\nLaunching the above trains text alignment on 4 nodes with 8 gpus each (32 gpus in total).\nPlease note that the text alignment model in the DINOv3 paper was trained on a private dataset and here we have given an example config in ```dinov3\u002Feval\u002Ftext\u002Fconfigs\u002Fdinov3_vitl_text.yaml``` using ```CocoCaptions``` dataset for illustration purposes.\nPlease adapt the provided ```CocoCaptions``` dataset class, the dataset can be found [here](https:\u002F\u002Fwww.kaggle.com\u002Fdatasets\u002Fnikhil7280\u002Fcoco-image-caption)\n\n\n## Canopy Height Maps v2 (CHMv2)\n\nJohn Brandt, Seungeun Yi, Jamie Tolan, Xinyuan Li, Peter Potapov, \u003Cbr\u002F>\nJessica Ertel, Justine Spore, Huy V. Vo, Michaël Ramamonjisoa, Patrick Labatut, \u003Cbr\u002F>\nPiotr Bojanowski, Camille Couprie\n\n[ :scroll: [`Paper`](https:\u002F\u002Farxiv.org\u002Fabs\u002F2603.06382)] [ :newspaper: [`Blog`](http:\u002F\u002Fai.meta.com\u002Fblog\u002Fworld-resources-institute-dino-canopy-height-maps-v2)]\n\n### CHMv2 model loading (via PyTorch [Hub](https:\u002F\u002Fdocs.pytorch.org\u002Fdocs\u002Fstable\u002Fhub.html))\n\n:information_source: Please follow the link provided below to get access to the CHMv2 model weights: once accepted, an e-mail will be sent with the URL pointing to the available model weights. The URL can then be used to either:\n- download the model weights to a local filesystem and point `torch.hub.load()` to these local weights via the `weights` parameters, or\n- directly invoke `torch.hub.load()` to download and load a backbone from its URL.\n\nCHMv2 uses the DINOv3 ViT-L\u002F16 satellite as the backbone, available after requesting access [here](https:\u002F\u002Fai.meta.com\u002Fresources\u002Fmodels-and-libraries\u002Fdinov3-downloads\u002F).\n\n:warning: Please use `wget` instead of a web browser to download the weights.\n\nDownload link: https:\u002F\u002Fai.meta.com\u002Fresources\u002Fmodels-and-libraries\u002Fchmv2-downloads\u002F\n\n```python\nimport torch\nfrom dinov3.hub.backbones import Weights\n\nREPO_DIR = \u003CPATH\u002FTO\u002FA\u002FLOCAL\u002FDIRECTORY\u002FWHERE\u002FTHE\u002FDINOv3\u002FREPO\u002FWAS\u002FCLONED>\n\nchmv2_model = torch.hub.load(\n    REPO_DIR,\n    'dinov3_vitl16_chmv2',\n    source=\"local\",\n    weights=\"\u003CCHMV2_MODEL\u002FCHECKPOINT\u002FURL\u002FOR\u002FPATH>\",\n    backbone_weights=Weights.SAT493M,  # or \u003CDINOV3_VITL_SAT\u002FCHECKPOINT\u002FURL\u002FOR\u002FPATH>\n)\n```\n\nRefer to this [notebook](notebooks\u002Fchmv2_inference.ipynb) for an example of how to use the DINOv3 + CHMv2 model.\n\nThis [notebook](notebooks\u002Fchmv2_dataset_exploration.ipynb) can be used to download inference data from the existing global dataset stored on aws.\n\n### CHMv2 model loading (via Hugging Face [Transformers](https:\u002F\u002Fhuggingface.co\u002Fdocs\u002Ftransformers\u002F))\n\nThe CHMv2 model is also available on [Hugging Face Hub](https:\u002F\u002Fhuggingface.co\u002Ffacebook\u002Fdinov3-vitl16-chmv2-dpt-head) and supported via the Hugging Face [Transformers](https:\u002F\u002Fhuggingface.co\u002Fdocs\u002Ftransformers\u002Findex) library. Please refer to the corresponding documentation for usage, but below is a short example that demonstrates how to obtain canopy height predictions on a sample image.\n\n```python\nfrom PIL import Image\nimport torch\n\nfrom transformers import AutoModelForDepthEstimation, AutoImageProcessor\n\nprocessor = AutoImageProcessor.from_pretrained(\"facebook\u002Fdinov3-vitl16-chmv2-dpt-head\")\nmodel = AutoModelForDepthEstimation.from_pretrained(\"facebook\u002Fdinov3-vitl16-chmv2-dpt-head\")\n\nimage = Image.open(\"image.tif\")\ninputs = processor(images=image, return_tensors=\"pt\")\n\nwith torch.no_grad():\n    outputs = model(**inputs)\n\ndepth = processor.post_process_depth_estimation(\n    outputs, target_sizes=[(image.height, image.width)]\n)[0][\"predicted_depth\"]\n```\n\n## License\n\nDINOv3 code and model weights are released under the DINOv3 License. See [LICENSE.md](LICENSE.md) for additional details.\n\n## Contributing\n\nSee [contributing](CONTRIBUTING.md) and the [code of conduct](CODE_OF_CONDUCT.md).\n\n## Citing DINOv3\n\nIf you find this repository useful, please consider giving a star :star: and citation :t-rex::\n\n```\n@misc{simeoni2025dinov3,\n  title={{DINOv3}},\n  author={Sim{\\'e}oni, Oriane and Vo, Huy V. and Seitzer, Maximilian and Baldassarre, Federico and Oquab, Maxime and Jose, Cijo and Khalidov, Vasil and Szafraniec, Marc and Yi, Seungeun and Ramamonjisoa, Micha{\\\"e}l and Massa, Francisco and Haziza, Daniel and Wehrstedt, Luca and Wang, Jianyuan and Darcet, Timoth{\\'e}e and Moutakanni, Th{\\'e}o and Sentana, Leonel and Roberts, Claire and Vedaldi, Andrea and Tolan, Jamie and Brandt, John and Couprie, Camille and Mairal, Julien and J{\\'e}gou, Herv{\\'e} and Labatut, Patrick and Bojanowski, Piotr},\n  year={2025},\n  eprint={2508.10104},\n  archivePrefix={arXiv},\n  primaryClass={cs.CV},\n  url={https:\u002F\u002Farxiv.org\u002Fabs\u002F2508.10104},\n}\n```\n","DINOv3 是一个基于 PyTorch 的自监督视觉模型实现。该项目提供了 DINOv3 模型的参考实现及其预训练权重，支持多种下游任务如语义分割、单目深度估计和树冠高度图生成等。技术上，DINOv3 利用自监督学习方法，通过大规模未标注数据进行预训练，从而在多个视觉任务中表现出色。该模型已被集成到 Hugging Face 的 Transformers 库中，并且支持通过 timm 库进行使用。适用于需要高精度视觉理解的应用场景，例如遥感图像分析、自动驾驶中的环境感知以及医学影像处理等领域。",2,"2026-06-11 03:48:27","high_star"]