[Fix] Fix Visualizer that built vis_backends will not be used when save_dir is None (#1275)

pull/1283/head
Xinyu Yang 2023-07-31 15:29:44 +08:00 committed by GitHub
parent 2df93eb51f
commit 4fdab5e9cb
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 5 additions and 22 deletions

View File

@ -6,8 +6,6 @@ from typing import TYPE_CHECKING, Dict, List, Optional, Sequence, Tuple, Union
if TYPE_CHECKING: if TYPE_CHECKING:
from matplotlib.font_manager import FontProperties from matplotlib.font_manager import FontProperties
import logging
import cv2 import cv2
import numpy as np import numpy as np
import torch import torch
@ -15,7 +13,6 @@ import torch.nn.functional as F
from mmengine.config import Config from mmengine.config import Config
from mmengine.dist import master_only from mmengine.dist import master_only
from mmengine.logging import print_log
from mmengine.registry import VISBACKENDS, VISUALIZERS from mmengine.registry import VISBACKENDS, VISUALIZERS
from mmengine.structures import BaseDataElement from mmengine.structures import BaseDataElement
from mmengine.utils import ManagerMixin from mmengine.utils import ManagerMixin
@ -165,17 +162,9 @@ class Visualizer(ManagerMixin):
self._dataset_meta: Optional[dict] = None self._dataset_meta: Optional[dict] = None
self._vis_backends: Union[Dict, Dict[str, 'BaseVisBackend']] = dict() self._vis_backends: Union[Dict, Dict[str, 'BaseVisBackend']] = dict()
if save_dir is None: if vis_backends is not None:
print_log(
'`Visualizer` backend is not initialized '
'because save_dir is None.',
logger='current',
level=logging.WARNING)
elif vis_backends is not None:
assert len(vis_backends) > 0, 'empty list' assert len(vis_backends) > 0, 'empty list'
names = [ names = [vis_backend.get('name') for vis_backend in vis_backends]
vis_backend.get('name', None) for vis_backend in vis_backends
]
if None in names: if None in names:
if len(set(names)) > 1: if len(set(names)) > 1:
raise RuntimeError( raise RuntimeError(
@ -194,8 +183,8 @@ class Visualizer(ManagerMixin):
if None not in names and len(set(names)) != len(names): if None not in names and len(set(names)) != len(names):
raise RuntimeError('The name fields cannot be the same') raise RuntimeError('The name fields cannot be the same')
save_dir = osp.join(save_dir, 'vis_data') if save_dir is not None:
save_dir = osp.join(save_dir, 'vis_data')
for vis_backend in vis_backends: for vis_backend in vis_backends:
name = vis_backend.pop('name', vis_backend['type']) name = vis_backend.pop('name', vis_backend['type'])
vis_backend.setdefault('save_dir', save_dir) vis_backend.setdefault('save_dir', save_dir)

View File

@ -11,7 +11,6 @@ import torch
import torch.nn as nn import torch.nn as nn
from mmengine import VISBACKENDS, Config from mmengine import VISBACKENDS, Config
from mmengine.logging import MMLogger
from mmengine.visualization import Visualizer from mmengine.visualization import Visualizer
@ -69,14 +68,9 @@ class TestVisualizer(TestCase):
visualizer = Visualizer(image=self.image) visualizer = Visualizer(image=self.image)
visualizer.get_image() visualizer.get_image()
# test save_dir # build visualizer without `save_dir`
# Warning should be raised since no backend is initialized.
with self.assertLogs(MMLogger.get_current_instance(), level='WARNING'):
Visualizer()
visualizer = Visualizer( visualizer = Visualizer(
vis_backends=copy.deepcopy(self.vis_backend_cfg)) vis_backends=copy.deepcopy(self.vis_backend_cfg))
assert visualizer.get_backend('mock1') is None
visualizer = Visualizer( visualizer = Visualizer(
vis_backends=copy.deepcopy(self.vis_backend_cfg), vis_backends=copy.deepcopy(self.vis_backend_cfg),