Views
No views yet
[CLS] token and the
patch tokens. The ReXGroundingCT abnormality head is held inert, so this model
isolates the contribution of anatomical supervision against
DALE-CT-2S.[CLS]-only
supervision), which remains available as the backbone used by Ker-VLJEPA-3B.1import timm
2model = timm.create_model("hf-hub:Kentucky-Open-Science/DALE-CT-1S-v2", pretrained=True)
3model.eval()| Model | CT-RATE Macro AUROC | RAD-ChestCT AUROC (frozen / retrained probe) | Role |
|---|---|---|---|
| DALE-CT-0-L ⭐ | 0.8156 | 0.6281 / 0.7572 | Recommended general-purpose backbone — best 2D external-transfer point estimates; supervision-free at ~287k-scan scale |
| DALE-CT-2S | 0.8247 | 0.6252 / 0.7389 | Best in-domain (CT-RATE) |
| DALE-CT-1S-v2 | 0.8098 | 0.6284 / 0.7334 | Anatomical (TotalSegmentator) dense supervision only |
| DALE-CT-0 | 0.8057 | 0.5946 / 0.7477 | Pure self-supervised, CT-RATE |
| Finetuned DINOv2 | 0.7953 | 0.6252 / 0.7550 | Continual-pretraining baseline — strongest dense (patch-level) features |
vit_large_patch14_dinov2 (via timm), randomly initialized and trained from scratch with patch_size=16, img_size=512, in_chans=1, dynamic_img_size=True.[CLS] and patch tokens. ReXGroundingCT is inert for this variant.[-997.0, 888.0], mapped to [0, 1], then z-score normalized (dataset mean -142.39, std 360.97 in HU space).bf16, 8×H100 GPUs; 66,667 iterations at global batch 384 (48/GPU), 6,667-step warmup, peak LR 3.0e-4 decaying to 3.0e-5 — budget-matched to DALE-CT-0/2S (25.6M images), so the 0 → 1S-v2 → 2S ladder is architecture-, patch-size-, and budget-controlled.L_LeJEPA + 0.1 · L_Aux, where L_Aux is BCE-with-logits over TotalSegmentator soft-coverage targets on [CLS] and patch tokens, averaged over global/local crops.1import torch, numpy as np, timm
2
3model = timm.create_model("hf-hub:Kentucky-Open-Science/DALE-CT-1S-v2", pretrained=True)
4model.eval()
5
6clip_min, clip_max, mean_hu, std_hu = -997.0, 888.0, -142.39, 360.97
7rng = clip_max - clip_min
8norm_mean, norm_std = (mean_hu - clip_min) / rng, std_hu / rng
9
10hu_slice = np.random.uniform(-1000, 1000, size=(512, 512)) # replace with real HU data
11x = torch.from_numpy(hu_slice).float().clamp(clip_min, clip_max)
12x = ((x - clip_min) / rng - norm_mean) / norm_std
13x = x[None, None] # (1, 1, H, W)
14
15with torch.no_grad():
16 cls_feature = model(x) # (1, 1024)
17 tokens = model.forward_features(x) # (1, 1 + N_patches, 1024)