Плагин парсинга в парсере onnx-tensorrt

У меня есть плагин CDCGreedyDecoder с двумя входами, последний слой показан на прикрепленном изображении (последний слой). Таким образом, у слоя есть два входа и один выход.

Парсер Onnx-TensorRT используется для синтаксического анализа плагина на TensorRT в файле TensorRT/parsers/onnx/builtin_op_importers.cpp следующим образом. Сильный текст

       DEFINE_BUILTIN_OP_IMPORTER(CTCGreedyDecoder)
{
    //const int nbInputs = node.input().size();
    //const int nbOutputs = node.output().size();
    //LOG_ERROR("nbInputs: " << nbInputs );
    //LOG_ERROR("nbOutputs: " << nbOutputs );
    //ASSERT(inputs.at(1).is_weights(), ErrorCode::kUNSUPPORTED_NODE);
    //ASSERT(inputs.at(2).is_weights(), ErrorCode::kUNSUPPORTED_NODE);
    nvinfer1::ITensor* tensorPtr = &convertToTensor(inputs.at(0), ctx);
    int nbDims = tensorPtr->getDimensions().nbDims;
    ASSERT(nbDims >= 3 && nbDims <= 4 && "TensorRT only supports InstanceNormalization on 3D or 4D tensors!", ErrorCode::kUNSUPPORTED_NODE);    
    OnnxAttrs attrs(node, ctx);    

    // Populate instanceNormalization plugin properties.
    const std::string pluginName = "CTCGreedyDecoder_TRT";
    const std::string pluginVersion = "1";
    std::vector<nvinfer1::PluginField> f;
    
    // Create plugin from registry
    nvinfer1::IPluginV2* plugin = importPluginFromRegistry(ctx, pluginName, pluginVersion, node.name(), f);

    ASSERT(plugin != nullptr && "CTCGreedyDecoder plugin was not found in the plugin registry!", ErrorCode::kUNSUPPORTED_NODE);

    auto* layer = ctx->network()->addPluginV2(&tensorPtr, 1, *plugin);
    ctx->registerLayer(layer, node.name());
    RETURN_FIRST_OUTPUT(layer);
}

Распечатайте количество входов и выходов и выясните номера входов / выходов в CDCGreedyDecoder следующим образом.

       [TRT]: /home/xavier/TensorRT/parsers/onnx/builtin_op_importers.cpp:1567: nbInputs:2 
[TRT]: /home/xavier/TensorRT/parsers/onnx/builtin_op_importers.cpp:1568: nbOutputs: 1

При преобразовании модели onnx в двигатель, количество входов 1 соблюдается при CDCGreedyDecoder plugin’s метод

       void configurePlugin(const DynamicPluginTensorDesc* in, int nbInput, const DynamicPluginTensorDesc* out, int nbOutput) override.

Должно быть 2.

Что не так в моей реализации реализации парсера onnx-tensorrt? DEFINE_BUILTIN_OP_IMPORTER(CTCGreedyDecoder) parser показано выше.

0 ответов

Другие вопросы по тегам