code: def _get_raw_predictions(self, images):
      self._model.eval()
  
      with torch.no_grad():
          # Convert image into a list of length 1 if not already a list
          if not _is_iterable(images):
              images = [images]
  
          # Convert to tensor and normalize if not already
          if not isinstance(images[0], torch.Tensor):
              # This is a temporary workaround to the bad accuracy
              # when normalizing on default weights. Will need to
              # investigate further TODO
              if self._disable_normalize:
                  defaults = transforms.Compose([transforms.ToTensor()])
              else:
                  defaults = default_transforms()
              images = [defaults(img) for img in images]
  
          # Send images to the specified device
          images = [img.to(self._device) for img in images]
  
          preds = self._model(images)
          # Send predictions to CPU if not already
          preds = [
              {k: v.to(torch.device("cpu")) for k, v in p.items()}
              for p in preds
          ]
          return preds
  
imports: import os
  import pandas
  import random
  import torch
  import torchvision
  from detecto.config import config
  from detecto.utils import default_transforms, filter_top_predictions, xml_to_csv, _is_iterable, read_image
  from torchvision import transforms
  from torchvision.models.detection.faster_rcnn import FastRCNNPredictor
  from tqdm import tqdm
label_desc: Use image node_id 2 for calling the Model obj's underlying member method code with example usage: obj._get_raw_predictions(images) and returns: preds