class_docstr: Model for "Quick segmentation of NeuroAnaTomy (QuickNAT) based on a deep fully convolutional neural network.
  Refer to: "QuickNAT: A Fully Convolutional Network for Quick and Accurate Segmentation of Neuroanatomy by
  Abhijit Guha Roya, Sailesh Conjetib, Nassir Navabb, Christian Wachingera"
  
  QuickNAT has an encoder/decoder like 2D F-CNN architecture with 4 encoders and 4 decoders separated by a bottleneck layer.
  The final layer is a classifier block with softmax.
  The architecture includes skip connections between all encoder and decoder blocks of the same spatial resolution,
  similar to the U-Net architecture.
  All Encoder and Decoder consist of three convolutional layers all with a Batch Normalization and ReLU.
  The first two convolutional layers are followed by a concatenation layer that concatenates
  the input feature map with outputs of the current and previous convolutional blocks.
  The kernel size of the first two convolutional layers is 5*5, the third convolutional layer has a kernel size of 1*1.
  
  Data in the encode path is downsampled using max pooling layers instead of upsamling like UNet and in the decode path
  upsampled using max un-pooling layers instead of transpose convolutions.
  The pooling is done at the beginning of the block and the unpool afterwards.
  The indices of the max pooling in the Encoder are forwarded through the layer to be available to the corresponding Decoder.
  
  The bottleneck block consists of a 5 * 5 convolutional layer and a batch normalization layer
  to separate the encoder and decoder part of the network,
  restricting information flow between the encoder and decoder.
  
  The output feature map from the last decoder block is passed to the classifier block,
  which is a convolutional layer with 1 * 1 kernel size that maps the input to an N channel feature map,
  where N is the number of segmentation classes.
  
  To further explain this consider the first example network given below. This network has 3 layers with strides
  of 2 for each of the middle layers (the last layer is the bottom connection which does not down/up sample). Input
  data to this network is immediately reduced in the spatial dimensions by a factor of 2 by the first convolution of
  the residual unit defining the first layer of the encode part. The last layer of the decode part will upsample its
  input (data from the previous layer concatenated with data from the skip connection) in the first convolution. this
  ensures the final output of the network has the same shape as the input.
  
  The original QuickNAT implementation included a `enable_test_dropout()` mechanism for uncertainty estimation during
  testing. As the dropout layers are the only stochastic components of this network calling the train() method instead
  of eval() in testing or inference has the same effect.
  
  Args:
      num_classes: number of classes to segmentate (output channels).
      num_channels: number of input channels.
      num_filters: number of output channels for each convolutional layer in a Dense Block.
      kernel_size: size of the kernel of each convolutional layer in a Dense Block.
      kernel_c: convolution kernel size of classifier block kernel.
      stride_convolution: convolution stride. Defaults to 1.
      pool: kernel size of the pooling layer,
      stride_pool: stride for the pooling layer.
      se_block: Squeeze and Excite block type to be included, defaults to None. Valid options : NONE, CSE, SSE, CSSE,
      droup_out: dropout ratio. Defaults to no dropout.
      act: activation type and arguments. Defaults to PReLU.
      norm: feature normalization type and arguments. Defaults to instance norm.
      adn_ordering: a string representing the ordering of activation (A), normalization (N), and dropout (D).
          Defaults to "NA". See also: :py:class:`monai.networks.blocks.ADN`.
  
  Examples::
  
      from monai.networks.nets import QuickNAT
  
      # network with max pooling by a factor of 2 at each layer with no se_block.
      net = QuickNAT(
          num_classes=3,
          num_channels=1,
          num_filters=64,
          pool = 2,
          se_block = "None"
      )
