class_docstr: VGG Atrous multi layer base network. You must inherit from it to define
  how the features are computed.
  
  Parameters
  ----------
  layers : list of int
      Number of layer for vgg base network.
  filters : list of int
      Number of convolution filters for each layer.
  batch_norm : bool, default is False
      If `True`, will use BatchNorm layers.
class_docstr_tok: ["VGG","Atrous","multi","layer","base","network",".","You","must","inherit","from","it","to","define","how","the","features","are","computed",".","Parameters","--","--","--","--","--","layers",":","list","of","int","Number","of","layer","for","vgg","base","network",".","filters",":","list","of","int","Number","of","convolution","filters","for","each","layer",".","batch_norm",":","bool",",","default","is","False","If","`","True","`",",","will","use","BatchNorm","layers","."]
code: def __init__(self, layers, filters, batch_norm=False, **kwargs):
      super(VGGAtrousBase, self).__init__(**kwargs)
      assert len(layers) == len(filters)
      self.init = {
          "weight_initializer": Xavier(
              rnd_type="gaussian", factor_type="out", magnitude=2
          ),
          "bias_initializer": "zeros",
      }
      with self.name_scope():
          # we use pre-trained weights from caffe, initial scale must change
          init_scale = (
              mx.nd.array([0.229, 0.224, 0.225]).reshape((1, 3, 1, 1))
              * 255
          )
          self.init_scale = self.params.get_constant(
              "init_scale", init_scale
          )
          self.stages = nn.HybridSequential()
          for l, f in zip(layers, filters):
              stage = nn.HybridSequential(prefix="")
              with stage.name_scope():
                  for _ in range(l):
                      stage.add(
                          nn.Conv2D(
                              f, kernel_size=3, padding=1, **self.init
                          )
                      )
                      if batch_norm:
                          stage.add(nn.BatchNorm())
                      stage.add(nn.Activation("relu"))
              self.stages.add(stage)
  
          # use dilated convolution instead of dense layers
          stage = nn.HybridSequential(prefix="dilated_")
          with stage.name_scope():
              stage.add(
                  nn.Conv2D(
                      1024,
                      kernel_size=3,
                      padding=6,
                      dilation=6,
                      **self.init,
                  )
              )
              if batch_norm:
                  stage.add(nn.BatchNorm())
              stage.add(nn.Activation("relu"))
              stage.add(nn.Conv2D(1024, kernel_size=1, **self.init))
              if batch_norm:
                  stage.add(nn.BatchNorm())
              stage.add(nn.Activation("relu"))
          self.stages.add(stage)
  
          # normalize layer for 4-th stage
          self.norm4 = Normalize(filters[3], 20)
  
imports: from __future__ import division
  import os
  import mxnet
  from mxnet import gluon
  from mxnet.gluon import nn
  from mxnet.initializer import Xavier
label_desc: Use image node_id 1 to create a new VGGAtrousBase object from inherited base classes: gluon with example: obj = VGGAtrousBase(layers, filters, batch_norm)