Hello,
I am trying to convert caffe model with TensorRT 4.0.1.6 and and i get a SegFault at
nvinfer1::builder::buildGraph(nvinfer1::CudaEngineBuildConfig
I am using the open pose model
http://posefs1.perception.cs.cmu.edu/OpenPose/models/pose/coco/pose_iter_440000.caffemodel
https://raw.githubusercontent.com/opencv/opencv_extra/master/testdata/dnn/openpose_pose_coco.prototxt
And this is how i create am trying to compile the network
IBuilder* builder = createInferBuilder(gLogger);
INetworkDefinition* network = builder->createNetwork();
ICaffeParser* parser = createCaffeParser();
const IBlobNameToTensor* blobNameToTensor = parser->parse(deployFile ,modelFile, *network, DataType::kHALF);
for (auto& s : outputs)
{
network->markOutput(*blobNameToTensor->find(s.c_str()));
}
builder->setMaxBatchSize(maxBatchSize);
ICudaEngine* engine = builder->buildCudaEngine(*network);
Any ideas on why this may happen?
Thanks a lot
I managed to run this sample code and tensorRT4.0.1.6 works well.
/*
* openpose code sample
* make command:
* nvcc openpose.cc -o openpose -std=c++11 -I /path/to/TensorRT-4.0.1.6/include -L /path/to/TensorRT-4.0.1.6/lib -lnvinfer -lnvcaffe_parser
*/
#include "NvCaffeParser.h"
#include "NvInfer.h"
#include "NvUtils.h"
#include <cuda_runtime_api.h>
#include <iostream>
#include <string>
#include <vector>
class Logger : public nvinfer1::ILogger
{
public:
Logger(Severity severity = Severity::kWARNING)
{
}
void log(Severity severity, const char *msg) override
{
if (severity != Severity::kINFO)
{
std::cout << msg << std::endl;
}
}
}gLogger;
int main() {
const char* deployFile = "openpose_pose_coco.prototxt";
const char* modelFile = "pose_iter_440000.caffemodel";
nvinfer1::IBuilder *builder = nvinfer1::createInferBuilder(gLogger);
nvinfer1::INetworkDefinition *network = builder->createNetwork();
nvcaffeparser1::ICaffeParser *parser = nvcaffeparser1::createCaffeParser();
const nvcaffeparser1:: IBlobNameToTensor *blobNameToTensor =
parser->parse(deployFile, modelFile, *network, nvinfer1::DataType::kHALF);
std::vector<std::string> outputs;
outputs.push_back("Mconv7_stage6_L2");
for (auto &s : outputs) {
network->markOutput(*blobNameToTensor->find(s.c_str()));
}
size_t maxBatchSize = 1;
builder->setMaxBatchSize(maxBatchSize);
nvinfer1::ICudaEngine *engine = builder->buildCudaEngine(*network);
if (engine != nullptr)
{
std::cout << "engine build ok" << std::endl;
}
return 0;
}