class_docstr: SSPCAB block.
  
  Args:
      in_channels (int): Number of input channels.
      kernel_size (int): Size of the receptive fields of the masked convolution kernel.
      dilation (int): Dilation factor of the masked convolution kernel.
      reduction_ratio (int): Reduction ratio of the attention module.
code: def __init__(
      self,
      in_channels: int,
      kernel_size: int = 1,
      dilation: int = 1,
      reduction_ratio: int = 8,
  ):
      super().__init__()
  
      self.pad = kernel_size + dilation
      self.crop = kernel_size + 2 * dilation + 1
  
      self.masked_conv1 = nn.Conv2d(
          in_channels=in_channels,
          out_channels=in_channels,
          kernel_size=kernel_size,
      )
      self.masked_conv2 = nn.Conv2d(
          in_channels=in_channels,
          out_channels=in_channels,
          kernel_size=kernel_size,
      )
      self.masked_conv3 = nn.Conv2d(
          in_channels=in_channels,
          out_channels=in_channels,
          kernel_size=kernel_size,
      )
      self.masked_conv4 = nn.Conv2d(
          in_channels=in_channels,
          out_channels=in_channels,
          kernel_size=kernel_size,
      )
  
      self.attention_module = AttentionModule(
          in_channels=in_channels, reduction_ratio=reduction_ratio
      )
  
file_path: anomalib/src/anomalib/models/components/layers/sspcab.py
imports: import torch
  import torch.nn.functional
  from torch import Tensor, nn
label_desc: Use image node_id 1 to create a new SSPCAB object from inherited base classes: nn with example: obj = SSPCAB(in_channels, kernel_size, dilation, reduction_ratio)