Как я могу сделать вывод с несколькими входными сетями на TensorRT? - PullRequest
0 голосов
/ 28 января 2020

Я хотел бы проверить GQ-CNN, который является сетью в Dex-Net на tensorRT. Я успешно преобразовал файл tflite в файл uff, но когда я попытался сделать вывод об этой сети, возникла ошибка, которую я не смог выяснить.

[TensorRT] ERROR: Parameter check failed at: ../builder/Network.cpp::addLRN::149, condition: lrnWindow & 0x1
python3: uff/orders.cpp:330: void UffParser::addTranspose(ParserLayer&, std::vector<int>): Assertion `outputs.size() == 1' failed.

Ошибка возникает при построении модели. Я пытался найти подсказку от Google, но там нет ни кодов, ни ссылок.

Есть только другая вещь по сравнению с примером кода, который работает хорошо. (Я написал подписи, какие коды я добавил. Если я удаляю эти коды и заменяю файл модели на сеть с одним входом, это работает хорошо.)

Я зарегистрировал вход дважды, как показано ниже, потому что GQ-CNN имеет несколько входов. Поэтому я предполагаю, что основной причиной этой ошибки может быть регистрация множественного ввода с использованием uffparser.

class ModelData(object):
    MODEL_FILE = "./gqcnn.uff"
    INPUT_NAME_1 = "Placeholder"
    INPUT_SHAPE_1 = (1, 32, 32)
    INPUT_NAME_2 = "Placeholder_1"
    INPUT_SHAPE_2 = (2,)
    OUTPUT_NAME = "softmax/Softmax"

def build_engine(model_file):
    # For more information on TRT basics, refer to the introductory samples.
    with trt.Builder(TRT_LOGGER) as builder, builder.create_network() as network, trt.UffParser() as parser:
        builder.max_workspace_size = common.GiB(1)
        builder.fp16_mode = True
        #builder.int8_mode = True

        # Parse the Uff Network
        parser.register_input(ModelData.INPUT_NAME_1, ModelData.INPUT_SHAPE_1)
        parser.register_input(ModelData.INPUT_NAME_2, ModelData.INPUT_SHAPE_2) # added code
        parser.register_output(ModelData.OUTPUT_NAME)
        parser.parse(model_file, network)

        # Build and return an engine.
        return builder.build_cuda_engine(network)

# do inference
with build_engine(ModelData.MODEL_FILE) as engine:
    # Build an engine, allocate buffers and create a stream.
    # For more information on buffer allocation, refer to the introductory samples.
    inputs, outputs, bindings, stream = common.allocate_buffers(engine)
    with engine.create_execution_context() as context:
        for idx in range(len(val_images)) :
            start = time.time()
            val_image = val_images[idx]
            val_pose = val_poses[idx] # added code
            np.copyto(inputs[0].host, val_image)
            np.copyto(inputs[1].host, val_pose) # added code
            [prediction] = common.do_inference(context, bindings=bindings, inputs=inputs, outputs=outputs, stream=stream)

Есть ли кто-нибудь, кому удалось сделать вывод, используя модель множественного ввода?

...