class_docstr: Objects as Points. https://arxiv.org/abs/1904.07850v2
  
  Parameters
  ----------
  base_network : mxnet.gluon.nn.HybridBlock
      The base feature extraction network.
  heads : OrderedDict
      OrderedDict with specifications for each head.
      For example: OrderedDict([
          ('heatmap', {'num_output': len(classes), 'bias': -2.19}),
          ('wh', {'num_output': 2}),
          ('reg', {'num_output': 2})
          ])
  classes : list of str
      Category names.
  head_conv_channel : int, default is 0
      If > 0, will use an extra conv layer before each of the real heads.
  scale : float, default is 4.0
      The downsampling ratio of the entire network.
  topk : int, default is 100
      Number of outputs .
  flip_test : bool
      Whether apply flip test in inference (training mode not affected).
  nms_thresh : float, default is 0.
      Non-maximum suppression threshold. You can specify < 0 or > 1 to disable NMS.
      By default nms is disabled.
  nms_topk : int, default is 400
      Apply NMS to top k detection results, use -1 to disable so that every Detection
       result is used in NMS.
  post_nms : int, default is 100
      Only return top `post_nms` detection results, the rest is discarded. The number is
      based on COCO dataset which has maximum 100 objects per image. You can adjust this
      number if expecting more objects. You can use -1 to return all detections.
code: def __init__(
      self,
      base_network,
      heads,
      classes,
      head_conv_channel=0,
      scale=4.0,
      topk=100,
      flip_test=False,
      nms_thresh=0,
      nms_topk=400,
      post_nms=100,
      **kwargs,
  ):
      if "norm_layer" in kwargs:
          kwargs.pop("norm_layer")
      if "norm_kwargs" in kwargs:
          kwargs.pop("norm_kwargs")
      super(CenterNet, self).__init__(**kwargs)
      assert isinstance(
          heads, OrderedDict
      ), "Expecting heads to be a OrderedDict per head, given {}".format(
          type(heads)
      )
      self.classes = classes
      self.topk = topk
      self.nms_thresh = nms_thresh
      self.nms_topk = nms_topk
      post_nms = min(post_nms, topk)
      self.post_nms = post_nms
      self.scale = scale
      self.flip_test = flip_test
      self._head_setups = heads
      self._head_conv_channel = head_conv_channel
      with self.name_scope():
          self.base_network = base_network
          self.heatmap_nms = nn.MaxPool2D(
              pool_size=3, strides=1, padding=1
          )
          self.decoder = CenterNetDecoder(topk=topk, scale=scale)
          self.heads = nn.HybridSequential("heads")
          for name, values in heads.items():
              head = nn.HybridSequential(name)
              num_output = values["num_output"]
              bias = values.get("bias", 0.0)
              weight_initializer = (
                  mx.init.Normal(0.001)
                  if bias == 0
                  else mx.init.Xavier()
              )
              if head_conv_channel > 0:
                  head.add(
                      nn.Conv2D(
                          head_conv_channel,
                          kernel_size=3,
                          padding=1,
                          use_bias=True,
                          weight_initializer=weight_initializer,
                          bias_initializer="zeros",
                      )
                  )
                  head.add(nn.Activation("relu"))
              head.add(
                  nn.Conv2D(
                      num_output,
                      kernel_size=1,
                      strides=1,
                      padding=0,
                      use_bias=True,
                      weight_initializer=weight_initializer,
                      bias_initializer=mx.init.Constant(bias),
                  )
              )
  
              self.heads.add(head)
  
imports: from __future__ import absolute_import
  import os
  import warnings
  from collections import OrderedDict
  import mxnet
  from mxnet.gluon import nn
  from mxnet import autograd
  from ...nn.coder import CenterNetDecoder
label_desc: Use image node_id 1 to create a new CenterNet object from inherited base classes: nn with example: obj = CenterNet(base_network, heads, classes, head_conv_channel, scale, topk, flip_test, nms_thresh, nms_topk, post_nms)