      def join(self, timeout=None):
          """ Add logging to join function """
          logger.debug("Joining Process: (name: '%s', PID: %s)", self._name, self.pid)
          super().join(timeout=timeout)
          _launched_processes.remove(self)
          logger.debug("Joined Process: (name: '%s', PID: %s)", self._name, self.pid)
  
  
  class FSThread(threading.Thread):
      """ Subclass of thread that passes errors back to parent """
 
</s> remove     def __init__(self, loglevel, model_filename=None, colorspace="BGR", input_size=256):
        logger.debug("Initializing %s: (model_filename: '%s', colorspace: '%s'. input_size: %s)",
                     self.__class__.__name__, model_filename, colorspace, input_size)
 </s> add     def __init__(self, loglevel,
                 git_model_id=None, model_filename=None, colorspace="BGR", input_size=256):
        logger.debug("Initializing %s: (loglevel: %s, git_model_id: %s, model_filename: '%s', "
                     "colorspace: '%s'. input_size: %s)", self.__class__.__name__, loglevel,
                     git_model_id, model_filename, colorspace, input_size) </s> remove     def __init__(self, loglevel, model_filename=None, rotation=None, min_size=0):
        logger.debug("Initializing %s: (model_filename: %s, rotation: %s, min_size: %s)",
                     self.__class__.__name__, model_filename, rotation, min_size)
 </s> add     def __init__(self, loglevel,
                 git_model_id=None, model_filename=None, rotation=None, min_size=0):
        logger.debug("Initializing %s: (loglevel: %s, git_model_id: %s, model_filename: %s, "
                     "rotation: %s, min_size: %s)", self.__class__.__name__, loglevel,
                     git_model_id, model_filename, rotation, min_size) </s> remove     def output_faces(self, filename, faces, save_queue):
 </s> add     def output_faces(self, filename, faces): </s> remove     """ Face filter for extraction """
    def __init__(self, reference_file_paths, nreference_file_paths, threshold=0.6):
 </s> add     """ Face filter for extraction
        NB: we take only first face, so the reference file should only contain one face. """

    def __init__(self, reference_file_paths, nreference_file_paths, detector, aligner, loglevel,
                 multiprocess=False, threshold=0.4):
 </s> remove                     logger.info("You can manually download the model from: %s and unzip the "
                                "contents to: %s", self._url_download, self.cache_dir)
 </s> add                     logger.info("You can try running again to resume the download.")
                    logger.info("Alternatively, you can manually download the model from: %s and "
                                "unzip the contents to: %s", self._url_download, self.cache_dir)
        if self in _launched_processes:
            _launched_processes.remove(self)
      def join(self, timeout=None):
          """ Add logging to join function """
          logger.debug("Joining Process: (name: '%s', PID: %s)", self._name, self.pid)
          super().join(timeout=timeout)
        if self in _launched_processes:
            _launched_processes.remove(self)
          logger.debug("Joined Process: (name: '%s', PID: %s)", self._name, self.pid)
  
  
  class FSThread(threading.Thread):
      """ Subclass of thread that passes errors back to parent """
keep keep keep keep replace keep keep keep keep keep
 Face filter vgg face (#724)

* Implement extraction pipeline

* Face filter to vgg_face. Resume partial model downloads

* On-the-fly conversion to extraction pipeline

* Move git model ids from get_model to model definition 
lib/multithreading.py