Firstly regarding the transform, FasterRCNN has a GeneralizedRCNNTransform module in the beginning which normalizes the input image.

  
      github.com
  
  
    pytorch/vision/blob/master/torchvision/models/detection/transform.py#L46 2

def forward(self, images, targets=None):
    # type: (List[Tensor], Optional[List[Dict[str, Tensor]]])
    images = [img for img in images]
    for i in range(len(images)):
        image = images[i]
        target_index = targets[i] if targets is not None else None


        if image.dim() != 3:
            raise ValueError("images is expected to be a list of 3d tensors "
                             "of shape [C, H, W], got {}".format(image.shape))
        image = self.normalize(image)
        image, target_index = self.resize(image, target_index)
        images[i] = image
        if targets is not None and target_index is not None:
            targets[i] = target_index


    image_sizes = [img.shape[-2:] for img in images]
    images = self.batch_images(images)
    image_sizes_list = torch.jit.annotate(List[Tuple[int, int]], [])
    for image_size in image_sizes:
        assert len(image_size) == 2



  
  
    
    
  
  


Do you feed 3-channel(RGB) images as input or do you convert them into grayscale? FasterRCNN expects a 3-channel input image.