                   "\n\t75.0%% spans from temple to temple."
                   "\n\t87.5%% spans from ear to ear."
                   "\n\t100.0%% is a mugshot.")
          self.add_item(
              section=section, title="replicate_input_mask", datatype=bool,
              default=False, group="mask",
              info="Dedicate portions of the model to learning how to duplicate the input "
                   "mask. Increases VRAM usage in exchange for a learning a quick ability "
                   "to try to replicate more complex mask models.")
          self.add_item(
              section=section, title="mask_blur", datatype=bool, default=False, group="mask",
              info="Apply gaussian blur to the mask input. This has the effect of smoothing the "
                   "edges of the mask, which can help with poorly calculated masks, and give less "
                   "of a hard edge to the predicted mask.")
 
</s> remove                    "\nIf you are using 'warp to landmarks' then every "
 </s> add                    "\nIf you are training with a mask or using 'warp to landmarks' then every " </s> remove             loss = self.model.predictors[self.side].train_on_batch(x=model_inputs, y=model_targets)
 </s> add             loss = self.model.predictors[self.side].train_on_batch(*batch) </s> remove         model_inputs, model_targets = self.get_next()
 </s> add         batch = self.get_next(do_preview) </s> remove         alignments:             dict containing paths to alignments files for keys 'a' and 'b'
        preview_scaling:        How much to scale the preview out by
        training_size:          Size of the training images
        coverage_ratio:         Ratio of face to be cropped out for training
        replicate_input_mask:   Replicate input masks with additional model dedicated layers
        no_logs:                Disable tensorboard logging
        snapshot_interval:      Interval for saving model snapshots
        warp_to_landmarks:      Use random_warp_landmarks instead of random_warp
        augment_color:          Perform random shifting of L*a*b* colors
        no_flip:                Don't perform a random flip on the image
        pingpong:               Train each side seperately per save iteration rather than together
 </s> add         alignments:         dict containing paths to alignments files for keys 'a' and 'b'
        preview_scaling:    How much to scale the preview out by
        training_size:      Size of the training images
        coverage_ratio:     Ratio of face to be cropped out for training
        mask_type:          Type of mask to use. See lib.model.masks for valid mask names.
                            Set to None for not used
        no_logs:            Disable tensorboard logging
        snapshot_interval:  Interval for saving model snapshots
        warp_to_landmarks:  Use random_warp_landmarks instead of random_warp
        augment_color:      Perform random shifting of L*a*b* colors
        no_flip:            Don't perform a random flip on the image
        pingpong:           Train each side seperately per save iteration rather than together </s> remove         dict of `{name (str): mask (numpy.ndarray)}
 </s> add         dict of {**name** (`str`): :class:`Mask`}.
            section=section, title="mask_type", datatype=str, default="none",
            choices=get_available_masks(), group="mask",
            info="The mask to be used for training:"
                 "\n\t none: Doesn't use any mask."
                 "\n\t components: An improved face hull mask using a facehull of 8 facial parts"
                 "\n\t dfl_full: An improved face hull mask using a facehull of 3 facial parts"
                 "\n\t extended: Based on components mask. Extends the eyebrow points to further "
                 "up the forehead. May perform badly on difficult angles."
                 "\n\t facehull: Face cutout based on landmarks")
                   "\n\t75.0%% spans from temple to temple."
                   "\n\t87.5%% spans from ear to ear."
                   "\n\t100.0%% is a mugshot.")
          self.add_item(
            section=section, title="mask_type", datatype=str, default="none",
            choices=get_available_masks(), group="mask",
            info="The mask to be used for training:"
                 "\n\t none: Doesn't use any mask."
                 "\n\t components: An improved face hull mask using a facehull of 8 facial parts"
                 "\n\t dfl_full: An improved face hull mask using a facehull of 3 facial parts"
                 "\n\t extended: Based on components mask. Extends the eyebrow points to further "
                 "up the forehead. May perform badly on difficult angles."
                 "\n\t facehull: Face cutout based on landmarks")
            section=section, title="mask_type", datatype=str, default="none",
            choices=get_available_masks(), group="mask",
            info="The mask to be used for training:"
                 "\n\t none: Doesn't use any mask."
                 "\n\t components: An improved face hull mask using a facehull of 8 facial parts"
                 "\n\t dfl_full: An improved face hull mask using a facehull of 3 facial parts"
                 "\n\t extended: Based on components mask. Extends the eyebrow points to further "
                 "up the forehead. May perform badly on difficult angles."
                 "\n\t facehull: Face cutout based on landmarks")
            section=section, title="mask_type", datatype=str, default="none",
            choices=get_available_masks(), group="mask",
            info="The mask to be used for training:"
                 "\n\t none: Doesn't use any mask."
                 "\n\t components: An improved face hull mask using a facehull of 8 facial parts"
                 "\n\t dfl_full: An improved face hull mask using a facehull of 3 facial parts"
                 "\n\t extended: Based on components mask. Extends the eyebrow points to further "
                 "up the forehead. May perform badly on difficult angles."
                 "\n\t facehull: Face cutout based on landmarks")
            section=section, title="mask_type", datatype=str, default="none",
            choices=get_available_masks(), group="mask",
            info="The mask to be used for training:"
                 "\n\t none: Doesn't use any mask."
                 "\n\t components: An improved face hull mask using a facehull of 8 facial parts"
                 "\n\t dfl_full: An improved face hull mask using a facehull of 3 facial parts"
                 "\n\t extended: Based on components mask. Extends the eyebrow points to further "
                 "up the forehead. May perform badly on difficult angles."
                 "\n\t facehull: Face cutout based on landmarks")
            section=section, title="mask_type", datatype=str, default="none",
            choices=get_available_masks(), group="mask",
            info="The mask to be used for training:"
                 "\n\t none: Doesn't use any mask."
                 "\n\t components: An improved face hull mask using a facehull of 8 facial parts"
                 "\n\t dfl_full: An improved face hull mask using a facehull of 3 facial parts"
                 "\n\t extended: Based on components mask. Extends the eyebrow points to further "
                 "up the forehead. May perform badly on difficult angles."
                 "\n\t facehull: Face cutout based on landmarks")
          self.add_item(
              section=section, title="mask_blur", datatype=bool, default=False, group="mask",
              info="Apply gaussian blur to the mask input. This has the effect of smoothing the "
                   "edges of the mask, which can help with poorly calculated masks, and give less "
                   "of a hard edge to the predicted mask.")
keep keep keep keep replace replace replace replace replace keep keep keep keep keep
 Serialize masks to alignments file

- Add new serializers (npy + compressed)
- Remove Serializer option from cli
- Revert get_aligned call in scripts/extract
- Default alignments to compressed
- Size masks to 128px and compress
- Remove mask thresholding/blur from generation code
- Add Mask class to lib/faces_detect
- Revert debug landmarks to aligned face
- Revert non-extraction code to staging version 
plugins/train/_config.py