                      self._model.command_line_arguments.warp_to_landmarks]):
              return retval
  
          alignments = _TrainingAlignments(self._model, self._images)
  
          if self._model.command_line_arguments.warp_to_landmarks:
              logger.debug("Adding landmarks to training opts dict")
              retval["landmarks"] = alignments.landmarks
  
          if self._model.config["learn_mask"] or penalized_loss:
              logger.debug("Adding masks to training opts dict")
              retval["masks"] = alignments.masks
  
 
</s> remove         if not any([self._model.config["learn_mask"],
                    penalized_loss,
                    self._model.config["eye_multiplier"] > 1,
                    self._model.config["mouth_multiplier"] > 1,
                    self._model.command_line_arguments.warp_to_landmarks]):
            return retval

 </s> add  </s> remove     def _get_landmarks(self):
        """ Pre-generate landmarks as they are needed for both warp to landmarks and eye/mouth
        masks.
 </s> add     def _get_aligned_faces(self):
        """ Pre-generate aligned faces as they are needed for all training functions. </s> remove             retval[side] = self._to_detected_faces(alignments, side)
        logger.debug("Returning: %s", {k: len(v) for k, v in retval.items()})
        return retval
 </s> add             self._detected_faces[side] = self._to_detected_faces(alignments, side)
            self._alignments_version[side] = alignments.version
        logger.debug("alignments_versions: %s, detected_faces: %s, ", self._alignments_version,
                     {k: len(v) for k, v in self._detected_faces.items()}) </s> remove         A dictionary containing landmarks and masks if these are required for training for each
        side
 </s> add         A dictionary containing aligned face data, extract version information and masks if these
        are required for training for each side </s> remove             feed_dict = dict(filename=fname, image=img["image"])
            if img.get("detected_faces", None):
                feed_dict["detected_faces"] = img["detected_faces"]
            logger.debug("Queueing filename: '%s' items: %s",
                         fname, list(feed_dict.keys()))
 </s> add             feed_dict = ExtractMedia(fname, img["image"], detected_faces=img.get("detected_faces"))
            logger.debug("Queueing filename: '%s' items: %s", fname, feed_dict)

        if (any(version == 1.0 for version in alignments.versions.values())
                and self._config["centering"] != "legacy"):
            logger.warning("You are using legacy extracted faces but have selected '%s' "
                           "centering which is incompatible. Switching centering to 'legacy'",
                           self._config["centering"])
            self._config["centering"] = "legacy"
            self._model.config["centering"] = "legacy"
        retval = dict(aligned_faces=alignments.aligned_faces,
                      versions=alignments.versions)
                      self._model.command_line_arguments.warp_to_landmarks]):
              return retval
  
          alignments = _TrainingAlignments(self._model, self._images)
        if (any(version == 1.0 for version in alignments.versions.values())
                and self._config["centering"] != "legacy"):
            logger.warning("You are using legacy extracted faces but have selected '%s' "
                           "centering which is incompatible. Switching centering to 'legacy'",
                           self._config["centering"])
            self._config["centering"] = "legacy"
            self._model.config["centering"] = "legacy"
        retval = dict(aligned_faces=alignments.aligned_faces,
                      versions=alignments.versions)
        if (any(version == 1.0 for version in alignments.versions.values())
                and self._config["centering"] != "legacy"):
            logger.warning("You are using legacy extracted faces but have selected '%s' "
                           "centering which is incompatible. Switching centering to 'legacy'",
                           self._config["centering"])
            self._config["centering"] = "legacy"
            self._model.config["centering"] = "legacy"
        retval = dict(aligned_faces=alignments.aligned_faces,
                      versions=alignments.versions)
        if (any(version == 1.0 for version in alignments.versions.values())
                and self._config["centering"] != "legacy"):
            logger.warning("You are using legacy extracted faces but have selected '%s' "
                           "centering which is incompatible. Switching centering to 'legacy'",
                           self._config["centering"])
            self._config["centering"] = "legacy"
            self._model.config["centering"] = "legacy"
        retval = dict(aligned_faces=alignments.aligned_faces,
                      versions=alignments.versions)
        if (any(version == 1.0 for version in alignments.versions.values())
                and self._config["centering"] != "legacy"):
            logger.warning("You are using legacy extracted faces but have selected '%s' "
                           "centering which is incompatible. Switching centering to 'legacy'",
                           self._config["centering"])
            self._config["centering"] = "legacy"
            self._model.config["centering"] = "legacy"
        retval = dict(aligned_faces=alignments.aligned_faces,
                      versions=alignments.versions)
  
          if self._model.config["learn_mask"] or penalized_loss:
              logger.debug("Adding masks to training opts dict")
              retval["masks"] = alignments.masks
  
keep keep keep keep replace replace replace replace keep keep keep keep keep
 Extract - Increase area and move centering (#1095)

* Extract
  - Implement aligner re-feeding
  - Add extract type to pipeline.ExtractMedia
  - Add pose annotation to debug
* Convert
  - implement centering
  - remove usage of feed and reference face properties
  - Remove distributed option from convert
  - Force update of alignments file on legacy receive
* Train
  - Resize preview image to model output size
  - Force legacy centering if centering does not exist in model's state file
  - Enable training on legacy face sets

* Alignments Tool
  - Update draw to include head/pose
  - Remove DFL drop + linting
  - Remove remove-frames job
  - remove align-eyes option
  - Update legacy masks to new extract type
  - Exit if attempting to merge version 1.0 alignments files with version 2.0 alignments files
  - Re-generate thumbnails on legacy upgrade
* Mask Tool
  - Update for new extract + bugfix full frame
* Manual Tool
  - Update to new extraction method
   - Disable legacy alignments,
   - extract box bugfix
   - extract faces - size to 512 and center on head
* Preview Tool
  - Display based on model centering
* Sort Tool
  - Use alignments for sort by face

* lib.aligner
  - Add Pose Class
  - Add AlignedFace Class
  - center _MEAN_FACE on x
  - Add meta information with versioning to alignments file
  - lib.aligner.get_align_matrix to use landmarks not face
  - Refactor aligned faces in lib.faces_detect
* lib.logger
  - larger file log padding
* lib.config
  - Fix global changeable_items
* lib.face_filter
  - Use new extracted face images
* lib.image
  - bump thumbnail default size to 96px 
plugins/train/trainer/_base.py