BumbleBeing

Bone Fracture Detector

ml PythonPyTorchscikit-learnJupyter

A classifier that looks at an X-ray and says whether the bone in it is broken. What makes it worth writing up isn’t the final model. It’s the distance between that model and the simple one I built first.

Two models on purpose

The baseline does it the old-fashioned way. Load the images, preprocess them, pull out features by hand, train a support vector machine on those. It got 58.6% accuracy with an ROC AUC of 0.623. Better than guessing, but not by enough to be useful for anything.

The ResNet model throws out the hand-built features and uses transfer learning from a pre-trained network instead, fine-tuned on the fracture data. Same 338-image test set, 83.4% accuracy, ROC AUC 0.834.

That’s a 25 point jump, and it’s the actual result here. Building the weak model first is what makes the second number mean anything. Without it, 83% is just a number with nothing to sit next to.

I checked the work against a published baseline from the imaging literature (Int. J. Imaging Syst. Technol.), so the bar was someone else’s reported result rather than one I’d set for myself.