User Guide.html에서 tensorRT의 입/출력은 NCHW 형식을 사용해야합니다.
NCHW 란 무엇입니까?
어떻게하면 cv :: MAT를 NCHW 형식으로 변환 할 수 있습니까?TensorRT : cv :: MAT를 NHCW 형식으로 변환하는 방법은 무엇입니까?
아래 코드와 같이 TensorRT를 사용하여 유추합니다.
오류가 없습니다. 하지만 결과가 옳지 않습니다.
int batchSize = 1;
int size_of_single_input = 256 * 256 * 3 * sizeof(float);
int size_of_single_output = 100 * 1 * 1 * sizeof(float);
IBuilder* builder = createInferBuilder(gLogger);
INetworkDefinition* network = builder->createNetwork();
CaffeParser parser;
auto blob_name_to_tensor = parser.parse(“deploy.prototxt”,
"sample.caffemodel",
*network,
DataType::kFLOAT);
network->markOutput(*blob_name_to_tensor->find("prob"));
builder->setMaxBatchSize(1);
builder->setMaxWorkspaceSize(1 << 30);
ICudaEngine* engine = builder->buildCudaEngine(*network);
IExecutionContext *context = engine->createExecutionContext();
int inputIndex = engine->getBindingIndex(INPUT_LAYER_NAME),
int outputIndex = engine->getBindingIndex(OUTPUT_LAYER_NAME);
cv::Mat input;
input = imread("./sample.jpg");
cvtColor(input, input, CV_BGR2RGB);
cv::resize(input, input, cv::Size(256, 256));
float output[OUTPUTSIZE];
void* buffers = malloc(engine->getNbBindings() * sizeof(void*));
cudaMalloc(&buffers[inputIndex], batchSize * size_of_single_input);
cudaMalloc(&buffers[outputIndex], batchSize * size_of_single_output);
cudaStream_t stream;
cudaStreamCreate(&stream);
cudaMemcpyAsync(buffers[inputIndex], (float *)input,
batchSize * size_of_single_input,
cudaMemcpyHostToDevice, stream);
context.enqueue(batchSize, buffers, stream, nullptr);
cudaMemcpyAsync(output, buffers[outputIndex],
batchSize * size_of_single_output,
cudaMemcpyDeviceToHost, stream));
cudaStreamSynchronize(stream);
도움이 되겠습니다.
[MCVE 페이지] (http://stackoverflow.com/help/mcve)에서 "질문"을 개선하기위한 지침을 따르십시오. 쿠다 (cuda) 태그에 관한 질문 하루 하루가 더 나 빠지다. – Taro