  
              model = self.load_model()
              trainer = self.load_trainer(model)
  
              self.timelapse = Timelapse.CreateTimelapse(self.args.timelapse_input_A,
                                                         self.args.timelapse_input_B,
                                                         self.args.timelapse_output,
                                                         trainer)
  
              self.run_training_cycle(model, trainer)
          except KeyboardInterrupt:
              try:
                  model.save_weights()
 
</s> remove         return Timelapse(input_dir_A, input_dir_B, output_dir, trainer)
 </s> add         return Timelapse(input_dir_a, input_dir_b, output_dir, trainer) </s> remove     def __init__(self, input_dir_A, input_dir_B, output, trainer):
 </s> add     def __init__(self, input_dir_a, input_dir_b, output, trainer): </s> remove             self.generate_alignments()

        self.faces.faces_detected = self.alignments.read_alignments()
 </s> add             self.load_extractor() </s> remove         self.trainer_name = "LowMem" if trainer_name.lower() == "lowmem" else trainer_name
 </s> add         self.trainer_name = trainer_name
        if trainer_name.lower() == "lowmem":
            self.trainer_name = "LowMem" </s> remove             output_dir = get_folder(os.path.join(trainer.model.model_dir, "timelapse"))
 </s> add             output_dir = get_folder(os.path.join(trainer.model.model_dir,
                                                 "timelapse"))
            self.timelapse = Timelapse.create_timelapse(
                self.args.timelapse_input_A,
                self.args.timelapse_input_B,
                self.args.timelapse_output,
                trainer)
  
              model = self.load_model()
              trainer = self.load_trainer(model)
  
            self.timelapse = Timelapse.create_timelapse(
                self.args.timelapse_input_A,
                self.args.timelapse_input_B,
                self.args.timelapse_output,
                trainer)
            self.timelapse = Timelapse.create_timelapse(
                self.args.timelapse_input_A,
                self.args.timelapse_input_B,
                self.args.timelapse_output,
                trainer)
            self.timelapse = Timelapse.create_timelapse(
                self.args.timelapse_input_A,
                self.args.timelapse_input_B,
                self.args.timelapse_output,
                trainer)
            self.timelapse = Timelapse.create_timelapse(
                self.args.timelapse_input_A,
                self.args.timelapse_input_B,
                self.args.timelapse_output,
                trainer)
  
              self.run_training_cycle(model, trainer)
          except KeyboardInterrupt:
              try:
                  model.save_weights()
keep keep keep keep replace replace replace replace keep keep keep keep keep
 Extraction - Speed improvements (#522) (#523)

* Extraction - Speed improvements (#522)

* Initial Plugin restructure

* Detectors to plugins. Detector speed improvements

* Re-implement dlib aligner, remove models, FAN to TF. Parallel processing

* Update manual, update convert, implement parallel/serial switching

* linting + fix cuda check (setup.py). requirements update keras 2.2.4

* Add extract size option. Fix dlib hog init

* GUI: Increase tooltip width

* Update alignment tool to support new DetectedFace

* Add skip existing faces option

* Fix sort tool to new plugin structure

* remove old align plugin

* fix convert -skip faces bug

* Fix convert skipping no faces frames

* Convert - draw onto transparent layer

* Fix blur threshold bug

* fix skip_faces convert bug

* Fix training 
scripts/train.py