ERROR: UFFParser: Parser error: BoxPredictor_0/Reshape: Reshape: -1 dimension specified more than 1 time

[TensorRT] ERROR: UFFParser: Validator error: Cast: Unsupported operation _Cast

I fix this error.

But this error occured.

[TensorRT] ERROR: UFFParser: Parser error: BoxPredictor_0/Reshape: Reshape: -1 dimension specified more than 1 time
[TensorRT] ERROR: Network must have at least one output
Traceback (most recent call last):
File “main.py”, line 43, in
buf = engine.serialize()
AttributeError: ‘NoneType’ object has no attribute ‘serialize’

How to fix it?

Please check this comment for the suggestion:

Thanks.

It doesn’t work… Same error occured.

Hi,

Could you share the pb file with us so we can check it directly?

Thanks.

How to share pb file? Just upload? I don’t know how to share pb file with you.

Hi,

Please attach it through the topic directly.
You will need to compress it into a .zip or .gz file first.

Thanks.

i don’t know, I search about upload file(Attaching Files to Forum Topics/Posts) but paperclip icon don’t exist here.

Hello,

Due to security reasons, only the following file types are allowed to be uploaded: jpg, jpeg, png, gif, log.

Please use another file sharing system to provide these files to Nvidia.

Thanks,
Tom

Hi, gpqls7669

Sorry that it looks like you cannot attach the file to the topic directly.
Would you mind share it through the google drive or other online storage?

Thanks.

https://drive.google.com/file/d/14LSvgCcSHLoMAGITI98vzu4gyw-V_G8L/view?usp=sharing

here!

Hi,

Sorry for the late update.
Do you find a solution for this issue yet?

Thanks.

Hi,

We can almost successfully to run your model with TensorRT with this config.py.

#
# Copyright (c) 2020, NVIDIA CORPORATION. All rights reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#

import graphsurgeon as gs
import tensorflow as tf

Input = gs.create_node("Input",
    op="Placeholder",
    dtype=tf.float32,
    shape=[1, 3, 300, 300])
PriorBox = gs.create_plugin_node(name="GridAnchor", op="GridAnchor_TRT",
    numLayers=6,
    minSize=0.2,
    maxSize=0.95,
    aspectRatios=[1.0, 2.0, 0.5, 3.0, 0.33],
    variance=[0.1,0.1,0.2,0.2],
    featureMapShapes=[19, 10, 5, 3, 2, 1])
NMS = gs.create_plugin_node(name="NMS", op="NMS_TRT",
    shareLocation=1,
    varianceEncodedInTarget=0,
    backgroundLabelId=0,
    confidenceThreshold=1e-8,
    nmsThreshold=0.6,
    topK=100,
    keepTopK=100,
    numClasses=91,
    inputOrder=[0, 2, 1],
    confSigmoid=1,
    isNormalized=1)
concat_priorbox = gs.create_node(name="concat_priorbox", op="ConcatV2", dtype=tf.float32, axis=2)
concat_box_loc = gs.create_plugin_node("concat_box_loc", op="FlattenConcat_TRT", dtype=tf.float32, axis=1, ignoreBatch=0)
concat_box_conf = gs.create_plugin_node("concat_box_conf", op="FlattenConcat_TRT", dtype=tf.float32, axis=1, ignoreBatch=0)

namespace_plugin_map = {
    "MultipleGridAnchorGenerator": PriorBox,
    "Postprocessor": NMS,
    "Preprocessor": Input,
    "Cast": Input,
    "image_tensor": Input,
    "Concatenate": concat_priorbox,
    "concat": concat_box_loc,
    "concat_1": concat_box_conf
}

namespace_remove = {
    "ToFloat",
    "image_tensor",
    "Preprocessor/map/TensorArrayStack_1/TensorArrayGatherV3",
}

def preprocess(dynamic_graph):
    dynamic_graph.remove(dynamic_graph.find_nodes_by_path(namespace_remove), remove_exclusive_dependencies=False)
    # Now create a new graph by collapsing namespaces
    dynamic_graph.collapse_namespaces(namespace_plugin_map)
    # Remove the outputs, so we just have a single output node (NMS).
    dynamic_graph.remove(dynamic_graph.graph_outputs, remove_exclusive_dependencies=False)

The only remain error is the class number is incorrect.
Please update the trained output class in the NMS module and run with following command:

$ sudo python3 /usr/lib/python3.6/dist-packages/uff/bin/convert_to_uff.py frozen_inference_graph.pb -o output.uff -O NMS -p config.py -t
$ /usr/src/tensorrt/bin/trtexec --uff=output.uff --uffInput=Input,3,300,300 --output=NMS

Thanks.