本文主要是介绍【onnx-tensorrt】——源码阅读记录,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
个人记录
- tensorrt自定义插件层
- getOutputDimensions的调用接口
新定义的层需要定义getOutputDimensions方法,那这个是在供哪里调用的呢?接口的参数又是?
nvinfer1::Dims ResizeBilinearPlugin::getOutputDimensions(int index,const nvinfer1::Dims *inputDims,int nbInputs) {assert(nbInputs == 1);nvinfer1::Dims const& input = inputDims[0];assert(is_CHW(input));assert(_ndims == 2);assert(index == 0);nvinfer1::Dims output;output.nbDims = input.nbDims;int s = 0;for( int d=0; d<input.nbDims; ++d ) {output.type[d] = input.type[d];if( input.type[d] == nvinfer1::DimensionType::kSPATIAL ) {output.d[d] = int(input.d[d] * _scale[s++]);} else {output.d[d] = input.d[d];}}return output;
}
其是用TypeSerializingPlugin进行了封装,
auto* wrapped_plugin = new TypeSerializingPlugin(plugin); // 这里进行了封装
然后调用TypeSerializingPlugin的父类 PluginAdapter 的方法
nvinfer1::Dims PluginAdapter::getOutputDimensions(int index,const nvinfer1::Dims *inputDims,int nbInputs) {return _plugin->getOutputDimensions(index, inputDims, nbInputs); // 这里调用的 具体的类的输出尺寸}
然后继续追寻PluginAdapter的调用就没有源码了,应该是打到tensorrt的库中了。
同理,距离类的initialize也是在PluginAdapter中调用的
int PluginAdapter::initialize() { return _plugin->initialize(); } // 这里调用了具体类的 initialize
同理是具体层的enqueue
以上三个接口在tensorrt中封装死了,也看不到调用的接口。
这篇关于【onnx-tensorrt】——源码阅读记录的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!