CoolFace
Modelpublic

zeromodels/dinov3-convnext-tiny-pretrain-lvd1689m

sourceHugging Faceotherupdated 28d agoView on Hugging Face
0likes31downloads
Model Card

*See [our collection](https://huggingface.co/collections/zeromodels/dino-v1-v2-v3-6a8eaf5a43e1a5079d6cc817) for all versions of DINOv3.*

Run DINOv3 with Keras 3: JAX, PyTorch, or TensorFlow

![GitHub](https://github.com/IMvision12/ZeroModels) ![Docs](https://imvision12.github.io/ZeroModels/dinov3/) ![Collection](https://huggingface.co/collections/zeromodels/dino-v1-v2-v3-6a8eaf5a43e1a5079d6cc817)

zeromodels/dinov3-convnext-tiny-pretrain-lvd1689m

Paper: DINOv3: Self-Supervised Visual Representation Learning at Scale (arXiv:2508.10104) · HF Papers

DINOv3 continues self-supervised visual pretraining at larger scale, with ViT and ConvNeXt backbones. These checkpoints return features for downstream heads (ViT variants also expose register tokens).

For more details on the model, please go to the upstream model card.

Pure-Keras 3 conversion of `facebook/dinov3-convnext-tiny-pretrain-lvd1689m` for zeromodels. One implementation runs unmodified on TensorFlow / Torch / JAX.

This is a self-supervised backbone (DinoV3ConvNeXtModel), not a task head.

✨ Quick start

python
import os
os.environ["KERAS_BACKEND"] = "torch"  # or "jax" / "tensorflow"

from zeromodels.models.dino_v3 import DinoV3ConvNeXtModel, DinoV3ImageProcessor

# The processor resizes + ImageNet-normalizes, so build the model with
# include_normalization=False (it would otherwise normalize a second time).
model = DinoV3ConvNeXtModel.from_weights(
    "zeromodels/dinov3-convnext-tiny-pretrain-lvd1689m", include_normalization=False
)
processor = DinoV3ImageProcessor.from_weights("zeromodels/dinov3-convnext-tiny-pretrain-lvd1689m")

pixel_values = processor("your_image.jpg")["pixel_values"]
features = model(pixel_values, training=False)
print(pixel_values.shape, features.shape)

Load any DINOv3 variant the same way with from_weights("zeromodels/<variant>"):

VariantHubBackbone
dinov3-vits16-pretrain-lvd1689m`zeromodels/dinov3-vits16-pretrain-lvd1689m`ViT-S/16
dinov3-vitb16-pretrain-lvd1689m`zeromodels/dinov3-vitb16-pretrain-lvd1689m`ViT-B/16
dinov3-vitl16-pretrain-lvd1689m`zeromodels/dinov3-vitl16-pretrain-lvd1689m`ViT-L/16
dinov3-convnext-tiny-pretrain-lvd1689m`zeromodels/dinov3-convnext-tiny-pretrain-lvd1689m`ConvNeXt-T
dinov3-convnext-small-pretrain-lvd1689m`zeromodels/dinov3-convnext-small-pretrain-lvd1689m`ConvNeXt-S
dinov3-convnext-base-pretrain-lvd1689m`zeromodels/dinov3-convnext-base-pretrain-lvd1689m`ConvNeXt-B
dinov3-convnext-large-pretrain-lvd1689m`zeromodels/dinov3-convnext-large-pretrain-lvd1689m`ConvNeXt-L

Tips

  • Set KERAS_BACKEND before importing Keras / zeromodels.
  • The processor normalizes; pair it with include_normalization=False. To skip it, feed raw [0, 255] pixels and keep the default include_normalization=True.
  • Upstream facebook/dinov3-* weights are gated under the DINOv3 license.
  • See DINOv3 docs and Loading Weights.
  • Community / upstream weights: DinoV3ConvNeXtModel.from_weights("hf:facebook/dinov3-convnext-tiny-pretrain-lvd1689m").

Special Thanks

A huge thank you to the Meta DINOv3 authors for creating and releasing these models.

License: see the DINOv3 license (Hub tag: other / dinov3-license).