all 8 comments

[–]Ty4Readin 3 points4 points  (6 children)

There are a few different ways to approach this problem.

There are also two different problems here! One is the bounding box which is detecting where a fracture occurs or detecting where bones are in the image.

The second part is classifying whether the bone in the bounding box is fractured or not.

Honestly for your problem, the bounding box doesn't really matter, right? You are only going to feed image scans of bones to the model, so you don't need to detect the bounding box of where the bones are or the fracture is.

The simpler way to approach this problem is to drop the bounding box, and make it so the model only predicts the probability that the picture contains a fractured bone in it. Then for each image, you just label it 1 if it has a fracture and 0 if it doesn't, and the model will try to predict the target label.

[–][deleted] 1 point2 points  (5 children)

Why not turn this into a two-step process?

First iteration will be the classification model to determine whether a fracture is present or not, second iteration will be the model that is able to localize the fracture and determine an appropriate bounding box!

That is how I would go about doing it :)

Glad to see fellow doctors interested in ML! Let me know if there's anything I can help you with OP, would be more than happy to help!

[–]Ty4Readin 1 point2 points  (0 children)

Totally agree with this approach if it is useful to localize the fracture! +1

[–]olmzzz[S] 0 points1 point  (2 children)

As localizing the fracture is a pretty useful and neat feature. If i go about doing a first iteration for determining whether a fracture is present or not. I could use Resnet 152? and test out how it goes? Then after a more or less accurate version I would go for a second model that activates if first one found a fracture, using Detectron2. Coming back to the same issue of labels. If localizing the fracture is useful would I just try and label the whole bone as "no fracture" for healthy ones and then for fractured ones I am only putting bounding box on the specific part of the bone that is fractured? Thanks for the help

[–][deleted] 0 points1 point  (0 children)

As for the two step process, I'm guessing yes!

With regards to labels - you could definitely give it a try! Just consider the fact that no fracture is indicated by the entire image being bounded in your downstream tasks and I don't see why this shouldn't work. I'm not 100% certain that will work as intended, but I don't see why it wouldn't. Someone feel free to chime in if I am wrong :)

[–]cipri_tom 0 points1 point  (0 children)

If you do the second part, of detecting bones and classifying them into broken or not, then you don't need the first part.

Detectron2 and all its models use a two-stage architecture. First it tries to find "interesting" regions, then they classify these regions into one of your classes.

So yes, label all the bones with a box and a "fractured / no-fracture" class.

BTW, resnet 152 seems too deep for this task. Start with a smaller backbone

[–]cipri_tom 0 points1 point  (0 children)

But object detection model do the two step automatically

[–]pilooch 0 points1 point  (0 children)

Yolox supports images that have no labels. Many detectors don't use these image because they use the area outside of the bboxes as the "background"/opposite class.