class_docstr: ### Description
  implementation of Dense-V-Net:
     Gibson et al., "Automatic multi-organ segmentation on abdominal CT with
     dense V-networks" 2018
  
  ### Diagram
  
  DFS = Dense Feature Stack Block
  
  - Initial image is first downsampled to a given size.
  - Each DFS+SD outputs a skip link + a downsampled output.
  - All outputs are upscaled to the initial downsampled size.
  - If initial prior is given add it to the output prediction.
  
  Input
    |
    --[ DFS ]-----------------------[ Conv ]------------[ Conv ]------[+]-->
         |                                       |  |              |
         -----[ DFS ]---------------[ Conv ]------  |              |
                 |                                  |              |
                 -----[ DFS ]-------[ Conv ]---------              |
                                                        [ Prior ]---
  
  The layer DenseFeatureStackBlockWithSkipAndDownsample layer implements
  [DFS + Conv + Downsampling] in a single module, and outputs 2 elements:
      - Skip layer:          [ DFS + Conv]
      - Downsampled output:  [ DFS + Down]
  
  ### Constraints
  - Input size has to be divisible by 2*dilation_rates
docstr: :param num_classes: int, number of channels of output
  :param hyperparams: dictionary, network hyperparameters
  :param w_initializer: weight initialisation for network
  :param w_regularizer: weight regularisation for network
  :param b_initializer: bias initialisation for network
  :param b_regularizer: bias regularisation for network
  :param acti_func: activation function to use
  :param name: layer name
docstr_tok: [":","param","num_classes",":","int",",","number","of","channels","of","output",":","param","hyperparams",":","dictionary",",","network","hyperparameters",":","param","w_initializer",":","weight","initialisation","for","network",":","param","w_regularizer",":","weight","regularisation","for","network",":","param","b_initializer",":","bias","initialisation","for","network",":","param","b_regularizer",":","bias","regularisation","for","network",":","param","acti_func",":","activation","function","to","use",":","param","name",":","layer","name"]
code: def __init__(
      self,
      num_classes,
      hyperparams={},
      w_initializer=None,
      w_regularizer=None,
      b_initializer=None,
      b_regularizer=None,
      acti_func="relu",
      name="DenseVNet",
  ):
      """
  
      :param num_classes: int, number of channels of output
      :param hyperparams: dictionary, network hyperparameters
      :param w_initializer: weight initialisation for network
      :param w_regularizer: weight regularisation for network
      :param b_initializer: bias initialisation for network
      :param b_regularizer: bias regularisation for network
      :param acti_func: activation function to use
      :param name: layer name
      """
  
      super(DenseVNet, self).__init__(
          num_classes=num_classes,
          w_initializer=w_initializer,
          w_regularizer=w_regularizer,
          b_initializer=b_initializer,
          b_regularizer=b_regularizer,
          acti_func=acti_func,
          name=name,
      )
  
      # Override default Hyperparameters
      self.hyperparams = self.__hyper_params__
      self.hyperparams.update(hyperparams)
  
      # Check for dilation rates
      if any(
          [
              d != 1
              for ds in self.hyperparams["dilation_rates"]
              for d in ds
          ]
      ):
          raise NotImplementedError(
              "Dilated convolutions are not yet implemented"
          )
      # Check available modes
      if self.hyperparams["use_dense_connections"] is False:
          raise NotImplementedError(
              "Non-dense connections are not yet implemented"
          )
      if self.hyperparams["use_coords"] is True:
          raise NotImplementedError(
              "Image coordinate augmentation is not yet implemented"
          )
  
imports: from __future__ import absolute_import, print_function
  import tensorflow
  from niftynet.io.misc_io import image3_axial
  from niftynet.layer import layer_util
  from niftynet.layer.affine_augmentation import AffineAugmentationLayer
  from niftynet.layer.base_layer import TrainableLayer
  from niftynet.layer.bn import BNLayer
  from niftynet.layer.channel_sparse_convolution import ChannelSparseConvolutionalLayer
  from niftynet.layer.convolution import ConvolutionalLayer
  from niftynet.layer.linear_resize import LinearResizeLayer
  from niftynet.layer.downsample import DownSampleLayer
  from niftynet.network.base_net import BaseNet
  from collections import namedtuple
label_desc: Use image node_id 1 to create a new DenseVNet object from inherited base classes: BaseNet with example: obj = DenseVNet(num_classes, hyperparams, w_initializer, w_regularizer, b_initializer, b_regularizer, acti_func, name)