content: if __name__ == '__main__':
      from nnunetv2.paths import nnUNet_results, nnUNet_raw
      import torch
      from batchgenerators.utilities.file_and_folder_operations import join
      from nnunetv2.inference.predict_from_raw_data import nnUNetPredictor
      from nnunetv2.imageio.simpleitk_reader_writer import SimpleITKIO
  
      # nnUNetv2_predict -d 3 -f 0 -c 3d_lowres -i imagesTs -o imagesTs_predlowres --continue_prediction
  
      # instantiate the nnUNetPredictor
      predictor = nnUNetPredictor(
          tile_step_size=0.5,
          use_gaussian=True,
          use_mirroring=True,
          perform_everything_on_device=True,
          device=torch.device('cuda', 0),
          verbose=False,
          verbose_preprocessing=False,
          allow_tqdm=True
      )
      # initializes the network architecture, loads the checkpoint
      predictor.initialize_from_trained_model_folder(
          join(nnUNet_results, 'Dataset003_Liver/nnUNetTrainer__nnUNetPlans__3d_lowres'),
          use_folds=(0,),
          checkpoint_name='checkpoint_final.pth',
      )
      # variant 1: give input and output folders
      predictor.predict_from_files(join(nnUNet_raw, 'Dataset003_Liver/imagesTs'),
                                   join(nnUNet_raw, 'Dataset003_Liver/imagesTs_predlowres'),
                                   save_probabilities=False, overwrite=False,
                                   num_processes_preprocessing=2, num_processes_segmentation_export=2,
                                   folder_with_segs_from_prev_stage=None, num_parts=1, part_id=0)
  
      # variant 2, use list of files as inputs. Note how we use nested lists!!!
      indir = join(nnUNet_raw, 'Dataset003_Liver/imagesTs')
      outdir = join(nnUNet_raw, 'Dataset003_Liver/imagesTs_predlowres')
      predictor.predict_from_files([[join(indir, 'liver_152_0000.nii.gz')],
                                    [join(indir, 'liver_142_0000.nii.gz')]],
                                   [join(outdir, 'liver_152.nii.gz'),
                                    join(outdir, 'liver_142.nii.gz')],
                                   save_probabilities=False, overwrite=True,
                                   num_processes_preprocessing=2, num_processes_segmentation_export=2,
                                   folder_with_segs_from_prev_stage=None, num_parts=1, part_id=0)
  
      # variant 2.5, returns segmentations
      indir = join(nnUNet_raw, 'Dataset003_Liver/imagesTs')
      predicted_segmentations = predictor.predict_from_files([[join(indir, 'liver_152_0000.nii.gz')],
                                                              [join(indir, 'liver_142_0000.nii.gz')]],
                                                             None,
                                                             save_probabilities=True, overwrite=True,
                                                             num_processes_preprocessing=2,
                                                             num_processes_segmentation_export=2,
                                                             folder_with_segs_from_prev_stage=None, num_parts=1,
                                                             part_id=0)
  
      # predict several npy images
      from nnunetv2.imageio.simpleitk_reader_writer import SimpleITKIO
  
      img, props = SimpleITKIO().read_images([join(nnUNet_raw, 'Dataset003_Liver/imagesTs/liver_147_0000.nii.gz')])
      img2, props2 = SimpleITKIO().read_images([join(nnUNet_raw, 'Dataset003_Liver/imagesTs/liver_146_0000.nii.gz')])
      img3, props3 = SimpleITKIO().read_images([join(nnUNet_raw, 'Dataset003_Liver/imagesTs/liver_145_0000.nii.gz')])
      img4, props4 = SimpleITKIO().read_images([join(nnUNet_raw, 'Dataset003_Liver/imagesTs/liver_144_0000.nii.gz')])
      # we do not set output files so that the segmentations will be returned. You can of course also specify output
      # files instead (no return value on that case)
      ret = predictor.predict_from_list_of_npy_arrays([img, img2, img3, img4],
                                                      None,
                                                      [props, props2, props3, props4],
                                                      None, 2, save_probabilities=False,
                                                      num_processes_segmentation_export=2)
  
      # predict a single numpy array
      img, props = SimpleITKIO().read_images([join(nnUNet_raw, 'Dataset003_Liver/imagesTs/liver_147_0000.nii.gz')])
      ret = predictor.predict_single_npy_array(img, props, None, None, True)
  
      # custom iterator
  
      img, props = SimpleITKIO().read_images([join(nnUNet_raw, 'Dataset003_Liver/imagesTs/liver_147_0000.nii.gz')])
      img2, props2 = SimpleITKIO().read_images([join(nnUNet_raw, 'Dataset003_Liver/imagesTs/liver_146_0000.nii.gz')])
      img3, props3 = SimpleITKIO().read_images([join(nnUNet_raw, 'Dataset003_Liver/imagesTs/liver_145_0000.nii.gz')])
      img4, props4 = SimpleITKIO().read_images([join(nnUNet_raw, 'Dataset003_Liver/imagesTs/liver_144_0000.nii.gz')])
  
  
      # each element returned by data_iterator must be a dict with 'data', 'ofile' and 'data_properties' keys!
      # If 'ofile' is None, the result will be returned instead of written to a file
      # the iterator is responsible for performing the correct preprocessing!
      # note how the iterator here does not use multiprocessing -> preprocessing will be done in the main thread!
      # take a look at the default iterators for predict_from_files and predict_from_list_of_npy_arrays
      # (they both use predictor.predict_from_data_iterator) for inspiration!
      def my_iterator(list_of_input_arrs, list_of_input_props):
          preprocessor = predictor.configuration_manager.preprocessor_class(verbose=predictor.verbose)
          for a, p in zip(list_of_input_arrs, list_of_input_props):
              data, seg, p = preprocessor.run_case_npy(a,
                                                    None,
                                                    p,
                                                    predictor.plans_manager,
                                                    predictor.configuration_manager,
                                                    predictor.dataset_json)
              yield {'data': torch.from_numpy(data).contiguous().pin_memory(), 'data_properties': p, 'ofile': None}
  
  
      ret = predictor.predict_from_data_iterator(my_iterator([img, img2, img3, img4], [props, props2, props3, props4]),
                                                 save_probabilities=False, num_processes_segmentation_export=3)
  