Fracture Check models (FracAtlas)

Two PyTorch models for finding bone fractures in musculoskeletal X-rays, used by the Fracture Check demo.

File Model Job
classifier_convnext_tiny_s44.pt ConvNeXt-Tiny (timm convnext_tiny.fb_in22k_ft_in1k), 384 px grayscale Does the X-ray show a fracture?
detector_s42_best.pt Faster R-CNN v2, ResNet-50 + FPN (torchvision), COCO-pretrained Where is the fracture? (boxes)

A student research project, not a medical device. Not for diagnosis or for deciding whether someone should seek care.

How they are used together

The classifier decides whether: an X-ray scoring at least 0.0968 is flagged. That threshold was fixed on validation data for 90% recall. The detector decides where, and its boxes are shown only on flagged X-rays. A Grad-CAM heatmap from the classifier's last stage shows where the classifier found evidence.

Test results

On the held-out FracAtlas test split (589 X-rays, 102 fractured, 230 image groups), each scored once with the analysis plan committed beforehand. Intervals are 95% bootstrap intervals over image groups.

Classifier (threshold 0.0968)
Fractures caught (recall) 94 / 102 = 0.922 [0.859, 0.976]
Fracture-free X-rays cleared (specificity) 0.708 [0.643, 0.764]
Flagged X-rays that had a fracture (precision) 0.398
Cleared X-rays without a fracture (NPV) 0.977
ROC-AUC / PR-AUC 0.937 / 0.853
Detector (seed 42)
Top box centre inside a fracture box 0.745 [0.650, 0.837]
AP50, normal X-rays included 0.421 [0.296, 0.528]
Fracture boxes found at 1 false box per image 0.635
Of the 94 flagged fractures, top box on the fracture 72

Limitations

  • Surgical hardware. Plates and screws push the classifier's score up, and the detector tends to box the implant (4 of 11 hardware fractures boxed correctly on test).
  • Children. Growth plates near the ends of long bones cause false alarms.
  • Scope. Plain X-rays of hands, arms, legs, hips and shoulders only, from one dataset (three hospitals in Bangladesh). Performance elsewhere is unknown.
  • Precision is low by design. The threshold favours catching fractures, so most flagged X-rays in practice are not fractured.

Loading

The files are checkpoints written by the project's own code (weights plus training config and provenance). Load them with the fracdet package from the GitHub repo:

from fracdet.serve.pipeline import FracturePipeline

pipeline = FracturePipeline.from_dir("path/to/folder/with/both/files")
result = pipeline.predict(open("xray.jpg", "rb").read())
print(result["probability"], result["flagged"], result["boxes"])

FracturePipeline checks each file's SHA-256 and its training provenance (epoch, git commit, data-split checksum) before use.

File SHA-256
classifier_convnext_tiny_s44.pt f54efa2468c56c29208295db1df5c79d7eef878965fefea045c2dbcc09ea2784
detector_s42_best.pt 4a87100d08b1c998c5599016755271dfbda661d8b38bbee3494aef2863ab24c3

Full methods, evaluation protocol and per-image results: github.com/Akinchan-Jain-7/fracatlas-fracture-detection.

Training data

FracAtlas: Abedeen, I., Rahman, M. A., Prottyasha, F. Z., et al. FracAtlas: A Dataset for Fracture Classification, Localization and Segmentation of Musculoskeletal Radiographs. Scientific Data 10, 521 (2023). Licensed CC BY 4.0. The images are not included here.

Author: Akinchan Jain, B.Tech CSE (AI), Bennett University.

Downloads last month

-

Downloads are not tracked for this model. How to track
Inference Providers NEW
This model isn't deployed by any Inference Provider. ๐Ÿ™‹ Ask for provider support

Space using akinchanJain7/fracture-detection-model 1