                   "\nL|cv2-dnn: A CPU only extractor which is the least reliable and least "
                   "resource intensive. Use this if not using a GPU and time is important."
                   "\nL|mtcnn: Good detector. Fast on CPU, faster on GPU. Uses fewer resources "
                   "than other GPU detectors but can often return more false positives."
                   "\nL|s3fd: Best detector. GPU only. Can detect more faces and fewer false "
                   "positives than other GPU detectors, but is a lot more resource intensive."))
          argument_list.append(dict(
              opts=("-A", "--aligner"),
              action=Radio,
              type=str.lower,
              default=default_aligner,
 
</s> remove         if ((get_backend() == "cpu" or GPUStats().exclude_all_devices) and
                (self._command == "extract" and arguments.detector == "s3fd")):
            logger.error("Extracting on CPU is not currently for detector: '%s'",
                         arguments.detector.upper())
            sys.exit(0)

 </s> add  </s> remove         A layer config is a Python dictionary (serializable) containing the configuration of a
        layer. The same layer can be re-instantiated later (without its trained weights) from this
        configuration. The config of a layer does not include connectivity information, nor the
        layer class name. These are handled by `Network` (one layer of abstraction above).

 </s> add  </s> remove 
class ReduceLayerO2K(keras.layers.Layer):
    """ Custom Keras Reduce layer generated by onnx2keras. """
    def __init__(self, axes=None, keepdims=True, **kwargs):
        self._axes = [axes] if isinstance(axes, int) else axes
        self._keepdims = bool(keepdims)
        super().__init__(**kwargs)

 </s> add  </s> remove         return inputs[0] / inputs[1]


class S3fd(KSession):
    """ Keras Network """
    def __init__(self, model_path, model_kwargs, allow_growth, exclude_gpus, confidence):
        logger.debug("Initializing: %s: (model_path: '%s', model_kwargs: %s, allow_growth: %s, "
                     "exclude_gpus: %s, confidence: %s)", self.__class__.__name__, model_path,
                     model_kwargs, allow_growth, exclude_gpus, confidence)
        super().__init__("S3FD",
                         model_path,
                         model_kwargs=model_kwargs,
                         allow_growth=allow_growth,
                         exclude_gpus=exclude_gpus)
        self.load_model()
        self.confidence = confidence
        self.average_img = np.array([104.0, 117.0, 123.0])
        logger.debug("Initialized: %s", self.__class__.__name__)

    def prepare_batch(self, batch):
        """ Prepare a batch for prediction """
 </s> add  </s> remove         A layer config is a Python dictionary (serializable) containing the configuration of a
        layer. The same layer can be re-instantiated later (without its trained weights) from this
        configuration. The config of a layer does not include connectivity information, nor the
        layer class name. These are handled by `Network` (one layer of abstraction above).
 </s> add         Parameters
        ----------
        inputs: tensor
            The input tensor to the convolution block
        filters: int
            The initial number of filters
        idx: int
            The layer index for naming
                 "\nL|s3fd: Best detector. Slow on CPU, faster on GPU. Can detect more faces and "
                 "fewer false positives than other GPU detectors, but is a lot more resource "
                 "intensive."))
                   "\nL|cv2-dnn: A CPU only extractor which is the least reliable and least "
                   "resource intensive. Use this if not using a GPU and time is important."
                   "\nL|mtcnn: Good detector. Fast on CPU, faster on GPU. Uses fewer resources "
                   "than other GPU detectors but can often return more false positives."
                 "\nL|s3fd: Best detector. Slow on CPU, faster on GPU. Can detect more faces and "
                 "fewer false positives than other GPU detectors, but is a lot more resource "
                 "intensive."))
                 "\nL|s3fd: Best detector. Slow on CPU, faster on GPU. Can detect more faces and "
                 "fewer false positives than other GPU detectors, but is a lot more resource "
                 "intensive."))
          argument_list.append(dict(
              opts=("-A", "--aligner"),
              action=Radio,
              type=str.lower,
              default=default_aligner,
keep keep keep keep replace replace keep keep keep keep keep
 extract: S3FD - Convert to re-enable CPU 
lib/cli/args.py