class_docstr: This is the original implementation ConvTranspose2d (fixed) and crops
code: def __init__(
      self,
      num_output,
      kernel_sz=None,
      stride=None,
      upconv_pad=0,
      do_crops=True,
  ):
      super(SideOutputCrop, self).__init__()
      self._do_crops = do_crops
      self.conv = nn.Conv2d(
          num_output,
          out_channels=1,
          kernel_size=1,
          stride=1,
          padding=0,
          bias=True,
      )
  
      if kernel_sz is not None:
          self.upsample = True
          self.upsampled = nn.ConvTranspose2d(
              1,
              out_channels=1,
              kernel_size=kernel_sz,
              stride=stride,
              padding=upconv_pad,
              bias=False,
          )
          ##doing crops
          if self._do_crops:
              self.crops = Crop(2, offset=kernel_sz // 4)
          else:
              self.crops = MyIdentity(None, None)
      else:
          self.upsample = False
  
imports: import torch
  import torch.nn.functional
  from torch import nn
  from .None import Resnet
  from .wider_resnet import wider_resnet38_a2
  from .mynn import initialize_weights, Norm2d
  from torch.autograd import Variable
  from .my_functionals import GatedSpatialConv
  import cv2
  import numpy
label_desc: Use image node_id 1 to create a new SideOutputCrop object from inherited base classes: nn with example: obj = SideOutputCrop(num_output, kernel_sz, stride, upconv_pad, do_crops)