              title="allow_growth",
              datatype=bool,
              default=False,
              group=_("settings"),
              info=_("[Nvidia Only]. Enable the Tensorflow GPU `allow_growth` configuration option. "
                     "This option prevents Tensorflow from allocating all of the GPU VRAM at launch "
                     "but can lead to higher VRAM fragmentation and slower performance. Should only "
                     "be enabled if you are having problems running extraction."))
          self.add_item(
              section=section,
 
</s> remove         info="[Not PlaidML] BiseNet mask still runs fairly quickly on CPU on some setups. Enable "
 </s> add         info="BiseNet mask still runs fairly quickly on CPU on some setups. Enable " </s> remove     mobilenet_width=dict(
        default=1.0,
        info="The width multiplier for mobilenet encoders. Controls the width of the "
             "network. Values less than 1.0 proportionally decrease the number of filters within "
             "each layer. Values greater than 1.0 proportionally increase the number of filters "
             "within each layer. 1.0 is the default number of layers used within the paper.\n"
             "NB: This option is ignored for any non-mobilenet encoders.\n"
             "NB: If loading ImageNet weights, then for MobilenetV1 only values of '0.25', "
             "'0.5', '0.75' or '1.0 can be selected. For MobilenetV2 only values of '0.35', "
             "'0.50', '0.75', '1.0', '1.3' or '1.4' can be selected. For mobilenet_v3 only values "
             "of '0.75' or '1.0' can be selected",
        datatype=float,
        min_max=(0.1, 2.0),
        rounding=2,
        group="mobilenet encoder configuration",
        fixed=True),
    mobilenet_depth=dict(
        default=1,
        info="The depth multiplier for MobilenetV1 encoder. This is the depth multiplier "
             "for depthwise convolution (known as the resolution multiplier within the original "
             "paper).\n"
             "NB: This option is only used for MobilenetV1 and is ignored for all other "
             "encoders.\n"
             "NB: If loading ImageNet weights, this must be set to 1.",
        datatype=int,
        min_max=(1, 10),
        rounding=1,
        group="mobilenet encoder configuration",
        fixed=True),
    mobilenet_dropout=dict(
        default=0.001,
        info="The dropout rate for MobilenetV1 encoder.\n"
             "NB: This option is only used for MobilenetV1 and is ignored for all other "
             "encoders.",
        datatype=float,
        min_max=(0.001, 2.0),
        rounding=3,
        group="mobilenet encoder configuration",
        fixed=True),
    mobilenet_minimalistic=dict(
        default=False,
        info="Use a minimilist version of MobilenetV3.\n"
             "In addition to large and small models MobilenetV3 also contains so-called "
             "minimalistic models, these models have the same per-layer dimensions characteristic "
             "as MobilenetV3 however, they don't utilize any of the advanced blocks "
             "(squeeze-and-excite units, hard-swish, and 5x5 convolutions). While these models "
             "are less efficient on CPU, they are much more performant on GPU/DSP.\n"
             "NB: This option is only used for MobilenetV3 and is ignored for all other "
             "encoders.\n",
        datatype=bool,
        group="mobilenet encoder configuration",
        fixed=True),
    )
 </s> add     "mobilenet_width": {
        "default": 1.0,
        "info": (
            "The width multiplier for mobilenet encoders. Controls the width of the "
            "network. Values less than 1.0 proportionally decrease the number of filters within "
            "each layer. Values greater than 1.0 proportionally increase the number of filters "
            "within each layer. 1.0 is the default number of layers used within the paper.\n"
            "NB: This option is ignored for any non-mobilenet encoders.\n"
            "NB: If loading ImageNet weights, then for MobilenetV1 only values of '0.25', "
            "'0.5', '0.75' or '1.0 can be selected. For MobilenetV2 only values of '0.35', "
            "'0.50', '0.75', '1.0', '1.3' or '1.4' can be selected. For mobilenet_v3 only values "
            "of '0.75' or '1.0' can be selected"),
        "datatype": float,
        "min_max": (0.1, 2.0),
        "rounding": 2,
        "group": "mobilenet encoder configuration",
        "fixed": True},
    "mobilenet_depth": {
        "default": 1,
        "info": (
            "The depth multiplier for MobilenetV1 encoder. This is the depth multiplier "
            "for depthwise convolution (known as the resolution multiplier within the original "
            "paper).\n"
            "NB: This option is only used for MobilenetV1 and is ignored for all other "
            "encoders.\n"
            "NB: If loading ImageNet weights, this must be set to 1."),
        "datatype": int,
        "min_max": (1, 10),
        "rounding": 1,
        "group": "mobilenet encoder configuration",
        "fixed": True},
    "mobilenet_dropout": {
        "default": 0.001,
        "info": (
            "The dropout rate for MobilenetV1 encoder.\n"
            "NB: This option is only used for MobilenetV1 and is ignored for all other "
            "encoders."),
        "datatype": float,
        "min_max": (0.001, 2.0),
        "rounding": 3,
        "group": "mobilenet encoder configuration",
        "fixed": True},
    "mobilenet_minimalistic": {
        "default": False,
        "info": (
            "Use a minimilist version of MobilenetV3.\n"
            "In addition to large and small models MobilenetV3 also contains so-called "
            "minimalistic models, these models have the same per-layer dimensions characteristic "
            "as MobilenetV3 however, they don't utilize any of the advanced blocks "
            "(squeeze-and-excite units, hard-swish, and 5x5 convolutions). While these models "
            "are less efficient on CPU, they are much more performant on GPU/DSP.\n"
            "NB: This option is only used for MobilenetV3 and is ignored for all other "
            "encoders.\n"),
        "datatype": bool,
        "group": "mobilenet encoder configuration",
        "fixed": True},
    } </s> remove         except Exception as err:
            if get_backend() == "amd":
                # pylint:disable=import-outside-toplevel
                from lib.plaidml_utils import is_plaidml_error
                if (is_plaidml_error(err) and (
                        "CL_MEM_OBJECT_ALLOCATION_FAILURE" in str(err).upper() or
                        "enough memory for the current schedule" in str(err).lower())):
                    msg = ("You do not have enough GPU memory available to run detection at "
                           "the selected batch size. You can try a number of things:"
                           "\n1) Close any other application that is using your GPU (web "
                           "browsers are particularly bad for this)."
                           "\n2) Lower the batchsize (the amount of images fed into the "
                           "model) by editing the plugin settings (GUI: Settings > Configure "
                           "extract settings, CLI: Edit the file "
                           "faceswap/config/extract.ini).")
                    raise FaceswapError(msg) from err
            raise
 </s> add  </s> remove         except Exception as err:
            if get_backend() == "amd":
                # pylint:disable=import-outside-toplevel
                from lib.plaidml_utils import is_plaidml_error
                if (is_plaidml_error(err) and (
                        "CL_MEM_OBJECT_ALLOCATION_FAILURE" in str(err).upper() or
                        "enough memory for the current schedule" in str(err).lower())):
                    msg = ("You do not have enough GPU memory available to train the selected "
                           "model at the selected settings. You can try a number of things:"
                           "\n1) Close any other application that is using your GPU (web browsers "
                           "are particularly bad for this)."
                           "\n2) Lower the batchsize (the amount of images fed into the model "
                           "each iteration)."
                           "\n3) Use a more lightweight model, or select the model's 'LowMem' "
                           "option (in config) if it has one.")
                    raise FaceswapError(msg) from err
            raise
 </s> add  </s> remove         datatype:  [required] A python type class. This limits the type of data that can be
                   provided in the .ini file and ensures that the value is returned in the
                   correct type to faceswap. Valid data types are: <class 'int'>, <class 'float'>,
                   <class 'str'>, <class 'bool'>.
        default:   [required] The default value for this option.
        info:      [required] A string describing what this option does.
        choices:   [optional] If this option's datatype is of <class 'str'> then valid
                   selections can be defined here. This validates the option and also enables
                   a combobox / radio option in the GUI.
        gui_radio: [optional] If <choices> are defined, this indicates that the GUI should use
                   radio buttons rather than a combobox to display this option.
        min_max:   [partial] For <class 'int'> and <class 'float'> data types this is required
                   otherwise it is ignored. Should be a tuple of min and max accepted values.
                   This is used for controlling the GUI slider range. Values are not enforced.
        rounding:  [partial] For <class 'int'> and <class 'float'> data types this is
                   required otherwise it is ignored. Used for the GUI slider. For floats, this
                   is the number of decimal places to display. For ints this is the step size.
        fixed:     [optional] [train only]. Training configurations are fixed when the model is
                   created, and then reloaded from the state file. Marking an item as fixed=False
                   indicates that this value can be changed for existing models, and will override
                   the value saved in the state file with the updated value in config. If not
                   provided this will default to True.
 </s> add         "datatype:  [required] A python type class. This limits the type of data that can be
               "   provided in the .ini file and ensures that the value is returned in the
               "   correct type to faceswap. Valid data types are: <class 'int'>, <class 'float'>,
               "   <class 'str'>, <class 'bool'>.
        "default:   [required] The default value for this option.
        "info:      [required] A string describing what this option does.
        "choices:   [optional] If this option's datatype is of <class 'str'> then valid
               "   selections can be defined here. This validates the option and also enables
               "   a combobox / radio option in the GUI.
        "gui_radio: [optional] If <choices> are defined, this indicates that the GUI should use
               "   radio buttons rather than a combobox to display this option.
        "min_max:   [partial] For <class 'int'> and <class 'float'> data types this is required
               "   otherwise it is ignored. Should be a tuple of min and max accepted values.
               "   This is used for controlling the GUI slider range. Values are not enforced.
        "rounding:  [partial] For <class 'int'> and <class 'float'> data types this is
               "   required otherwise it is ignored. Used for the GUI slider. For floats, this
               "   is the number of decimal places to display. For ints this is the step size.
        "fixed:     [optional] [train only]. Training configurations are fixed when the model is
               "   created, and then reloaded from the state file. Marking an item as fixed=False
               "   indicates that this value can be changed for existing models, and will override
               "   the value saved in the state file with the updated value in config. If not
               "   provided this will default to True.
            info=_("Enable the Tensorflow GPU `allow_growth` configuration option. "
              title="allow_growth",
              datatype=bool,
              default=False,
              group=_("settings"),
            info=_("Enable the Tensorflow GPU `allow_growth` configuration option. "
                     "This option prevents Tensorflow from allocating all of the GPU VRAM at launch "
                     "but can lead to higher VRAM fragmentation and slower performance. Should only "
                     "be enabled if you are having problems running extraction."))
          self.add_item(
              section=section,
keep keep keep keep replace keep keep keep keep keep
 Remove plaidML support (#1325)

* Remove PlaidML reference from readme files

* Remove AMD option from installers

* remove amd requirements and update setup.py

* remove plaidml test from CI workflow

* gpustats: remove plaidml backend

* plaid removals:
  - faceswap.py - python version check
  - setup.cfg - plaidml typing ignore
  - lib.keras_utils - All plaid code
  - lib.launcher.py - All plaidml checks and configuration

* remove tf2.2 specific code from GUI event reader

* lib.model - remove all plaidml implementations

* plugins.extract - remove plaidml code

* plugins.train remove plaidml code

* lib.convert - remove plaidml code

* tools.model: remove plaidml code

* Remove plaidML tests from unit tests

* remove plaidml_utils and docsting cleanups

* Remove plaidML refs from configs

* fix keras imports 
plugins/extract/_config.py