          logger.debug("Launched Masker")
  
      def _set_extractor_batchsize(self):
          """
          Sets the batchsize of the requested plugins based on their vram and
          vram_per_batch_requirements if the the configured batchsize requires more
          vram than is available. Nvidia only.
          """
          if get_backend() != "nvidia":
              logger.debug("Backend is not Nvidia. Not updating batchsize requirements")
              return
 
</s> remove     def _launch_detector(self):
        """ Launch the face detector """
        logger.debug("Launching Detector")
        kwargs = dict(in_queue=self._queues["extract_detect_in"],
                      out_queue=self._queues["extract_align_in"])
        self._detector.initialize(**kwargs)
        self._detector.start()
        logger.debug("Launched Detector")

    def _launch_aligner(self):
        """ Launch the face aligner """
        logger.debug("Launching Aligner")
        kwargs = dict(in_queue=self._queues["extract_align_in"],
                      out_queue=self._queues["extract_mask_in"])
        self._aligner.initialize(**kwargs)
        self._aligner.start()
        logger.debug("Launched Aligner")

    def _launch_masker(self):
        """ Launch the face masker """
        logger.debug("Launching Masker")
        kwargs = dict(in_queue=self._queues["extract_mask_in"],
                      out_queue=self._queues["extract_mask_out"])
        self._masker.initialize(**kwargs)
        self._masker.start()
        logger.debug("Launched Masker")
 </s> add     def _launch_plugin(self, phase):
        """ Launch an extraction plugin """
        logger.debug("Launching %s plugin", phase)
        in_qname = "extract_{}_in".format(phase)
        if phase == self._final_phase:
            out_qname = "extract_{}_out".format(self._final_phase)
        else:
            next_phase = self._flow[self._flow.index(phase) + 1]
            out_qname = "extract_{}_in".format(next_phase)
        logger.debug("in_qname: %s, out_qname: %s", in_qname, out_qname)
        kwargs = dict(in_queue=self._queues[in_qname], out_queue=self._queues[out_qname])

        plugin = getattr(self, "_{}".format(phase))
        plugin.initialize(**kwargs)
        plugin.start()
        logger.debug("Launched %s plugin", phase) </s> remove         if self._detector.vram == 0 and self._aligner.vram == 0 and self._masker.vram == 0:
            logger.debug("Either detector, aligner or masker have no VRAM requirements. Not "
                         "updating batchsize requirements.")
 </s> add         if sum([plugin.vram for plugin in self._all_plugins]) == 0:
            logger.debug("No plugins use VRAM. Not updating batchsize requirements.") </s> remove         """ Set the batchsize for the given plugin based on given available vram """
 </s> add         """ Set the batch size for the given plugin based on given available vram """ </s> remove         """ Set the batchsize of a given :attr:`plugin_type` to the given :attr:`batchsize`.
 </s> add         """ Set the batch size of a given :attr:`plugin_type` to the given :attr:`batchsize`. </s> remove         This should be set prior to :func:`launch` if the batchsize is to be manually overriden
 </s> add         This should be set prior to :func:`launch` if the batch size is to be manually overridden
        Sets the batch size of the requested plugins based on their vram and
        vram_per_batch_requirements if the the configured batch size requires more
          logger.debug("Launched Masker")
  
      def _set_extractor_batchsize(self):
          """
        Sets the batch size of the requested plugins based on their vram and
        vram_per_batch_requirements if the the configured batch size requires more
        Sets the batch size of the requested plugins based on their vram and
        vram_per_batch_requirements if the the configured batch size requires more
          vram than is available. Nvidia only.
          """
          if get_backend() != "nvidia":
              logger.debug("Backend is not Nvidia. Not updating batchsize requirements")
              return
keep keep keep keep replace replace keep keep keep keep keep
 Smart Mask - Extract code review

- Lint simple_tests.py
- Only reformat alignments file if it exists otherwise change filename
- Update legacy alignments to new format at all stages
- faces_detect.Mask.from_dict - logging format fix
- convert.py fix otf for new pipeline
- cli.py - Add note that masks not used. Revert convert masks
- faces_detect.py - Revert non-extract code
- Add .p and .pickle extensions for serializer
- plugins/extract revert some changes
- scripts/fsmedia - Revert code changes
- Pipeline - cleanup
- Consistant alpha channel stripping (fixes single-process)
- Store landmarks as numpy array
- Code attribution
- Normalize feed face and reference face to 0.0 - 1.0 in convert
- Lock in mask VRAM sized
- Add documentation to plugin_loader
- Update alignments tool to work with new format 
plugins/extract/pipeline.py