--- license: apache-2.0 tags: - bone-age - medical-imaging - tanner-whitehouse-2 - efficientnet-b3 - multi-task-learning - pediatric-radiology language: - en --- # BoneAgeTW2 — EfficientNet-B3 Multi-Head TW2 Stage Classifier **Paper:** [arXiv:2607.23224](https://arxiv.org/abs/2607.23224) **Code:** [github.com/jmmana/BoneAgeTW2](https://github.com/jmmana/BoneAgeTW2) **Author:** Juan Manuel Castillo Pinto — Universidad de La Salle, Bogotá --- ## What is this? A PyTorch checkpoint of the stage classifier from **BoneAgeTW2**, an end-to-end deep learning system for automated **Tanner-Whitehouse 2 (TW2)** skeletal maturation assessment. The model uses a shared **EfficientNet-B3** backbone with **20 independent classification heads** (one per TW2 bone site) to simultaneously predict the maturation stage of each bone in a hand radiograph. ## Model Performance (Validation, n=1,262 — RSNA Bone Age Dataset) | Metric | Value | |---|---| | Mean exact accuracy (all 20 bones) | **65.82%** | | Mean within-1 accuracy (all 20 bones) | **96.77%** | | End-to-end MAE (RUS pathway) | **14.71 months** | | Carpal bones exact accuracy | 65.1–84.4% | | RUS long bones exact accuracy | 56.7–66.8% | The within-1 accuracy of 96.77% falls within the human radiologist inter-rater range (King et al., 1994). ## Checkpoint | File | Size | Epochs | Loss | |---|---|---|---| | `models/stage_classifier_epoch2.pt` | 72 MB | 2 | 0.9477 | ## Loading the Model ```python import torch, timm from huggingface_hub import hf_hub_download # Download ckpt_path = hf_hub_download("maktub83/BoneAgeTW2", "models/stage_classifier_epoch2.pt") checkpoint = torch.load(ckpt_path, map_location="cpu") # Rebuild backbone backbone = timm.create_model("efficientnet_b3", pretrained=False, num_classes=0) backbone.load_state_dict(checkpoint["backbone"]) backbone.eval() # feat_dim = 1536 feat_dim = checkpoint["feat_dim"] # Each head: Linear(feat_dim, n_stages) # See github.com/jmmana/BoneAgeTW2/training/04_train_stage_classifier.py # for build_model() and BONE_NAMES ``` ## TW2 Bones (20 heads) **RUS (13):** radius, ulna, mc1, mc3, mc5, pp1, pp3, pp5, mp3, mp5, dp1, dp3, dp5 **Carpal (7):** capitate, hamate, triquetral, lunate, scaphoid, trapezoid, trapezium ## Pseudo-Label Method Training labels were generated by **Gaussian inversion** of the published TW2 reference distributions: for each bone, age, and sex, the MAP stage from `gaussian_params.json` is assigned as the pseudo-label. This produces 252,220 annotations from 12,611 RSNA radiographs without any manual effort. ## Citation ```bibtex @article{castillo2026boneagetw2, author = {Castillo~Pinto, Juan~Manuel}, title = {{BoneAgeTW2}: Automated Skeletal Maturation Assessment via the {Tanner-Whitehouse 2} Method, Deep Learning, and Clinical Report Generation with Distribution Curves}, journal = {arXiv preprint arXiv:2607.23224}, year = {2026} } ```