DDC
DDC

Reputation: 862

tensorflow_model_server: Error "The first dimension of paddings must be the rank of inputs[4,2]..."

I am using tensorflow_model_server to serve a SavedModel. I keep getting this response code 400 and following error:

{ "error": "The first dimension of paddings must be the rank of inputs[4,2] [1,1,1,208,770,3]\\n\\t [[{{node Generator/FlatConv/sequential/zero_padding2d/Pad}}]]" }

Output from saved-model-cli show ...

MetaGraphDef with tag-set: 'serve' contains the following SignatureDefs:

signature_def['__saved_model_init_op']:
  The given SavedModel SignatureDef contains the following input(s):
  The given SavedModel SignatureDef contains the following output(s):
    outputs['__saved_model_init_op'] tensor_info:
        dtype: DT_INVALID
        shape: unknown_rank
        name: NoOp
  Method name is: 

signature_def['serving_default']:
  The given SavedModel SignatureDef contains the following input(s):
    inputs['input_1'] tensor_info:
        dtype: DT_FLOAT
        shape: (-1, -1, -1, 3)
        name: serving_default_input_1:0
  The given SavedModel SignatureDef contains the following output(s):
    outputs['output_1'] tensor_info:
        dtype: DT_FLOAT
        shape: (-1, -1, -1, 3)
        name: StatefulPartitionedCall:0
  Method name is: tensorflow/serving/predict
WARNING:tensorflow:From /tensorflow-1.15.0/python3.6/tensorflow_core/python/ops/resource_variable_ops.py:1781: calling BaseResourceVariable.__init__ (from tensorflow.python.ops.resource_variable_ops) with constraint is deprecated and will be removed in a future version.
Instructions for updating:
If using Keras pass *_constraint arguments to layers.

Defined Functions:
  Function Name: '_default_save_signature'
    Option #1
      Callable with:
        Argument #1
          input_1: TensorSpec(shape=(?, ?, ?, 3), dtype=tf.float32, name='input_1')

Pre-processing

img_path = "/content/input_images/my_img.jpg"

img = np.array(Image.open(img_path).convert("RGB"))
img = np.expand_dims(img, 0).astype(np.float32) / 127.5 - 1

Request code:

payload = {
  "instances": [{'input_1': [input_image.tolist()]}]
}
headers = {"content-type": "application/json"}
json_response = requests.post('http://localhost:8501/v1/models/my_model:predict', data=json.dumps(payload), headers=headers)
print("Request complete")
print (json_response)
response_text =  json_response.text
response_text

Response / Output

Request complete
<Response [400]>
'{ "error": "The first dimension of paddings must be the rank of inputs[4,2] [1,1,1,449,674,3]\\n\\t [[{{node Generator/FlatConv/sequential/zero_padding2d/Pad}}]]" }'

Code is run on Colab

I do not understand what is wrong here.

Upvotes: 5

Views: 5828

Answers (2)

kawingkelvin
kawingkelvin

Reputation: 3951

try this:

  "instances": [{'input_1': np.squeeze(input_image).tolist()}]

Remove the outer [] and squeezing it seems to reduce 6d to 4d and this will likely works.

I ran into a similar error when I have a multi-modal inputs where 1st item is an image and 2nd is a string. I tried removing the batch dimension in the image input and it works. In my opinion, this seems to be a bug in tensorflow-serving. It should be able to handle a hash of batch of image.

(alternative, you don't need the squeeze if you didn't np.expand_dims earlier.

Upvotes: 0

Chong Yang
Chong Yang

Reputation: 96

It means that your input data shoud be four dimensions array, while you have 6d

Upvotes: 5

Related Questions