Shortcuts

Note

You are reading the documentation for MMOCR 0.x, which will soon be deprecated by the end of 2022. We recommend you upgrade to MMOCR 1.0 to enjoy fruitful new features and better performance brought by OpenMMLab 2.0. Check out the maintenance plan, changelog, code and documentation of MMOCR 1.0 for more details.

Source code for mmocr.models.textdet.dense_heads.head_mixin

# Copyright (c) OpenMMLab. All rights reserved.
import numpy as np

from mmocr.models.builder import HEADS, build_loss, build_postprocessor
from mmocr.utils import check_argument


[docs]@HEADS.register_module() class HeadMixin: """Base head class for text detection, including loss calcalation and postprocess. Args: loss (dict): Config to build loss. postprocessor (dict): Config to build postprocessor. """ def __init__(self, loss, postprocessor): assert isinstance(loss, dict) assert isinstance(postprocessor, dict) self.loss_module = build_loss(loss) self.postprocessor = build_postprocessor(postprocessor)
[docs] def resize_boundary(self, boundaries, scale_factor): """Rescale boundaries via scale_factor. Args: boundaries (list[list[float]]): The boundary list. Each boundary has :math:`2k+1` elements with :math:`k>=4`. scale_factor (ndarray): The scale factor of size :math:`(4,)`. Returns: list[list[float]]: The scaled boundaries. """ assert check_argument.is_2dlist(boundaries) assert isinstance(scale_factor, np.ndarray) assert scale_factor.shape[0] == 4 for b in boundaries: sz = len(b) check_argument.valid_boundary(b, True) b[:sz - 1] = (np.array(b[:sz - 1]) * (np.tile(scale_factor[:2], int( (sz - 1) / 2)).reshape(1, sz - 1))).flatten().tolist() return boundaries
[docs] def get_boundary(self, score_maps, img_metas, rescale): """Compute text boundaries via post processing. Args: score_maps (Tensor): The text score map. img_metas (dict): The image meta info. rescale (bool): Rescale boundaries to the original image resolution if true, and keep the score_maps resolution if false. Returns: dict: A dict where boundary results are stored in ``boundary_result``. """ assert check_argument.is_type_list(img_metas, dict) assert isinstance(rescale, bool) score_maps = score_maps.squeeze() boundaries = self.postprocessor(score_maps) if rescale: boundaries = self.resize_boundary( boundaries, 1.0 / self.downsample_ratio / img_metas[0]['scale_factor']) results = dict( boundary_result=boundaries, filename=img_metas[0]['filename']) return results
[docs] def loss(self, pred_maps, **kwargs): """Compute the loss for scene text detection. Args: pred_maps (Tensor): The input score maps of shape :math:`(NxCxHxW)`. Returns: dict: The dict for losses. """ losses = self.loss_module(pred_maps, self.downsample_ratio, **kwargs) return losses
Read the Docs v: v0.6.3
Versions
latest
stable
v0.6.3
v0.6.2
v0.6.1
v0.6.0
v0.5.0
v0.4.1
v0.4.0
v0.3.0
v0.2.1
v0.2.0
v0.1.0
dev-1.x
Downloads
On Read the Docs
Project Home
Builds

Free document hosting provided by Read the Docs.