class_docstr_tok: ["Model","for","``","Quick","segmentation","of","NeuroAnaTomy","(","QuickNAT",")","based","on","a","deep","fully","convolutional","neural","network",".","Refer","to",":","``","QuickNAT",":","A","Fully","Convolutional","Network","for","Quick","and","Accurate","Segmentation","of","Neuroanatomy","by","Abhijit","Guha","Roya",",","Sailesh","Conjetib",",","Nassir","Navabb",",","Christian","Wachingera","''","QuickNAT","has","an","encoder\/decoder","like","2D","F-CNN","architecture","with","4","encoders","and","4","decoders","separated","by","a","bottleneck","layer",".","The","final","layer","is","a","classifier","block","with","softmax",".","The","architecture","includes","skip","connections","between","all","encoder","and","decoder","blocks","of","the","same","spatial","resolution",",","similar","to","the","U-Net","architecture",".","All","Encoder","and","Decoder","consist","of","three","convolutional","layers","all","with","a","Batch","Normalization","and","ReLU",".","The","first","two","convolutional","layers","are","followed","by","a","concatenation","layer","that","concatenates","the","input","feature","map","with","outputs","of","the","current","and","previous","convolutional","blocks",".","The","kernel","size","of","the","first","two","convolutional","layers","is","5","*","5",",","the","third","convolutional","layer","has","a","kernel","size","of","1","*","1",".","Data","in","the","encode","path","is","downsampled","using","max","pooling","layers","instead","of","upsamling","like","UNet","and","in","the","decode","path","upsampled","using","max","un-pooling","layers","instead","of","transpose","convolutions",".","The","pooling","is","done","at","the","beginning","of","the","block","and","the","unpool","afterwards",".","The","indices","of","the","max","pooling","in","the","Encoder","are","forwarded","through","the","layer","to","be","available","to","the","corresponding","Decoder",".","The","bottleneck","block","consists","of","a","5","*","5","convolutional","layer","and","a","batch","normalization","layer","to","separate","the","encoder","and","decoder","part","of","the","network",",","restricting","information","flow","between","the","encoder","and","decoder",".","The","output","feature","map","from","the","last","decoder","block","is","passed","to","the","classifier","block",",","which","is","a","convolutional","layer","with","1","*","1","kernel","size","that","maps","the","input","to","an","N","channel","feature","map",",","where","N","is","the","number","of","segmentation","classes",".","To","further","explain","this","consider","the","first","example","network","given","below",".","This","network","has","3","layers","with","strides","of","2","for","each","of","the","middle","layers","(","the","last","layer","is","the","bottom","connection","which","does","not","down\/up","sample",")",".","Input","data","to","this","network","is","immediately","reduced","in","the","spatial","dimensions","by","a","factor","of","2","by","the","first","convolution","of","the","residual","unit","defining","the","first","layer","of","the","encode","part",".","The","last","layer","of","the","decode","part","will","upsample","its","input","(","data","from","the","previous","layer","concatenated","with","data","from","the","skip","connection",")","in","the","first","convolution",".","this","ensures","the","final","output","of","the","network","has","the","same","shape","as","the","input",".","The","original","QuickNAT","implementation","included","a","`","enable_test_dropout","(",")","`","mechanism","for","uncertainty","estimation","during","testing",".","As","the","dropout","layers","are","the","only","stochastic","components","of","this","network","calling","the","train","(",")","method","instead","of","eval","(",")","in","testing","or","inference","has","the","same","effect",".","Args",":","num_classes",":","number","of","classes","to","segmentate","(","output","channels",")",".","num_channels",":","number","of","input","channels",".","num_filters",":","number","of","output","channels","for","each","convolutional","layer","in","a","Dense","Block",".","kernel_size",":","size","of","the","kernel","of","each","convolutional","layer","in","a","Dense","Block",".","kernel_c",":","convolution","kernel","size","of","classifier","block","kernel",".","stride_convolution",":","convolution","stride",".","Defaults","to","1.","pool",":","kernel","size","of","the","pooling","layer",",","stride_pool",":","stride","for","the","pooling","layer",".","se_block",":","Squeeze","and","Excite","block","type","to","be","included",",","defaults","to","None",".","Valid","options",":","NONE",",","CSE",",","SSE",",","CSSE",",","droup_out",":","dropout","ratio",".","Defaults","to","no","dropout",".","act",":","activation","type","and","arguments",".","Defaults","to","PReLU",".","norm",":","feature","normalization","type","and","arguments",".","Defaults","to","instance","norm",".","adn_ordering",":","a","string","representing","the","ordering","of","activation","(","A",")",",","normalization","(","N",")",",","and","dropout","(","D",")",".","Defaults","to","``","NA","''",".","See","also",":",":","py",":","class",":","`","monai.networks.blocks.ADN","`",".","Examples",":",":","from","monai.networks.nets","import","QuickNAT","#","network","with","max","pooling","by","a","factor","of","2","at","each","layer","with","no","se_block",".","net","=","QuickNAT","(","num_classes=3",",","num_channels=1",",","num_filters=64",",","pool","=","2",",","se_block","=","``","None","''",")"]
code: def forward(self, input: torch.Tensor) -> torch.Tensor:
      input, _ = self.model(input, None)
      return input
  
imports: from __future__ import annotations
  from typing import Optional, Sequence, Tuple, Union
  import torch
  import torch.nn
  import torch.nn.functional
  from monai.networks.blocks import ConvDenseBlock, Convolution
  from monai.networks.blocks import squeeze_and_excitation
  from monai.networks.layers.factories import Act, Norm
  from monai.networks.layers.simplelayers import SkipConnection
  from monai.networks.layers.utils import get_dropout_layer, get_pool_layer
  from monai.utils import optional_import
label_desc: Use image node_id 4 for calling the Quicknat obj's underlying member method code with example usage: obj.forward(input) and returns: input