          input_shape: tuple or list of tuples
              Shape tuple (tuple of integers) or list of shape tuples (one per output tensor of the
              layer). Shape tuples can include ``None`` for free dimensions, instead of an integer.
  
          Returns
          -------
          tuple
              An output shape tuple.
          """
          if self._axes is None:
              return (1,)*len(input_shape) if self._keepdims else tuple()
          ret = list(input_shape)
          for i in sorted(self._axes, reverse=True):
              if self._keepdims:
                  ret[i] = 1
              else:
                  ret.pop(i)
          return tuple(ret)
  
      def call(self, inputs, **kwargs):  # pylint:disable=unused-argument
          """This is where the layer's logic lives.
  
          Override for layers which inherit from this class
 
</s> remove         input_shape: tuple or list of tuples
            Shape tuple (tuple of integers) or list of shape tuples (one per output tensor of the
            layer). Shape tuples can include ``None`` for free dimensions, instead of an integer.
 </s> add         inputs: tensor
            The input to the L2 Normalization Layer </s> remove         Parameters
        ----------
        input_shape: tuple or list of tuples
            Shape tuple (tuple of integers) or list of shape tuples (one per output tensor of the
            layer). Shape tuples can include ``None`` for free dimensions, instead of an integer.
 </s> add     def model_definition(self):
        """ Keras S3FD Model Definition, adapted from FAN pytorch implementation. """
        input_ = Input(shape=(640, 640, 3))
        var_x = self.conv_block(input_, 64, 1, 2)
        var_x = MaxPooling2D(pool_size=2, strides=2)(var_x) </s> remove         input_shape: tuple or list of tuples
            Shape tuple (tuple of integers) or list of shape tuples (one per output tensor of the
            layer). Shape tuples can include ``None`` for free dimensions, instead of an integer.
            This is unused for a constant layer
 </s> add         inputs: tensor
            The input tensor to the convolution block
        filters: int
            The number of filters
        idx: int
            The layer index for naming
        recursions: int
            The number of recursions of the block to perform </s> remove         tuple
            An output shape tuple.
 </s> add         tensor:
            The output from the L2 Normalization Layer </s> remove         Assumes that the layer will be built to match that input shape provided.
 </s> add     def call(self, inputs):
        """ Call the L2 Normalization Layer.
        var_x = self.conv_block(var_x, 128, 2, 2)
        var_x = MaxPooling2D(pool_size=2, strides=2)(var_x)
          input_shape: tuple or list of tuples
              Shape tuple (tuple of integers) or list of shape tuples (one per output tensor of the
              layer). Shape tuples can include ``None`` for free dimensions, instead of an integer.
  
        var_x = self.conv_block(var_x, 128, 2, 2)
        var_x = MaxPooling2D(pool_size=2, strides=2)(var_x)
        var_x = self.conv_block(var_x, 128, 2, 2)
        var_x = MaxPooling2D(pool_size=2, strides=2)(var_x)
        var_x = self.conv_block(var_x, 128, 2, 2)
        var_x = MaxPooling2D(pool_size=2, strides=2)(var_x)
        var_x = self.conv_block(var_x, 128, 2, 2)
        var_x = MaxPooling2D(pool_size=2, strides=2)(var_x)
        var_x = self.conv_block(var_x, 128, 2, 2)
        var_x = MaxPooling2D(pool_size=2, strides=2)(var_x)
        var_x = self.conv_block(var_x, 128, 2, 2)
        var_x = MaxPooling2D(pool_size=2, strides=2)(var_x)
        var_x = self.conv_block(var_x, 128, 2, 2)
        var_x = MaxPooling2D(pool_size=2, strides=2)(var_x)
        var_x = self.conv_block(var_x, 128, 2, 2)
        var_x = MaxPooling2D(pool_size=2, strides=2)(var_x)
        var_x = self.conv_block(var_x, 128, 2, 2)
        var_x = MaxPooling2D(pool_size=2, strides=2)(var_x)
        var_x = self.conv_block(var_x, 128, 2, 2)
        var_x = MaxPooling2D(pool_size=2, strides=2)(var_x)
        var_x = self.conv_block(var_x, 128, 2, 2)
        var_x = MaxPooling2D(pool_size=2, strides=2)(var_x)
        var_x = self.conv_block(var_x, 128, 2, 2)
        var_x = MaxPooling2D(pool_size=2, strides=2)(var_x)
        var_x = self.conv_block(var_x, 128, 2, 2)
        var_x = MaxPooling2D(pool_size=2, strides=2)(var_x)
        var_x = self.conv_block(var_x, 128, 2, 2)
        var_x = MaxPooling2D(pool_size=2, strides=2)(var_x)
  
      def call(self, inputs, **kwargs):  # pylint:disable=unused-argument
          """This is where the layer's logic lives.
  
          Override for layers which inherit from this class
keep keep keep keep replace replace replace replace replace replace replace replace replace replace replace replace replace replace keep keep keep keep keep
 extract: S3FD - Convert to re-enable CPU 
plugins/extract/detect/s3fd.py