Skip to content

Commit d756050

Browse files
author
M. Fatih Cırıt
committed
fix(tensorrt): update tensorrt code of tensorrt_yolo
Signed-off-by: M. Fatih Cırıt <mfc@leodrive.ai>
1 parent 25c1836 commit d756050

File tree

2 files changed

+18
-12
lines changed

2 files changed

+18
-12
lines changed

Diff for: perception/tensorrt_yolo/lib/include/trt_yolo.hpp

+3-1
Original file line numberDiff line numberDiff line change
@@ -138,13 +138,15 @@ class Net
138138
cuda::unique_ptr<float[]> out_scores_d_ = nullptr;
139139
cuda::unique_ptr<float[]> out_boxes_d_ = nullptr;
140140
cuda::unique_ptr<float[]> out_classes_d_ = nullptr;
141+
std::string name_tensor_in_;
142+
std::string name_tensor_out_;
141143

142144
void load(const std::string & path);
143145
bool prepare();
144146
std::vector<float> preprocess(
145147
const cv::Mat & in_img, const int c, const int h, const int w) const;
146148
// Infer using pre-allocated GPU buffers {data, scores, boxes}
147-
void infer(std::vector<void *> & buffers, const int batch_size);
149+
void infer(const int batch_size);
148150
};
149151

150152
bool set_cuda_device(int gpu_id)

Diff for: perception/tensorrt_yolo/lib/src/trt_yolo.cpp

+15-11
Original file line numberDiff line numberDiff line change
@@ -122,6 +122,8 @@ Net::Net(const std::string & path, bool verbose)
122122
std::cout << "Fail to prepare engine" << std::endl;
123123
return;
124124
}
125+
name_tensor_in_ = engine_->getIOTensorName(0);
126+
name_tensor_out_ = engine_->getIOTensorName(engine_->getNbIOTensors() - 1);
125127
}
126128

127129
Net::~Net()
@@ -267,6 +269,8 @@ Net::Net(
267269
std::cout << "Fail to create engine" << std::endl;
268270
return;
269271
}
272+
name_tensor_in_ = engine_->getIOTensorName(0);
273+
name_tensor_out_ = engine_->getIOTensorName(engine_->getNbIOTensors() - 1);
270274
}
271275

272276
void Net::save(const std::string & path) const
@@ -276,15 +280,16 @@ void Net::save(const std::string & path) const
276280
file.write(reinterpret_cast<const char *>(plan_->data()), plan_->size());
277281
}
278282

279-
void Net::infer(std::vector<void *> & buffers, const int batch_size)
283+
void Net::infer(const int batch_size)
280284
{
281285
if (!context_) {
282286
throw std::runtime_error("Fail to create context");
283287
}
284-
auto input_dims = engine_->getBindingDimensions(0);
285-
context_->setBindingDimensions(
286-
0, nvinfer1::Dims4(batch_size, input_dims.d[1], input_dims.d[2], input_dims.d[3]));
287-
context_->enqueueV2(buffers.data(), stream_, nullptr);
288+
const auto input_dims = engine_->getTensorShape(name_tensor_in_.c_str());
289+
context_->setInputShape(
290+
name_tensor_in_.c_str(),
291+
nvinfer1::Dims4(batch_size, input_dims.d[1], input_dims.d[2], input_dims.d[3]));
292+
context_->enqueueV3(stream_);
288293
cudaStreamSynchronize(stream_);
289294
}
290295

@@ -294,10 +299,8 @@ bool Net::detect(const cv::Mat & in_img, float * out_scores, float * out_boxes,
294299
const auto input = preprocess(in_img, input_dims.at(0), input_dims.at(2), input_dims.at(1));
295300
CHECK_CUDA_ERROR(
296301
cudaMemcpy(input_d_.get(), input.data(), input.size() * sizeof(float), cudaMemcpyHostToDevice));
297-
std::vector<void *> buffers = {
298-
input_d_.get(), out_scores_d_.get(), out_boxes_d_.get(), out_classes_d_.get()};
299302
try {
300-
infer(buffers, 1);
303+
infer(1);
301304
} catch (const std::runtime_error & e) {
302305
return false;
303306
}
@@ -316,13 +319,14 @@ bool Net::detect(const cv::Mat & in_img, float * out_scores, float * out_boxes,
316319

317320
std::vector<int> Net::getInputDims() const
318321
{
319-
auto dims = engine_->getBindingDimensions(0);
322+
const auto dims = engine_->getTensorShape(name_tensor_in_.c_str());
320323
return {dims.d[1], dims.d[2], dims.d[3]};
321324
}
322325

323326
int Net::getMaxBatchSize() const
324327
{
325-
return engine_->getProfileDimensions(0, 0, nvinfer1::OptProfileSelector::kMAX).d[0];
328+
return engine_->getProfileShape(name_tensor_in_.c_str(), 0, nvinfer1::OptProfileSelector::kMAX)
329+
.d[0];
326330
}
327331

328332
int Net::getInputSize() const
@@ -333,6 +337,6 @@ int Net::getInputSize() const
333337
return input_size;
334338
}
335339

336-
int Net::getMaxDetections() const { return engine_->getBindingDimensions(1).d[1]; }
340+
int Net::getMaxDetections() const { return engine_->getTensorShape(name_tensor_out_.c_str()).d[1]; }
337341

338342
} // namespace yolo

0 commit comments

Comments
 (0)