# Visualization MMSegmentation 1.x provides convenient ways for monitoring training status or visualizing data and model predictions. ## Training status Monitor MMSegmentation 1.x uses TensorBoard to monitor training status. ### TensorBoard Configuration Install TensorBoard following [official instructions](https://www.tensorflow.org/install) e.g. ```shell pip install tensorboardX pip install future tensorboard ``` Add `TensorboardVisBackend` in `vis_backend` of `visualizer` in `default_runtime.py` config file: ```python vis_backends = [dict(type='LocalVisBackend'), dict(type='TensorboardVisBackend')] visualizer = dict( type='SegLocalVisualizer', vis_backends=vis_backends, name='visualizer') ``` ### Examining scalars in TensorBoard Launch training experiment e.g. ```shell python tools/train.py configs/pspnet/pspnet_r50-d8_4xb4-80k_ade20k-512x512.py --work-dir work_dir/test_visual ``` Find the `vis_data` path of `work_dir` after starting training, for example, the vis_data path of this particular test is as follows: ```shell work_dirs/test_visual/20220810_115248/vis_data ``` The scalar file in vis_data path includes learning rate, losses and data_time etc, also record metrics results and you can refer [logging tutorial](https://mmengine.readthedocs.io/en/latest/advanced_tutorials/logging.html) in MMEngine to log custom data. The tensorboard visualization results are executed with the following command: ```shell tensorboard --logdir work_dirs/test_visual/20220810_115248/vis_data ``` ## Data and Results visualization ### Visualizer Data Samples during Model Testing or Validation MMSegmentation provides `SegVisualizationHook` which is a [hook](https://github.com/open-mmlab/mmengine/blob/main/docs/en/tutorials/hook.md) working to visualize ground truth and prediction of segmentation during model testing and evaluation. Its configuration is in `default_hooks`, please see [Runner tutorial](https://github.com/open-mmlab/mmengine/blob/main/docs/en/tutorials/runner.md) for more details. For example, In `_base_/schedules/schedule_20k.py`, modify the `SegVisualizationHook` configuration, set `draw` to `True` to enable the storage of network inference results, `interval` indicates the sampling interval of the prediction results, and when set to 1, each inference result of the network will be saved. `interval` is set to 50 by default: ```python default_hooks = dict( timer=dict(type='IterTimerHook'), logger=dict(type='LoggerHook', interval=50, log_metric_by_epoch=False), param_scheduler=dict(type='ParamSchedulerHook'), checkpoint=dict(type='CheckpointHook', by_epoch=False, interval=2000), sampler_seed=dict(type='DistSamplerSeedHook'), visualization=dict(type='SegVisualizationHook', draw=True, interval=1)) ``` After launch training experiment, visualization results will be stored in the local folder in validation loop, or when launch evaluation a model on one dataset, the prediction results will be store in the local. The stored results of the local visualization are kept in `vis_image` under `$WORK_DIRS/vis_data`, e.g.: ```shell work_dirs/test_visual/20220810_115248/vis_data/vis_image ``` In addition, if `TensorboardVisBackend` is add in `vis_backends`, like [above](#tensorboard-configuration), we can also run the following command to view them in TensorBoard: ```shell tensorboard --logdir work_dirs/test_visual/20220810_115248/vis_data ``` ### Visualize a Single Data Sample If you want to visualize a single data sample, we suggest to use `SegLocalVisualizer`. `SegLocalVisualizer` is child class inherits from `Visualizer` in MMEngine and works for MMSegmentation visualization, for more details about `Visualizer` please refer to [visualization tutorial](https://github.com/open-mmlab/mmengine/blob/main/docs/en/advanced_tutorials/visualization.md) in MMEngine. Here is an example about `SegLocalVisualizer`, first you may download example data below by following commands: