-
Notifications
You must be signed in to change notification settings - Fork 1.4k
Closed
Labels
Description
Is your feature request related to a problem? Please describe.
The current monai.visualize module is highly coupled with Tensorboard's SummaryWriter. It'd be convenient to have a set of classes designed to process tensors/arrays both inside and outside the training loop to generate common visualizations, like a segmentation overlay.
Describe the solution you'd like
A restructuring of monai.visualize to support out of training loop visualization, and easier creation of custom visualization. I could see this including the following:
- Create an abstract
Visualizationbase class - Refactoring current 2D/3D visualizers to classes that implement
Visualization - Refactor
TensorBoardImageHandlerto support a list ofVisualizationobjects - Add an
add(viz : Visualization)method, or the like, toTensorBoardImageHandler
Describe alternatives you've considered
The monai.visualize module could also be restructured to be a functional API instead of using classes.
Additional context
Example usages:
Outside training loop
image_data = itk.GetArrayFromImage(itk.imread("image1.nii.gz")
seg_data = itk.GetArrayFromImage(itk.imread("seg1.nii.gz")
segmentation_overlay_visualizer = monai.visualize.SegmentationOverlayVisualization()
viz = segmentation_overlay_visualizer(image_data, seg_data)Inside training loop
train_tensorboard_image_handler = TensorBoardImageHandler(
batch_transform=lambda batch: (batch[0], batch[1]),
output_transform=lambda output: predict_segmentation(output[0]),
global_iter_transform=lambda x: trainer.state.epoch
)
# the add function could take in any class that implements the Visualization class
train_tensorboard_image_handler.add(monai.visualize.SegmentationOverlayVisualization())
trainer.add_event_handler(event_name=Events.EPOCH_COMPLETED, handler=train_tensorboard_image_handler)