Я хотел бы проверить 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)
Есть ли кто-нибудь, кому удалось сделать вывод, используя модель множественного ввода?