          Assumes that the layer will be built to match that input shape provided.
  
          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.
  
          Returns
          -------
          tuple
              An output shape tuple.
 
</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         Assumes that the layer will be built to match that input shape provided.
 </s> add     def call(self, inputs):
        """ Call the L2 Normalization Layer. </s> remove         Assumes that the layer will be built to match that input shape provided.
 </s> add     @classmethod
    def conv_block(cls, inputs, filters, idx, recursions):
        """ First round convolutions with zero padding added. </s> remove         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)
 </s> add         var_x = self.conv_block(var_x, 128, 2, 2)
        var_x = MaxPooling2D(pool_size=2, strides=2)(var_x)
        inputs: tensor
            The input to the L2 Normalization Layer
          Assumes that the layer will be built to match that input shape provided.
  
          Parameters
          ----------
        inputs: tensor
            The input to the L2 Normalization Layer
        inputs: tensor
            The input to the L2 Normalization Layer
        inputs: tensor
            The input to the L2 Normalization Layer
  
          Returns
          -------
          tuple
              An output shape tuple.
keep keep keep keep replace replace replace keep keep keep keep keep
 extract: S3FD - Convert to re-enable CPU 
plugins/extract/detect/s3fd.py