          self._vram_buffer = 320  # Leave a buffer for VRAM allocation
          self._detector = self._load_detector(detector, rotate_images, min_size, configfile)
          self._aligner = self._load_aligner(aligner, configfile, normalize_method)
          self._is_parallel = self._set_parallel_processing(multiprocess)
          self._set_extractor_batchsize()
          self._queues = self._add_queues()
          logger.debug("Initialized %s", self.__class__.__name__)
  
      @property
 
</s> remove     def __init__(self, detector, aligner,
                 configfile=None, multiprocess=False, rotate_images=None, min_size=20,
                 normalize_method=None):
        logger.debug("Initializing %s: (detector: %s, aligner: %s, configfile: %s, "
                     "multiprocess: %s, rotate_images: %s, min_size: %s, "
                     "normalize_method: %s)", self.__class__.__name__, detector, aligner,
                     configfile, multiprocess, rotate_images, min_size, normalize_method)
 </s> add     def __init__(self, detector, aligner, masker, configfile=None,
                 multiprocess=False, rotate_images=None, min_size=20,
                 normalize_method=None, input_size=256, output_size=256, coverage_ratio=1.):
        logger.debug("Initializing %s: (detector: %s, aligner: %s, masker: %s, "
                     "configfile: %s, multiprocess: %s, rotate_images: %s, min_size: %s, "
                     "normalize_method: %s, input_size: %s, output_size: %s, coverage_ratio: %s)",
                     self.__class__.__name__, detector, aligner, masker, configfile,
                     multiprocess, rotate_images, min_size, normalize_method, input_size,
                     output_size, coverage_ratio) </s> remove         if self._is_parallel or self.phase == "detect":
            qname = "extract_detect_in"
        else:
            qname = "extract_align_in"
 </s> add         qname_dict = dict(detect="extract_detect_in",
                          align="extract_align_in",
                          mask="extract_mask_in")
        qname = "extract_detect_in" if self._is_parallel else qname_dict[self.phase] </s> remove         self.align_faces("cv2-dnn", "cv2-dnn", multiprocess)
 </s> add         self.align_faces("cv2-dnn", "cv2-dnn", "none", multiprocess)
 </s> remove         retval = 1 if self._is_parallel else 2
 </s> add         retval = 1 if self._is_parallel else 3 </s> remove         qname = "extract_align_out" if self.final_pass else "extract_align_in"
 </s> add         qname_dict = dict(detect="extract_align_in",
                          align="extract_mask_in",
                          mask="extract_mask_out")
        qname = "extract_mask_out" if self.final_pass else qname_dict[self.phase]
        self._masker = self._load_masker(masker,
                                         configfile,
                                         input_size,
                                         output_size,
                                         coverage_ratio)
          self._vram_buffer = 320  # Leave a buffer for VRAM allocation
          self._detector = self._load_detector(detector, rotate_images, min_size, configfile)
          self._aligner = self._load_aligner(aligner, configfile, normalize_method)
        self._masker = self._load_masker(masker,
                                         configfile,
                                         input_size,
                                         output_size,
                                         coverage_ratio)
          self._is_parallel = self._set_parallel_processing(multiprocess)
          self._set_extractor_batchsize()
          self._queues = self._add_queues()
          logger.debug("Initialized %s", self.__class__.__name__)
  
      @property
keep keep add keep keep keep keep keep keep
 Smart Mask Exposure for Extraction & Training (#831)

Smart Masks - Initial Commit 
plugins/extract/pipeline.py