Model reference · open weights

dinovol_v2_ps8_with_paris4_352500

Embeddings scrollprize Embeddings 1 build Open weights 13k dl/mo

dinovol_v2_ps8_with_paris4_352500 is an open-weight embedding model from scrollprize. dinovol_v2_ps8_with_paris4_352500 (BF16) weighs 5.0 GB; the smallest configuration that runs it is RTX 3060 12 GB.

For self-hosting, compare this build's requirements below with the GPU you plan to rent.

  • dinovol_v2_ps8_with_paris4_352500 is a 3D self-supervised representation model developed by scrollprize for feature extraction from volumetric micro-CT scans of carbonized Herculaneum scrolls.
  • The model utilizes a DINOv2/EVA ViT backbone with 215.9 million parameters, an embedding dimension of 864, and a patch size of 8.
  • It was trained on 11 open-data Herculaneum volumes and is released under the MIT license.

Summary of the scrollprize/dinovol_v2_ps8_with_paris4_352500 model card, 2026-10-01

What it is

Released byscrollprize
Released2026-06-04
VRAM5.0 GB for the weights

What it runs on

Memory and cards for dinovol_v2_ps8_with_paris4_352500 (BF16)

5.0 GBweights, file size
1.1 GBruntime overhead
CardRunsMemory
RTX 3060 12 GBfits11.6 GB
RTX 4060 Ti 16 GBfits15.4 GB
RTX 3090 24 GBfits23.4 GB
RTX 4090 24 GBfits23.4 GB
RTX 5090 32 GBfits31.0 GB
L40S 48 GBfits44.0 GB
A100 80 GBfits78.2 GB
H100 80 GBfits78.1 GB
RTX PRO 6000 Blackwell 96 GBfits93.8 GB
DGX Spark (GB10) 128 GB unifiedfits107 GB
H200 141 GBfits138 GB
B200 180 GBfits176 GB

From the model card

What scrollprize says about dinovol_v2_ps8_with_paris4_352500

Read the model card

A 3D, DINOv2/DINOv3-style self-supervised representation model trained on volumetric micro-CT scans of carbonized Herculaneum scrolls. This repository publishes the EMA teacher backbone from the paris4 training run at training step 352500.

Training code: dinovol. This is a representation/feature-extraction model — there is no task-specific head; you take its dense patch embeddings and use them downstream.

Model details

Backbone familyDINOv2/EVA ViT, 3D, with 3D RoPE (DINOv3-style)
model_typev2
Embedding dim864
Depth24 blocks
Attention heads16
MLPSwiGLU, mlp_ratio 8/3
Register tokens4
Patch size8 × 8 × 8
Global crop size (train)128 × 128 × 128
Input channels1 (grayscale CT)
Positional encodingRoPE mixed (base 100, normalize_coords=separate, rescale=2.0, shift=0.05, jitter=1.05); no absolute pos-emb
Backbone parameters215.9 M
Training step352500
W&B runmodel_v2__shift005_jitter105__r342500__paris4__20260416

Pretraining objective: DINO + iBOT + KoLeo, with late dense-feature refinement via Gram anchoring (DINOv3-style), trained with AMP.

Training data

Self-supervised on 11 open-data Herculaneum volumes (scale 0) from s3://vesuvius-challenge-open-data/:

PHerc0009B, PHerc0500P2, PHerc0814, PHerc1299, PHerc0343P, PHerc0332, PHerc0139, PHercMAN5, PHerc1451, PHercMANB, PHercParis4.

Files

FileSizeUse
dinovol_v2_ps8_paris4_step352500_teacher_backbone.pt~0.86 GBRecommended for inference. Slim file: {step, config, teacher backbone weights}. Loads directly with the repo's loader.
checkpoint_step_352500_paris4.pt~5.0 GBFull training checkpoint (student, EMA teacher, optimizer, scaler, loss buffers, Gram teacher, RNG state). Use to resume training or for full reproducibility.
config.json—The model config block, for quick inspection.

Both .pt files embed the full training config, so the architecture is rebuilt automatically — no separate config needed at load time.

Usage

Clone the training repo and use its loader (the config travels inside the weights):

import torch
from huggingface_hub import hf_hub_download
from dinovol_2.eval import embedding_utils as eu

path = hf_hub_download(
    "scrollprize/dinovol_v2_ps8_with_paris4_352500",
    "dinovol_v2_ps8_paris4_step352500_teacher_backbone.pt",
)

loaded = eu.load_backbone_from_checkpoint(path, device="cuda")
backbone = loaded.backbone.eval()

# dense patch embeddings for a 1-channel volume, dims multiples of patch_size (8)
vol = torch.randn(1, 1, 128, 128, 128, device="cuda")
with torch.no_grad():
    out = backbone.forward_features(vol, masks=None, view_kind="global")
patch_tokens = out["x_norm_patchtokens"]   # (B, num_patches, 864)

For a normalized, windowed embedding grid over a real OME-Zarr volume, use eu.compute_patch_embedding_grid(...), which applies the checkpoint's normalization scheme and tiles the volume. The repo also ships a napari inspector at dinovol_2/eval/napari_visualizer.py.

License

MIT. See LICENSE.

Caveats

  • Trained on single-channel Herculaneum micro-CT; behavior on other modalities is untested.
  • Pretraining only — no finetuning / segmentation head is included.

Quoted from the model card on Hugging Face. The full card is behind the Hugging Face link above.

How it works

How embedding models work

Your textsentence / documentEncodermaps meaningVectorlist of numbersAn embedding model turns text into a vector, so similar meanings sit close together, which is the basis of search and RAG.
© 2026 AxForge · EU-hosted AI infrastructure Pricing Docs Trust Privacy Terms