Skip to content

Class API for Visualize Module #528

@abpwrs

Description

@abpwrs

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 Visualization base class
  • Refactoring current 2D/3D visualizers to classes that implement Visualization
  • Refactor TensorBoardImageHandler to support a list of Visualization objects
  • Add an add(viz : Visualization) method, or the like, to TensorBoardImageHandler

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)

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions