Source code for gluoncv.model_zoo.bbox

# pylint: disable=arguments-differ
"""Bounding boxes operators"""
from __future__ import absolute_import

from mxnet import gluon


[docs]class BBoxCornerToCenter(gluon.HybridBlock): """Convert corner boxes to center boxes. Corner boxes are encoded as (xmin, ymin, xmax, ymax) Center boxes are encoded as (center_x, center_y, width, height) Parameters ---------- split : bool Whether split boxes to individual elements after processing. Returns ------- A BxNx4 NDArray if split is False, or 4 BxNx1 NDArray if split is True """ def __init__(self, split=False): super(BBoxCornerToCenter, self).__init__() self._split = split
[docs] def hybrid_forward(self, F, x): xmin, ymin, xmax, ymax = F.split(x, axis=-1, num_outputs=4) width = xmax - xmin height = ymax - ymin x = xmin + width / 2 y = ymin + height / 2 if not self._split: return F.concat(x, y, width, height, dim=-1) else: return x, y, width, height
[docs]class BBoxCenterToCorner(gluon.HybridBlock): """Convert center boxes to corner boxes. Corner boxes are encoded as (xmin, ymin, xmax, ymax) Center boxes are encoded as (center_x, center_y, width, height) Parameters ---------- split : bool Whether split boxes to individual elements after processing. Returns ------- A BxNx4 NDArray if split is False, or 4 BxNx1 NDArray if split is True. """ def __init__(self, split=False): super(BBoxCenterToCorner, self).__init__() self._split = split
[docs] def hybrid_forward(self, F, x): """Hybrid forward""" x, y, w, h = F.split(x, axis=-1, num_outputs=4) hw = w / 2 hh = h / 2 xmin = x - hw ymin = y - hh xmax = x + hw ymax = y + hh if not self._split: return F.concat(xmin, ymin, xmax, ymax, dim=-1) else: return xmin, ymin, xmax, ymax