          >>>         <do processing>
          """
  
          if self._is_parallel:
              self._launch_detector()
              self._launch_aligner()
              self._launch_masker()
          elif self.phase == "detect":
              self._launch_detector()
          elif self.phase == "align":
              self._launch_aligner()
          elif self.phase == "mask":
              self._launch_masker()
  
      def detected_faces(self):
          """ Generator that returns results, frame by frame from the extraction pipeline
  
          This is the exit point for the extraction pipeline and is used to obtain the output
 
</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 = [None]
 </s> add             retval = [getattr(self, "_{}".format(self.phase))] </s> remove         >>>                                    "image": np.array(image),
 </s> add         >>>                                    "image": numpy.array(image), </s> remove         retval = self._is_parallel or self.phase == "mask"
 </s> add         retval = self._is_parallel or self.phase == self._final_phase </s> remove         """ Convert the image to the correct color format """
 </s> add         """ Convert the image to the correct color format and strip alpha channel """
            for phase in self._flow:
                self._launch_plugin(phase)
        else:
            self._launch_plugin(self.phase)
          >>>         <do processing>
          """
  
          if self._is_parallel:
            for phase in self._flow:
                self._launch_plugin(phase)
        else:
            self._launch_plugin(self.phase)
            for phase in self._flow:
                self._launch_plugin(phase)
        else:
            self._launch_plugin(self.phase)
            for phase in self._flow:
                self._launch_plugin(phase)
        else:
            self._launch_plugin(self.phase)
            for phase in self._flow:
                self._launch_plugin(phase)
        else:
            self._launch_plugin(self.phase)
            for phase in self._flow:
                self._launch_plugin(phase)
        else:
            self._launch_plugin(self.phase)
            for phase in self._flow:
                self._launch_plugin(phase)
        else:
            self._launch_plugin(self.phase)
            for phase in self._flow:
                self._launch_plugin(phase)
        else:
            self._launch_plugin(self.phase)
            for phase in self._flow:
                self._launch_plugin(phase)
        else:
            self._launch_plugin(self.phase)
            for phase in self._flow:
                self._launch_plugin(phase)
        else:
            self._launch_plugin(self.phase)
  
      def detected_faces(self):
          """ Generator that returns results, frame by frame from the extraction pipeline
  
          This is the exit point for the extraction pipeline and is used to obtain the output
keep keep keep keep replace replace replace replace replace replace replace 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