broadinstitute / ml4h

Other
122 stars 23 forks source link

Mesh TensorMaps: Start with bounding box #120

Closed paolodi closed 4 years ago

paolodi commented 4 years ago

What Implementing a TensorMap that succinctly describes the bounding box of a 3-D object (e.g., 3-D image segmentation).

Why ML4CVD is designed to naturally handle models that can enhance the extraction of structural and functional information from widespread diagnostic assessments via limited training on rare information-rich modalities. For example, the codebase has been successfully employed to perform complex segmentation tasks on cardiac MRI, and to implement state-of-the-art models that infer derived features of segmentation, such as LV mass, from cheap and widely available ECGs.

In the current pipeline, however, the models have been often asked to treat rich 3-D information either as a collection of 2-D assessments (slice-by-slice), or as fully unconstrained 3-D objects embedded in structured grids (3-D images). Introducing intermediate and succinct representations of the 3-D objects (e.g., via parametric models and meshes) could increase model performance, enhance interpretability, and provide helpful regularizers for complex multi-task mode;s

How The implementation of general 3-D Mesh TensorMaps is a complex task that might be better tackled in several substeps. In this first step, we will leverage existing TMAPs that extract the main axis of 3-D objects via SVD on centroids of arbitrary cross-sections. Rather than limiting the extraction to a single axis, we will expand SVD to extract the 3 orientation angles and use boundary detection algorithms from VTK to extract a meaningful bounding box.

Acceptance Criteria A TMAP returning a bounding box of SAX cardiac MRI segmentation is tested as the target of supervised training from 1) a cardiac MRI and 2) an ECG model.

lucidtronix commented 4 years ago

This is great @paolodi ! I think there may be an even simpler minimum viable product here though. What if we simply argmax and argmin the SAX segmentations in the left ventricle and myocardium channels (axes 1 and 2). Separate TMAPs for each. I think it makes sense for meshes to add their own INTERPRETATION enum as new evaluations, losses, and visualizations are going to be needed. So the shape would be (6,) and channel Map would be {min_x: 0, ..., max_x: 3, ..., max_z: 5}. Obviously, this approach is forced to be axis aligned in the SAX voxel space which your proposal solves if I'm reading it right. If you're already underway with your better approach, I'm happy to tackle this the stupid way and you can review. What do you think?

paolodi commented 4 years ago

Absolutely, @lucidtronix, I like your proposal! And if you have something clear in mind, please go ahead and I'll be happy to review it. You're right, I guess I was referring to a bounding box that would maintain some information about the actual 3-D orientation of the object and rely less on the orientation and alignment of the SAX view, which is chosen by an operator. Clearly the mismatch between the two approaches is significant only if the view is not well aligned (i.e., in a very misaligned view, you would require a 'bigger than necessary' bounding box to enclose the object if you just take min and max). But we could fix for that later on!

paolodi commented 4 years ago

Sorry I was playing with the project table and I understood what shifting to 'Done' does :-)

lucidtronix commented 4 years ago

Closed via #131