              mouth masks are required. """
          retval = dict()
          penalized_loss = self._model.config["penalized_mask_loss"]
  
          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
  
          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
 
</s> remove 
        if self._model.command_line_arguments.warp_to_landmarks:
            logger.debug("Adding landmarks to training opts dict")
            retval["landmarks"] = alignments.landmarks
 </s> add         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) </s> remove             Includes the key `landmarks` if landmarks are required for training, `masks` if masks
            are required for training, `masks_eye` if eye masks are required and `masks_mouth` if
            mouth masks are required. """
        retval = dict()
 </s> add             Includes the key `aligned_faces` holding aligned face information and the key
            `versions` indicating the alignments file versions that the faces have come from.
            In addition, the following optional keys are provided: `masks` if masks are required
            for training, `masks_eye` if eye masks are required and `masks_mouth` if mouth masks
            are required. """ </s> remove         logger.debug({key: {k: len(v) for k, v in val.items()} for key, val in retval.items()})
 </s> add         logger.debug({key: {k: v if isinstance(v, float) else len(v)
                            for k, v in val.items()}
                      for key, val in retval.items()}) </s> remove         retval = {side: self._transform_landmarks(side, detected_faces)
                  for side, detected_faces in self._detected_faces.items()}
        logger.trace(retval)
 </s> add         retval = dict()
        for side, detected_faces in self._detected_faces.items():
            centering = "legacy" if self._alignments_version[side] == 1.0 else "head"
            logger.debug("side: %s, centering: %s", side, centering)
            ret_side = dict()
            for fhash, face in detected_faces.items():
                face.load_aligned(None, size=self._training_size, centering=centering)
                for filename in self._hash_to_filenames(side, fhash):
                    ret_side[filename] = face.aligned
            retval[side] = ret_side </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.
              mouth masks are required. """
          retval = dict()
          penalized_loss = self._model.config["penalized_mask_loss"]
  







          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
keep keep keep keep replace replace replace 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