Плагин парсинга в парсере 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
показано выше.