Instructions to use AbstractPhil/clip-vitb-mini-distilled with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- Transformers
How to use AbstractPhil/clip-vitb-mini-distilled with Transformers:
# Use a pipeline as a high-level helper from transformers import pipeline pipe = pipeline("image-feature-extraction", model="AbstractPhil/clip-vitb-mini-distilled", trust_remote_code=True)# Load model directly from transformers import AutoModel model = AutoModel.from_pretrained("AbstractPhil/clip-vitb-mini-distilled", trust_remote_code=True, device_map="auto") - Notebooks
- Google Colab
- Kaggle
clip-vitb-mini-distilled
An 8.66M-parameter ViT image encoder (10.0% of a CLIP-B/16 image tower) producing 512-d embeddings compatible with the CLIP-B/16 LAION-2B text tower. The primary checkpoint was distilled on CC12M (10,968,539 images) against the generalized-Procrustes consensus of five CLIP teachers β never against the deployment teacher β and carries a frozen 512Γ512 rotation that maps its outputs into the deployment frame, where it outperforms the student distilled directly against that teacher on every task gauge, both seeds (full tables below).
Quick start (AutoModel)
import torch
from transformers import AutoModel, AutoImageProcessor
repo = "AbstractPhil/clip-vitb-mini-distilled"
model = AutoModel.from_pretrained(repo, trust_remote_code=True).eval()
proc = AutoImageProcessor.from_pretrained(repo)
px = proc(images=[img], return_tensors="pt")["pixel_values"]
emb = model.get_image_features(px) # (1, 512), L2-normalized,
# deployment (LAION-B/16) frame
The rotation is applied by default (config.apply_rotation); pass
apply_rotation=False to get_image_features for the raw consensus-frame
embedding. Weights are safetensors; the modeling code is in this repo
(modeling_clip_mini.py, configuration_clip_mini.py).
Evaluation-path note: all published numbers were measured with the
tensor-bicubic evaluation pipeline (interpolate to 160px, CLIP norm β the
path implemented in loader.py and train/dist_bed.py). On CIFAR-scale
(32px) inputs the shipped CLIPImageProcessor path yields 0.5545 vs
0.5708 zero-shot for the same weights, a resize-path difference that
matters only for very small source images; verify against ledger numbers
with the tensor path.
Repository inventory
| path | content |
|---|---|
model.safetensors, config.json, modeling_clip_mini.py, configuration_clip_mini.py, preprocessor_config.json |
the champion (consensus composite, seed 1) in AutoModel format, rotation baked in as a buffer |
cc12m/*_t88000.pt |
all 18 CC12M finals β every arm (InfoNCE, feature-MSE, SigLIP-pairwise, affinity-KL, consensus pure-MSE, consensus composite, gradient-operator/spread/verbatim battery variants), both seeds |
cc12m/rotation_s{0,1}.pt |
the frozen deployment rotations (fp32, 512Γ512, fit metadata included) |
cc12m/mid/*_mid.pt |
rolling mid-training snapshots, 15 of the 18 arm-seeds (last 20k-step multiple) β the trajectory record behind the set-point and descent analyses. The three absent ones (feature-MSE s0, InfoNCE s0, affinity-KL s0) trained before mid-checkpointing was added; their finals are complete. |
coco/*_t8000.pt |
all 24 generation-one finals (COCO budget: the six matrix arms + the six battery arms, both seeds) |
student_infonce_s0.pt |
the original generation-one release, kept at its historical path |
loader.py |
dependency-free loader for the raw checkpoints (rotation-aware) |
train/ |
complete training code: bed, objectives, teacher loading/conversion, CC12M data path, consensus-target builder, reproduction guide (train/TRAINING.md) |
ledgers/*.jsonl |
per-run ledgers, both generations (COCO rows steps=8000, CC12M rows steps=88000; eval_only rows carry CIFAR-100) |
ledgers/frame_check_pod_s{0,1}.json |
rotation forensics, all arms, both seeds |
ledgers/rotated_eval_*.json |
full rotated evaluations (champion + pure-MSE consensus) |
article_cc12m_distillation.md |
the campaign report |
Architecture
| field | value |
|---|---|
| type | ViT, CLS-token readout, linear projection head |
| hidden size / depth / heads | 240 / 12 / 4 |
| patch / input | 16 / 160Γ160 |
| projection | 512-d (deployment teacher's projection space) |
| parameters | 8,664,752 total (8,541,360 trunk + 123,392 head) |
| rotation buffer | 512Γ512 orthogonal, frozen; fitted post-hoc on 2,500 COCO-val pairs (fp64 orthogonal Procrustes), maps consensus frame β LAION-B/16 frame |
| preprocessing | shorter edge β 182 (bicubic), center-crop 160, CLIP mean/std |
Results
Headline β champion (rotated) vs the directly-distilled student, CC12M, seed 0 / seed 1:
| gauge | consensus composite + rotation | InfoNCE vs deployment teacher | teacher | random floor |
|---|---|---|---|---|
| zero-shot CIFAR-10 | .5412 / .5708 | .5208 / .4979 | .946 | .0996 |
| zero-shot CIFAR-100 | .2210 / .2487 | .1958 / .2092 | .759 | .0068 |
| COCO R@1 (iβt) | .1322 / .1360 | .1252 / .1178 | .417 | .000 |
| COCO R@5 | .3140 / .3300 | .2968 / .2910 | .669 | .001 |
Champion capability: 44.7% / 48.1% of the teacher's zero-shot mean (CIFAR-10+100) at 10% of its image-tower parameters. Scaling arc across data generations: 21.2% (118k images) β 42.0/41.5% (11M, direct InfoNCE) β 44.7/48.1% (11M, consensus + rotation).
Full CC12M matrix (nine objectives Γ two seeds, 88k steps β 2.05
epochs; agree = cosine to deployment teacher unless (own) = the arm's
own target):
| objective | zs C10 | zs C100 | R@1 | R@5 | agree | eff. rank |
|---|---|---|---|---|---|---|
| InfoNCE (deployment teacher) | .5208/.4979 | .1958/.2092 | .1252/.1178 | .2968/.2910 | .543/.542 | 188/188 |
| feature MSE (mimicry) | .4429/.4826 | .1568/.1656 | .0760/.0716 | .2074/.1996 | .735/.738 | 154/153 |
| SigLIP-pairwise (768-d, own tower) | .4534/.4573 | .1625/.1702 | .0904/.0914 | .2278/.2278 | .742/.743 (own) | 155/154 |
| consensus composite (NCE+MSE) | .3271/.3928 | .1213/.1254 | .0344/.0374 | .1180/.1178 | .741/.742 (own) | 172/173 |
| + gradient operator | .3398/.3315 | .1181/.1335 | .0374/.0352 | .1160/.1154 | .742/.742 (own) | 173/172 |
| + spread force (1e-3) | .2819/.3370 | .1144/.1172 | .0386/.0328 | .1230/.1118 | .743/.741 (own) | 173/174 |
| verbatim ancestor recipe | .3188/.3616 | .1269/.1377 | .0554/.0506 | .1582/.1512 | .531/.530 | 185/185 |
| consensus pure-MSE | .2738/.2681 | .0575/.0567 | .0114/.0100 | .0410/.0458 | .814/.810 (own) | 141/142 |
| affinity (similarity-KL) | .1076/.1035 | .0117/.0105 | .0000/.0008 | .0012/.0022 | β.011/β.017 | 103/89 |
Rotation forensics (agreeβdeployment pre β post; zs C10 pre β post; both seeds):
| arm | agree | zs |
|---|---|---|
| consensus composite | .304β.732 / .302β.731 | .327β.541 / .393β.571 |
| consensus pure-MSE | .297β.765 / .293β.763 | .274β.434 / .268β.394 |
| verbatim recipe | .258β.644 / .258β.642 | .319β.487 / .362β.532 |
| + gradient operator | .302β.731 / .304β.730 | .340β.517 / .332β.568 |
| + spread force | .304β.731 / .304β.728 | .282β.485 / .337β.489 |
| affinity | β.011β.304 / β.017β.301 | .108β.138 / .104β.132 |
| InfoNCE (control) | .543β.633 / .542β.631 | .521β.473 / .498β.503 |
Note the pure-MSE consensus row: rotated agreement .765/.763 exceeds direct mimicry's in-frame .735/.738 β the consensus target carries the deployment teacher's geometry better than direct distillation preserves it β but without a contrastive term it cannot retrieve (rotated R@1 .046/.051). The composite's two terms are both load-bearing.
Generation one (COCO, 118k images, 8k steps), for the scale comparison: mimicry .2693/.2657 zs vs InfoNCE .2668/.2308 (mimicry won coarse zero-shot at small scale; the verdict reversed at 11M); InfoNCE retrieval .0580/.0544 vs .0248/.0262; consensus raw .1543/.1609 β its loss to single-teacher distillation was preregistered and refuted 2/2 at this scale before reversing at CC12M with the rotation. Full generation-one ledgers included.
Training
Everything needed to reproduce any checkpoint is in train/
(train/TRAINING.md is the step-by-step guide). Summary:
| item | value |
|---|---|
| data (gen 2) | CC12M, 10,968,539 images via pixparse/cc12m-wds; read by tar-offset index, no extraction |
| targets | precomputed teacher features, bulk-cc12m-features (fp16, unnormalized; L2-normalized per batch on GPU) |
| champion objective | symmetric InfoNCE (t=0.07) + per-sample MSE, against the 5-teacher GPA consensus mean |
| consensus target | generalized Procrustes mean of clip_b16_laion2b, clip_b32_openai, clip_b32_laion2b, clip_b32_datacomp, clip_b16_openai (5 iterations, fp64 alignment SVD on a fixed 10k subsample; converged mean alignment β 0.91) |
| optimizer | Adam 3e-4, weight decay 0, fp32, TF32 off (exception: the verbatim replication arm uses its source recipe β AdamW 0.01, warmup+cosine, clip 1.0) |
| schedule | 88,000 steps, batch 256 (β 2.05 epochs); gen-1: 8,000 steps on COCO (β 17.3 epochs) |
| seeds | student and data order CRC-derived from arm name + seed index; two seeds per arm |
| rotation | fitted after training: fp64 orthogonal Procrustes, studentβteacher, on the fixed 2,500-pair COCO-val split; frozen thereafter |
| hardware | one 24 GB GPU per run (peak 4.83 GB); ~8 h per CC12M run on an A40, CPU-decode bound |
Evaluation protocol
CIFAR-10/100 zero-shot via the LAION-B/16 text tower ("a photo of a
{class}"), images tensor-upscaled (bicubic) to the student's 160px input;
teacher judged at its native 224px in the same harness; floor (random
init) and ceiling (teacher) bracket every table. COCO retrieval:
imageβtext R@1/R@5 over the 5,000 val images against first-caption text
embeddings, paired protocol. Agreement: mean cosine to the arm's target
embeddings on COCO val. Effective rank and a spread statistic (CV of
Cayley-Menger 4-simplex volumes on a fixed 16-d projection) are read-only
health instruments. Every evaluation is deterministic: --eval-only
re-runs reproduce ledger rows to four decimal places, and this release
was gated by fresh tokenless downloads reproducing the headline numbers
exactly (raw-loader path and AutoModel path, bit-parity verified).
Limitations
Research model. 48% of teacher zero-shot at best; the preregistered 60% viability bar is unmet (the data-scaling curve is unbent β see the article). CIFAR absolute numbers are harness-scoped (32px upscale; see the evaluation-path note). Two seeds per objective; one batch size (256); one student size; one consensus family; one deployment frame. The rotation fit consumes 2,500 labeled pairs of the deployment frame.
Related
- Campaign report:
article_cc12m_distillation.md(in this repo) - Teacher banks: bulk-cc12m-features Β· bulk-coco-features
- Memory-bank line: geolip-vit-captionbank-coco
- Objective genealogy: loss-manifest
References
- Radford et al., CLIP β https://arxiv.org/abs/2103.00020
- van den Oord et al., InfoNCE β https://arxiv.org/abs/1807.03748
- Yang et al., CLIP-KD β https://arxiv.org/abs/2307.12732
- Wu et al., TinyCLIP β https://arxiv.org/abs/2309.12314
- Zhai et al., SigLIP β https://arxiv.org/abs/2303.15343
- Gower, Generalized Procrustes Analysis β https://doi.org/10.1007/BF02291478
- Changpinyo et al., Conceptual 12M β https://arxiv.org/abs/2102.08981
- Cherti et al., OpenCLIP scaling β https://arxiv.org/abs/2212.07143
- Downloads last month
- 396