--- license: cc-by-nc-4.0 library_name: pytorch base_model: timm/vit_large_patch16_dinov3.lvd1689m tags: - medical-imaging - age-estimation - biological-age - dinov3 - retinal-imaging - chest-x-ray - computed-tomography - mri extra_gated_fields: First Name: text Last Name: text Affiliation: text Job title: type: select options: - Student - Research Graduate - AI researcher - AI developer/engineer - Other geo: ip_location extra_gated_button_content: Submit --- # AG-RTM ageing models Retinal Age, Chest Age, Abdominal Age and Brain Age estimate chronological age from a colour fundus photograph, a chest radiograph, an abdominal CT volume and a T1-weighted brain MRI. They are the four ageing models released with the paper *Prediction bias in biological ageing models* ([preprint](https://www.researchsquare.com/article/rs-10157626/v1)). The age gap is the estimated age minus chronological age. Code, installation and data format: [HORIZONHealthcare/AG-RTM](https://github.com/HORIZONHealthcare/AG-RTM). **Access.** Log in, fill in the short form on this page, and access is granted straight away. Then log in on your machine with `hf auth login` before downloading. ## Models | Model | Input | Training data | Test MAE (years) | Checkpoint | |---|---|---|---:|---| | Retinal Age | Colour fundus photograph (2D) | AlzEye | 5.31 | `retinal_age.pth` | | Chest Age | Frontal chest radiograph (2D) | ChestX-ray14 | 5.15 | `chest_age.pth` | | Abdominal Age | Abdominal CT volume (2.5D, 32 axial slices) | Merlin | 4.04 | `abdominal_age.pth` | | Brain Age | T1-weighted brain MRI (2.5D, 32 axial slices) | OASIS-3 | 3.81 | `brain_age.pth` | All four models fine-tune DINOv3-Large (`vit_large_patch16_dinov3.lvd1689m`) with a small regression head: Linear(1024→32) → ReLU → Dropout(0.5) → Linear(32→1). Abdominal Age and Brain Age encode 32 axial slices one by one and average their features before the head. Each model was trained on healthy patients only, and the checkpoint with the lowest validation MAE was kept. Each checkpoint holds the weights and the settings needed to rebuild the model, and loads with `torch.load(..., weights_only=True)`. ## Usage ```bash git clone https://github.com/HORIZONHealthcare/AG-RTM.git && cd AG-RTM conda create -n ag-rtm python=3.11 -y && conda activate ag-rtm pip install -r requirements.txt --extra-index-url https://download.pytorch.org/whl/cu121 hf auth login hf download lyqun/AG-RTM chest_age.pth --local-dir weights cd code python predict.py --checkpoint ../weights/chest_age.pth --input my_data.csv --output predictions.csv ``` Replace `chest_age.pth` with `retinal_age.pth`, `abdominal_age.pth` or `brain_age.pth` for the other models, or download all four with `hf download lyqun/AG-RTM --local-dir weights`. Input CSV columns: - Retinal Age, Chest Age and Abdominal Age: `subject_id,image_path,biomarker_value`. - Brain Age: `subject_id,session_id,archive_path,biomarker_value`. `biomarker_value` is chronological age and is optional. The output gives `predicted_age`, and `age_gap` when age is supplied. ## Performance Test MAE, RMSE and r² with 95% confidence intervals from a bootstrap with 1,000 resamples (patient-level, except volume-level for Abdominal Age, because Merlin releases no patient identifiers). | Model | Test subset | MAE (years) | RMSE (years) | Pearson r² | |---|---|---:|---:|---:| | Retinal Age | 65,360 images, 12,141 patients | 5.31 (5.23–5.40) | 6.80 (6.68–6.91) | 0.745 (0.732–0.758) | | Chest Age | 21,733 radiographs, 4,623 patients | 5.15 (4.95–5.42) | 6.80 (6.45–7.26) | 0.796 (0.769–0.819) | | Abdominal Age | 4,984 volumes | 4.04 (3.94–4.14) | 5.32 (5.17–5.46) | 0.918 (0.912–0.923) | | Brain Age | 1,454 sessions, 808 patients | 3.81 (3.59–4.03) | 4.92 (4.65–5.20) | 0.643 (0.604–0.680) | ## Model details ### Retinal Age - Input: colour fundus photographs, cropped around the fundus and padded to a square. Images are resized to 256 pixels and centre-cropped to 224 × 224. - Training data: AlzEye (Moorfields Eye Hospital, London, UK), 9,844 healthy patients (53,680 images); validation 2,462 healthy patients (14,038 images). The split was made at the patient level. - JPEG decoding: the paper decoded the photographs with Pillow built against IJG libjpeg 9e. The pip Pillow (libjpeg-turbo) shifts predictions by 0.2 years on average. To reproduce the paper exactly, install the Anaconda build: `pip uninstall -y Pillow && conda install -y -c defaults --override-channels pillow=11.3.0`. - Checkpoint: `retinal_age.pth`, epoch 28. SHA-256 `fb5fbddb2ab2e0189097b604a025d2d8ba042e8c7a998c7b3b16f2b8afe36b03` ### Chest Age - Input: frontal (PA or AP) radiographs. Images are resized to 256 pixels and centre-cropped to 224 × 224. - Training data: ChestX-ray14 (NIH Clinical Center), 8,698 healthy patients (12,622 radiographs); validation 2,175 healthy patients (3,174 radiographs). The split was made at the patient level. Healthy means a radiograph with none of the fourteen findings (No Finding). - Checkpoint: `chest_age.pth`, epoch 42. SHA-256 `8d006ee05a292e3764ca3ec8889b0d66675a508c1252f043017ba9d6e9566118` ### Abdominal Age - Input: NIfTI volume in Hounsfield units. The volume is resampled to 1.5 mm, the body is segmented at −950 HU and cropped with a 15 mm margin, and 32 axial slices are sampled. - Training data: Merlin abdominal CT dataset (Stanford AIMI), 4,633 healthy studies; validation 1,597 healthy studies. Merlin releases no patient identifiers, so its official split was kept. Healthy means a study with none of the thirty report-derived findings. Merlin is distributed under a non-commercial research data use agreement. - Checkpoint: `abdominal_age.pth`, epoch 29. SHA-256 `1de3f4ad84b33eb1d457163c7cc7e954a2dce2563566b7a5b318f401b627c9c9` ### Brain Age - Input: a T1w NIfTI volume, or an OASIS-3 session ZIP archive. Each run is reoriented to RAS, intensity-clipped to the 0.5th and 99.5th percentiles, cropped to the head with a 5 mm margin, and 32 axial slices are sampled. A session with several T1w runs gets the mean prediction. - Training data: OASIS-3, 411 healthy patients (889 sessions); validation 103 healthy patients (229 sessions). The split was made at the patient level. Healthy means a session whose nearest clinical visit recorded CDR 0 and normal cognition. - Checkpoint: `brain_age.pth`, epoch 11. SHA-256 `19cb29205c03e329ee67ba45195d8ea41ee7b1339ca3c036770ad79d869178cc` ## Limitations The paper shows that the age gap from these models is pulled towards the mean age more strongly in unhealthy than in healthy patients (differential regression to the mean). Report associations within age subgroups. The age gap does not reliably reflect the health of an individual. Each model was trained on one cohort and has not been validated elsewhere. The models are for research use only and are not medical devices. ## License The weights are released under [CC BY-NC 4.0](https://creativecommons.org/licenses/by-nc/4.0/). Use must also respect the terms of each training dataset. OASIS-3 asks for this acknowledgement: "Data were provided in part by OASIS-3: Longitudinal Multimodal Neuroimaging: Principal Investigators: T. Benzinger, D. Marcus, J. Morris; NIH P30 AG066444, P50 AG00561, P30 NS09857781, P01 AG026276, P01 AG003991, R01 AG043434, UL1 TR000448, R01 EB009352. AV-45 doses were provided by Avid Radiopharmaceuticals, a wholly owned subsidiary of Eli Lilly." ## Citation ```bibtex @article{lin2026investigating, title = {Investigating the fundamental characteristics of retinal age models}, author = {Lin, Yiqun and Ong, Ariel Yuhan and Wong, Matthew Yu Heng and others and Zhou, Yukun}, journal = {Research Square}, note = {Preprint}, year = {2026}, doi = {10.21203/rs.3.rs-10157626/v1} } ```