Training code and model release for DALE-CT (Depth-Aware Latent-Euclidean
Computed Tomography) — a family of 2D slice-based Vision Transformers trained
entirely from scratch on chest CT with the heuristics-free
LeJEPA objective and depth-aware slab
sampling: self-supervised views are drawn from across a physical $z$-axis
slab rather than a single slice, so the frozen representations form an
anatomical world model — they linearly decode volumetric slice position
($R^2 approx 0.97$), recover slice ordering without labels, and localize
organs and findings, despite no 3D or positional supervision.
Paper: DALE-CT: Depth-Aware 2D Slice Encoders Learn an Anatomical World Model of Chest CT
· Benchmark: chest-ct-foundation-model-benchmark —
the single-protocol evaluation harness, patient-disjoint splits, and full
result tables for every model in the paper
All weights are on the Hugging Face Hub (CC-BY-NC-SA-4.0); the DALE-CT
variants load in one line via timm (Finetuned DINOv2 is a transformers
model — see its card):
import timm
model = timm.create_model("hf-hub:Kentucky-Open-Science/DALE-CT-0-L", pretrained=True)
| 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 |
The earlier DALE-CT-1S
release (patch-14, [CLS]-only anatomical supervision) remains available as
the backbone used by Ker-VLJEPA-3B;
DALE-CT-1S-v2 is the configuration benchmarked in the paper.
All numbers are our own head-to-head measurements: every model in the paper
(including public 3D baselines COLIPRI-CRM, Merlin, CT-FM, CT-CLIP) is probed
under one linear-probing MIL protocol on shared splits with bootstrap
confidence intervals. The protocol, splits, and result tables are maintained
in the chest-ct-foundation-model-benchmark
repository. Each model card documents the exact Hounsfield-Unit
preprocessing its backbone expects — DALE-CT-0-L uses different
normalization statistics than the CT-RATE-trained variants.
| Path | Contents |
|---|---|
train_lejepa.py |
Pre-training entry point (all DALE-CT variants) |
lejepa_core/ |
LeJEPA architecture: SSL meta-arch, trainer, SIGReg |
models/ |
ViT backbone, projector, MIL pooling heads |
supervised_heads/ |
Dense auxiliary supervision (TotalSegmentator / ReXGroundingCT soft labels) |
dataloaders/ |
CT-RATE WebDataset, multi-scale multi-crop, multi-source zarr, embedding loaders |
configs/ |
OmegaConf YAML for every pretraining / probing / evaluation run |
scripts/run_error_bars.py |
Head-to-head benchmark: probe selection, seed variance, bootstrap CIs |
scripts/generate_benchmark_embeddings.py |
Embedding extraction for the public 3D baselines |
scripts/run_model_comparison_probes.py |
Dense 2D probing (auxiliary-task tables) |
scripts/exp_c_zposition.py, scripts/exp_c_worldmodel_probes.py |
Anatomical world-model probes ($z$-regression, slice ordering, organ identity) |
train_gridsearch.py, eval_rad.py |
Linear-probe grid search; RAD-ChestCT transfer |
train_e2e_lora.py |
LoRA fine-tuning |
The evaluation harness above is kept as released with the paper; the
maintained, self-contained version — including the protocol documentation —
is the chest-ct-foundation-model-benchmark
repository.
Dataset preparation (CT-RATE → WebDataset shards, TotalSegmentator masks)
lives in a separate preprocessing pipeline that is not yet public.
Paths in configs refer to our cluster layout; point them at your own data
roots. Raw datasets and checkpoints are never stored in this repository.
@article{damron2026dalect,
title = {DALE-CT: Depth-Aware 2D Slice Encoders Learn an Anatomical World Model of Chest CT},
author = {Damron, Evan W. and Gokmen, Mahmut S. and Klusty, Mitchell A. and
Leach, Caroline N. and Collier, Emily B. and Bumgardner, V. K. Cody},
journal = {arXiv preprint arXiv:2606.07775},
year = {2026}
}
Code is released under Apache-2.0; model weights on the Hugging
Face Hub are CC-BY-NC-SA-4.0.
Imported from gh:Kentucky-Open-Science/DALE-CT. Source last updated 2026-08-26. Synced 2026-08-26.
Source code on GitHub.
This repository contains the training and evaluation pipeline for LeJEPA (Latent-Euclidean Joint-Embedding Predictive Architecture) vision transformers pre-trained on the CT-RATE dataset. Three model variants are provided: a pure self-supervised baseline (LeJEPA-0), a single-source auxiliary variant with TotalSegmentator supervision (LeJEPA-1S), and a dual-source variant with both TotalSegmentator and ReXGroundingCT supervision (LeJEPA-2S).
---
``
.
├── train_lejepa.py # LeJEPA pre-training entry point
├── train_gridsearch.py # Linear probing grid search
├── train_e2e_lora.py # LoRA fine-tuning
├── eval_rad.py # RAD-ChestCT transfer evaluation
├── test_ct_dataloader.py # Dataloader debugging
├── requirements.txt
├── Dockerfile
│
├── lejepa_core/ # Core LeJEPA architecture
│ ├── lejepa_ssl_arch.py # SSLMetaArch training module
│ ├── main_lejepa_trainer.py # Distributed training orchestration
│ └── SIGReg.py # Sketched Isotropic Gaussian Regularization
│
├── models/ # Model definitions
│ ├── vision_transformer.py # ViT backbone builders
│ ├── lejepa_projector.py # LeJEPA projection head
│ ├── colipri_pooling.py # 5 pooling schemes for linear probing
│ └── e2e_colipri.py # End-to-end model wrapper
│
├── data/ # Data processing
│ ├── guided_data_augmentation_CT_RATE.py # Multi-crop augmentation
│ └── collate.py # Batch collation
│
├── dataloaders/ # Dataset loaders
│ ├── datasetloader_web_ctrate.py # WebDataset loader
│ ├── datasetloader_ctrate_multiscale.py # Multi-scale .npy loader
│ ├── dataloader_embeddings.py # Pre-computed embedding loader
│ ├── dataloader_linear.py # Linear probing loader
│ └── dataloader_rad_embeddings.py # RAD-ChestCT loader
│
├── supervised_heads/ # Auxiliary supervision heads
│ ├── organ_supervision.py # TotalSegmentator classification
│ ├── soft_label_supervision.py
│ └── example_supervised_head.py
│
├── scripts/ # Evaluation scripts
│ ├── ctrate_generate_embeddings.py
│ ├── knn.py
│ ├── supervised_gap.py
│ ├── supervised_3D.py
│ ├── e2e_inference.py
│ ├── evaluate_gap.py
│ └── precompute_aggregations.py
│
├── utils/ # Shared utilities
│ ├── config.py # OmegaConf configuration
│ ├── dino_utils.py # Model init, LoRA, checkpointing
│ ├── lejepa_schedule...