def make_eval_dataloader(
        self,
        num_workers=0,
        shuffle=False,
        pin_memory=None,
        persistent_workers=False,
        drop_last=False,
        **kwargs
    ):
        """
        Initializes the eval data loader.
        :param num_workers: How many subprocesses to use for data loading.
            0 means that the data will be loaded in the main process.
            (default: 0).
        :param pin_memory: If True, the data loader will copy Tensors into CUDA
            pinned memory before returning them. Defaults to True.
        :param kwargs:
        :return:
        """

        assert self.adapted_dataset is not None

        other_dataloader_args = self._obtain_common_dataloader_parameters(
            batch_size=self.eval_mb_size,
            num_workers=num_workers,
            shuffle=shuffle,
            pin_memory=pin_memory,
            persistent_workers=persistent_workers,
            drop_last=drop_last,
            **kwargs
        )

        collate_from_data_or_kwargs(self.adapted_dataset, other_dataloader_args)

        self.dataloader = DataLoader(self.adapted_dataset, **other_dataloader_args)

        Initializes the eval data loader.
        :param num_workers: How many subprocesses to use for data loading.
            0 means that the data will be loaded in the main process.
            (default: 0).
        :param pin_memory: If True, the data loader will copy Tensors into CUDA
            pinned memory before returning them. Defaults to True.
        :param kwargs:
        :return:
        
avalanche/training/supervised/naive_object_detection.py