class_docstr: Feature Extractor module for Region-based anomaly detection.
code: def __init__(self) -> None:
      super().__init__()
  
      self.transform = nn.Sequential(
          Resize(size=600, max_size=1000),
          Normalize(
              mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]
          ),
      )
  
      self.features = nn.Sequential(
          nn.Conv2d(3, 64, kernel_size=11, stride=4, padding=2),
          nn.ReLU(inplace=True),
          nn.MaxPool2d(kernel_size=3, stride=2),
          nn.Conv2d(64, 192, kernel_size=5, padding=2),
          nn.ReLU(inplace=True),
          nn.MaxPool2d(kernel_size=3, stride=2),
          nn.Conv2d(192, 384, kernel_size=3, padding=1),
          nn.ReLU(inplace=True),
          nn.Conv2d(384, 256, kernel_size=3, padding=1),
          nn.ReLU(inplace=True),
          nn.Conv2d(256, 256, kernel_size=3, padding=1),
          nn.ReLU(inplace=True),
      )
  
      self.roi_align = RoIAlign(
          output_size=(6, 6), spatial_scale=1 / 16, sampling_ratio=0
      )
  
      self.classifier = nn.Sequential(
          nn.Linear(256 * 6 * 6, 4096),
          nn.ReLU(inplace=True),
          nn.Linear(4096, 4096),
          nn.ReLU(inplace=True),
      )
  
      # load the pre-trained weights from url
      self.load_state_dict(
          torch.hub.load_state_dict_from_url(
              WEIGHTS_URL, progress=False
          )
      )
  
file_path: anomalib/src/anomalib/models/rkde/feature_extractor.py
imports: import torch
  from torch import Tensor, nn
  from torchvision.ops import RoIAlign
  from torchvision.transforms import Normalize, Resize
  from anomalib.data.utils.boxes import scale_boxes
label_desc: Use image node_id 1 to create a new FeatureExtractor object from inherited base classes: nn with example: obj = FeatureExtractor()