              yield faces
          self._join_threads()
          if self.final_pass:
              # Cleanup queues
              for q_name in self._queues.keys():
                  queue_manager.del_queue(q_name)
              logger.debug("Detection Complete")
          else:
              self.phase = "align" if self.phase == "detect" else "mask"
              logger.debug("Switching to %s phase", self.phase)
 
</s> remove             self.phase = "align" if self.phase == "detect" else "mask"
 </s> add             self.phase = self._next_phase </s> remove             retval = [None]
 </s> add             retval = [getattr(self, "_{}".format(self.phase))] </s> remove             retval = [self._detector, self._aligner, self._masker]
        elif self.passes == 3 and self.phase == 'detect':
            retval = [self._detector]
        elif self.passes == 3 and self.phase == 'align':
            retval = [self._aligner]
        elif self.passes == 3 and self.phase == 'mask':
            retval = [self._masker]
 </s> add             retval = self._all_plugins </s> remove         retval = self._is_parallel or self.phase == "mask"
 </s> add         retval = self._is_parallel or self.phase == self._final_phase </s> remove         >>>                                    "image": np.array(image),
 </s> add         >>>                                    "image": numpy.array(image),
            for q_name in self._queues:
              yield faces
          self._join_threads()
          if self.final_pass:
              # Cleanup queues
            for q_name in self._queues:
                  queue_manager.del_queue(q_name)
              logger.debug("Detection Complete")
          else:
              self.phase = "align" if self.phase == "detect" else "mask"
              logger.debug("Switching to %s phase", self.phase)
keep keep keep keep 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