本文主要是介绍【tensorrt】——error: invalid new-expression of abstract class type ‘torch2trt::InterpolatePlugin’,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
tensorrt
给tensorrt写插件的时候,报错:
interpolate.cpp:63:93: error: invalid new-expression of abstract class type ‘torch2trt::InterpolatePlugin’
因为还有父类的虚函数没有实现。
可以通过一个简单的类实现进行测试,所有的函数不需要实现,这样看有哪些虚函数。比如:
class InterpolatePlugin : public IPluginV2
{
public:InterpolatePlugin(std::vector<int64_t> size, std::string mode, bool align_corners) {};InterpolatePlugin(const char *data, size_t length){};// create from serialized dataInterpolatePlugin(const std::string &data) { };int getNbOutputs() const override {};Dims getOutputDimensions(int index, const Dims* inputs, int nbInputDims) override{ };int initialize() override{};void terminate() override{};size_t getWorkspaceSize(int maxBatchSize) const override{};int enqueue(int batchSize, const void* const* inputs, void** outputs, void* workspace, cudaStream_t stream) override{ };size_t getSerializationSize() const override{};void serialize(void* buffer) const override{};void configureWithFormat(const Dims* inputDims, int nbInputs, const Dims* outputDims, int nbOutputs, DataType type,PluginFormat format, int maxBatchSize) override{};bool supportsFormat(DataType type, PluginFormat format) const override{};const char* getPluginType() const override{};const char* getPluginVersion() const override{};void destroy() override{};IPluginV2* clone() const override{};void setPluginNamespace(const char* libNamespace) override{}const char* getPluginNamespace() const override{}private:// float mNegSlope;// int mBatchDim;// configured by userstd::vector<int64_t> size;std::string mode;bool align_corners;
};
上面是IPluginV2
, 下面是IPluginV2DynamicExt
类的最简单,包含了所有虚函数。
class InterpolatePlugin : public IPluginV2DynamicExt
{
public:InterpolatePlugin(std::vector<int64_t> size, std::string mode, bool align_corners) {};InterpolatePlugin(const char *data, size_t length){};// create from serialized dataInterpolatePlugin(const std::string &data) { };// ~InterpolatePlugin() override = default;// IPluginV2 methodsconst char* getPluginType() const override{};const char* getPluginVersion() const override{};int getNbOutputs() const override{};int initialize() override{};void terminate() override{};size_t getSerializationSize() const override{};void serialize(void* buffer) const override{};void destroy() override{};void setPluginNamespace(const char* libNamespace) override{};const char* getPluginNamespace() const override{};// void setClipParam(bool clip){};// IPluginV2Ext methodsnvinfer1::DataType getOutputDataType(int index, const nvinfer1::DataType* inputType, int nbInputs) const override{};// IPluginV2DynamicExt methodsIPluginV2DynamicExt* clone() const override{return new InterpolatePlugin(size, mode, align_corners);};DimsExprs getOutputDimensions(int outputIndex, const DimsExprs* inputs, int nbInputs, IExprBuilder& exprBuilder) override{};bool supportsFormatCombination(int pos, const PluginTensorDesc* inOut, int nbInputs, int nbOutputs) override{};void configurePlugin(const DynamicPluginTensorDesc* in, int nbInputs, const DynamicPluginTensorDesc* out, int nbOutputs) override{};size_t getWorkspaceSize(const PluginTensorDesc* inputs, int nbInputs, const PluginTensorDesc* outputs, int nbOutputs) const override{};int enqueue(const PluginTensorDesc* inputDesc, const PluginTensorDesc* outputDesc, const void* const* inputs,void* const* outputs, void* workspace, cudaStream_t stream) override{};private:std::vector<int64_t> size;std::string mode;bool align_corners;
};
这篇关于【tensorrt】——error: invalid new-expression of abstract class type ‘torch2trt::InterpolatePlugin’的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!