Hi,
Despite using inbuilt function for creating PReLU layer, I am getting this message while parsing my prototxt/caffemodel:
could not parse layer type PReLU
There is no other detail. PluginFactory file is attached. Kindly advise.
Regards,
Anup
#include "NvCaffeParser.h"
#include "NvInferPlugin.h"
using namespace nvinfer1;
using namespace nvcaffeparser1;
using namespace plugin;
// integration for serialization
class PluginFactory : public nvinfer1::IPluginFactory, public nvcaffeparser1::IPluginFactory
{
public:
// deserialization plugin implementation
virtual nvinfer1::IPlugin* createPlugin(const char* layerName, const nvinfer1::Weights* weights, int nbWeights) override
{
std::cout << "DEBUG:\tInside virtual createPlugin." << std::endl;
assert(isPlugin(layerName));
if (!strcmp(layerName, "PReLU"))
{
assert(mPluginPReLU == nullptr);
assert(nbWeights == 0 && weights == nullptr);
std::cout << "DEBUG:\tCreating PReLUPlugin with weights Data." << std::endl;
mPluginPReLU = std::unique_ptr<INvPlugin, decltype(nvPluginDeleter)>
(createPReLUPlugin(*(float *)weights[0].values), nvPluginDeleter);
return mPluginPReLU.get();
}
else
{
std::cout << "DEBUG:\tUnidentified layer." << std::endl;
assert(0);
return nullptr;
}
}
IPlugin* createPlugin(const char* layerName, const void* serialData, size_t serialLength) override
{
std::cout << "DEBUG:\tInside createPlugin." << std::endl;
assert(isPlugin(layerName));
if (!strcmp(layerName, "PReLU"))
{
assert(mPluginPReLU == nullptr);
std::cout << "DEBUG:\tCreating PReLUPlugin with serial Data." << std::endl;
mPluginPReLU = std::unique_ptr<INvPlugin, decltype(nvPluginDeleter)>(createPReLUPlugin(serialData, serialLength), nvPluginDeleter);
return mPluginPReLU.get();
}
else
{
std::cout << "DEBUG:\tUnidentified layer." << std::endl;
assert(0);
return nullptr;
}
}
// caffe parser plugin implementation
bool isPlugin(const char* name) override { return !strcmp(name, "PReLU"); }
// User application destroys plugin when it is safe to do so.
// Should be done after consumers of plugin (like ICudaEngine) are destroyed.
void destroyPlugin()
{
mPluginPReLU.reset();
}
void(*nvPluginDeleter)(INvPlugin*) { [](INvPlugin* ptr) {ptr->destroy(); } };
std::unique_ptr<INvPlugin, decltype(nvPluginDeleter)> mPluginPReLU{ nullptr, nvPluginDeleter };
};