NVIDIA DeepStream SDK API Reference

9.2 Release
sources/libs/nvmultiobjecttracker/include/modules/FrameTransform/trtModule.hpp
Go to the documentation of this file.
1 /*
2  * SPDX-FileCopyrightText: Copyright (c) 2024-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
3  * SPDX-License-Identifier: Apache-2.0
4  *
5  * Licensed under the Apache License, Version 2.0 (the "License");
6  * you may not use this file except in compliance with the License.
7  * You may obtain a copy of the License at
8  *
9  * http://www.apache.org/licenses/LICENSE-2.0
10  *
11  * Unless required by applicable law or agreed to in writing, software
12  * distributed under the License is distributed on an "AS IS" BASIS,
13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  * See the License for the specific language governing permissions and
15  * limitations under the License.
16  */
17 
18 #ifndef TRTMODULE_HPP_
19 #define TRTMODULE_HPP_
20 
21 #include <fstream>
22 #include <functional>
23 #include <memory>
24 #include <cstring>
25 #include <NvInfer.h>
26 #include <NvOnnxParser.h>
27 #include "nvdsinfer_context.h"
28 #include "modules/utility/cuda_common.hpp"
29 #include "modules/NvMultiObjectTracker/NvTrackerParams.hpp"
30 
33 {
34 public:
37 
44  TRTConfigParams(const std::string &configFilePath, const std::string moduleName, const std::string submoduleName);
45 
50  TRTConfigParams(const YAML::Node &fn);
51 
56  void read(const YAML::Node &fn) override;
57 
60  int m_width;
61  int m_height;
62  int m_channel;
63  int m_gpuId;
64  std::vector<int> m_inferDims;
65  size_t m_workspaceSize;
67  std::string m_tltModelKey;
68  std::string m_onnxFilePath;
69  std::string m_engineFilePath;
75 };
76 
78 class TrackerInt8EntropyCalibrator : public nvinfer1::IInt8EntropyCalibrator
79 {
80 public:
85  TrackerInt8EntropyCalibrator(std::string calibrationTableFile)
86  : m_CalibrationTableFile(calibrationTableFile)
87  {}
88 
91 
93  int getBatchSize() const noexcept override { return 0; }
94 
101  bool getBatch(void* bindings[], const char* names[], int nbBindings) noexcept override { return false; }
102 
108  const void*
109  readCalibrationCache(size_t& length) noexcept override
110  {
111  m_CalibrationCache.clear();
112  std::ifstream input(m_CalibrationTableFile, std::ios::binary);
113  input >> std::noskipws;
114  if (input.good())
115  copy(
116  std::istream_iterator<char>(input), std::istream_iterator<char>(),
117  std::back_inserter(m_CalibrationCache)
118  );
119 
120  length = m_CalibrationCache.size();
121  return length ? m_CalibrationCache.data() : nullptr;
122  }
123 
129  void writeCalibrationCache(const void* cache, size_t length) noexcept override {}
130 
131 private:
132  std::string m_CalibrationTableFile;
133  std::vector<char> m_CalibrationCache;
134 };
135 
138 {
139 public:
141  TrtModule();
142 
148  void initializeModel(
149  std::function<void(
150  nvinfer1::INetworkDefinition *network, nvinfer1::IBuilder *builder,
151  nvinfer1::IBuilderConfig *config, int batchSize
152  )> onnxProfileFunc,
153  std::function<void(TrtModule*, const std::vector<int>& sizes)> setRuntimeDimFunc
154  );
155 
157  void createInferEngine();
158 
165  void parseOnnxModel(
166  nvinfer1::INetworkDefinition &network, nvinfer1::ILogger &logger, std::unique_ptr<nvonnxparser::IParser>& parser
167  );
168 
175  nvinfer1::ICudaEngine* decodeTltModel(nvinfer1::IBuilder* const builder, nvinfer1::IBuilderConfig* const config);
176 
181  bool loadTRTEngine();
182 
189  void submitInput(std::vector<void *>& bindings, const std::vector<int>& batchSize, cudaStream_t& cuStream);
190 
192  void printEngineInfo();
193 
198  void setCudaStream(cudaStream_t cuStream) { m_cuStream = cuStream; };
199 
201  std::shared_ptr<nvinfer1::ICudaEngine> m_engine;
202  std::shared_ptr<nvinfer1::IExecutionContext> m_context;
204 protected:
205  std::shared_ptr<nvinfer1::IRuntime> m_runtime;
206  std::shared_ptr<TrackerInt8EntropyCalibrator> m_calibrator;
207  std::string m_absModelFilePath;
208  std::function<void(
209  nvinfer1::INetworkDefinition *network, nvinfer1::IBuilder *builder, nvinfer1::IBuilderConfig *config,
210  int batchSize)> m_onnxProfileFunc;
211  std::function<void(TrtModule *, const std::vector<int>&)> m_setRuntimeDimFunc;
212 };
213 
214 #endif // TRTMODULE_HPP_
TrtModule::m_context
std::shared_ptr< nvinfer1::IExecutionContext > m_context
TensorRT execution context.
Definition: sources/libs/nvmultiobjecttracker/include/modules/FrameTransform/trtModule.hpp:202
TrtModule::setCudaStream
void setCudaStream(cudaStream_t cuStream)
Set the CUDA stream used for TensorRT inference.
Definition: sources/libs/nvmultiobjecttracker/include/modules/FrameTransform/trtModule.hpp:198
TRTConfigParams::m_width
int m_width
Input image patch width.
Definition: sources/libs/nvmultiobjecttracker/include/modules/FrameTransform/trtModule.hpp:60
TrtModule::initializeModel
void initializeModel(std::function< void(nvinfer1::INetworkDefinition *network, nvinfer1::IBuilder *builder, nvinfer1::IBuilderConfig *config, int batchSize)> onnxProfileFunc, std::function< void(TrtModule *, const std::vector< int > &sizes)> setRuntimeDimFunc)
Create TensorRT inference engine; if engine does not exist, serialize from model.
length
__host__ __device__ float length(float2 v)
Compute the Euclidean length of a vector.
Definition: sources/libs/nvmultiobjecttracker/include/modules/cuDCFv2/helper_math.h:2721
TrtModule::parseOnnxModel
void parseOnnxModel(nvinfer1::INetworkDefinition &network, nvinfer1::ILogger &logger, std::unique_ptr< nvonnxparser::IParser > &parser)
Load ONNX model into network.
TrackerInt8EntropyCalibrator::TrackerInt8EntropyCalibrator
TrackerInt8EntropyCalibrator(std::string calibrationTableFile)
Construct a calibrator that reads a serialized calibration table.
Definition: sources/libs/nvmultiobjecttracker/include/modules/FrameTransform/trtModule.hpp:85
ds3d::DataType
DataType
Definition: includes/ds3d/common/idatatype.h:82
TRTConfigParams
Stores TensorRT model and engine configuration.
Definition: sources/libs/nvmultiobjecttracker/include/modules/FrameTransform/trtModule.hpp:32
TrtModule::m_setRuntimeDimFunc
std::function< void(TrtModule *, const std::vector< int > &)> m_setRuntimeDimFunc
Custom function to set runtime dimension required by TRT.
Definition: sources/libs/nvmultiobjecttracker/include/modules/FrameTransform/trtModule.hpp:211
TrackerInt8EntropyCalibrator::getBatch
bool getBatch(void *bindings[], const char *names[], int nbBindings) noexcept override
Provide a calibration batch when available.
Definition: sources/libs/nvmultiobjecttracker/include/modules/FrameTransform/trtModule.hpp:101
TRTConfigParams::m_calibrationTableFilePath
std::string m_calibrationTableFilePath
Reid int8 calibration table file path.
Definition: sources/libs/nvmultiobjecttracker/include/modules/FrameTransform/trtModule.hpp:70
TRTConfigParams::m_maxBatchSize
int m_maxBatchSize
Maximum batch size for reid network.
Definition: sources/libs/nvmultiobjecttracker/include/modules/FrameTransform/trtModule.hpp:58
TrackerInt8EntropyCalibrator
ReID int8 calibrator used for TensorRT int8 precision inference.
Definition: sources/libs/nvmultiobjecttracker/include/modules/FrameTransform/trtModule.hpp:78
TrtModule::printEngineInfo
void printEngineInfo()
Print TRT engine information.
TrtModule::TrtModule
TrtModule()
Construct a TrtModule instance.
cudaStream_t
struct CUstream_st * cudaStream_t
Forward declaration of cudaStream_t.
Definition: includes/nvbufsurftransform.h:40
TRTConfigParams::m_debugVerboseLevel
int m_debugVerboseLevel
Debug message verbose mode level.
Definition: sources/libs/nvmultiobjecttracker/include/modules/FrameTransform/trtModule.hpp:74
TrtModule::createInferEngine
void createInferEngine()
Build a TensorRT engine from the configured network model.
half_float::detail::binary
HALF_CONSTEXPR_CONST binary_t binary
Tag for binary construction.
Definition: includes/half.hpp:553
TRTConfigParams::m_tltEncodedModelFilePath
std::string m_tltEncodedModelFilePath
Reid network tao model path.
Definition: sources/libs/nvmultiobjecttracker/include/modules/FrameTransform/trtModule.hpp:66
TrtModule::decodeTltModel
nvinfer1::ICudaEngine * decodeTltModel(nvinfer1::IBuilder *const builder, nvinfer1::IBuilderConfig *const config)
Decode TAO encrypted model.
TrtModule::m_params
TRTConfigParams m_params
TRT module config.
Definition: sources/libs/nvmultiobjecttracker/include/modules/FrameTransform/trtModule.hpp:198
TRTConfigParams::TRTConfigParams
TRTConfigParams()
Construct a TRTConfigParams instance.
TrtModule
TRT module to perform various deep learning inference.
Definition: sources/libs/nvmultiobjecttracker/include/modules/FrameTransform/trtModule.hpp:137
TrtModule::m_runtime
std::shared_ptr< nvinfer1::IRuntime > m_runtime
TensorRT runtime used to deserialize engines.
Definition: sources/libs/nvmultiobjecttracker/include/modules/FrameTransform/trtModule.hpp:205
TrtModule::loadTRTEngine
bool loadTRTEngine()
Load reid TRT engine.
TRTConfigParams::m_onnxFilePath
std::string m_onnxFilePath
Reid network onnx model path.
Definition: sources/libs/nvmultiobjecttracker/include/modules/FrameTransform/trtModule.hpp:68
TrackerInt8EntropyCalibrator::getBatchSize
int getBatchSize() const noexcept override
Report the calibrator batch size.
Definition: sources/libs/nvmultiobjecttracker/include/modules/FrameTransform/trtModule.hpp:93
TRTConfigParams::m_inferDims
std::vector< int > m_inferDims
Reid input dimension.
Definition: sources/libs/nvmultiobjecttracker/include/modules/FrameTransform/trtModule.hpp:64
TrackerInt8EntropyCalibrator::writeCalibrationCache
void writeCalibrationCache(const void *cache, size_t length) noexcept override
Accept a generated TensorRT calibration cache.
Definition: sources/libs/nvmultiobjecttracker/include/modules/FrameTransform/trtModule.hpp:129
TrtModule::m_cuStream
cudaStream_t m_cuStream
Cuda stream to run all GPU tasks.
Definition: sources/libs/nvmultiobjecttracker/include/modules/FrameTransform/trtModule.hpp:203
TrtModule::submitInput
void submitInput(std::vector< void * > &bindings, const std::vector< int > &batchSize, cudaStream_t &cuStream)
Submit network input for inference.
TRTConfigParams::m_channel
int m_channel
Input image patch channel.
Definition: sources/libs/nvmultiobjecttracker/include/modules/FrameTransform/trtModule.hpp:62
TRTConfigParams::m_inputOrder
int m_inputOrder
Input dimension order: 0: NCHW, 1: NHWC.
Definition: sources/libs/nvmultiobjecttracker/include/modules/FrameTransform/trtModule.hpp:59
NvTrackerParams
Provides common loading helpers for tracker configuration parameters.
Definition: sources/libs/nvmultiobjecttracker/include/modules/NvMultiObjectTracker/NvTrackerParams.hpp:35
TRTConfigParams::m_gpuId
int m_gpuId
Gpu id.
Definition: sources/libs/nvmultiobjecttracker/include/modules/FrameTransform/trtModule.hpp:63
TrtModule::m_onnxProfileFunc
std::function< void(nvinfer1::INetworkDefinition *network, nvinfer1::IBuilder *builder, nvinfer1::IBuilderConfig *config, int batchSize)> m_onnxProfileFunc
Custom function to perform profiling for dynamic shapes required by TRT.
Definition: sources/libs/nvmultiobjecttracker/include/modules/FrameTransform/trtModule.hpp:210
TRTConfigParams::m_height
int m_height
Input image patch height.
Definition: sources/libs/nvmultiobjecttracker/include/modules/FrameTransform/trtModule.hpp:61
TRTConfigParams::m_networkMode
nvinfer1::DataType m_networkMode
Reid network precision.
Definition: sources/libs/nvmultiobjecttracker/include/modules/FrameTransform/trtModule.hpp:71
TRTConfigParams::m_workspaceSize
size_t m_workspaceSize
Work space for reid network in MiB.
Definition: sources/libs/nvmultiobjecttracker/include/modules/FrameTransform/trtModule.hpp:65
TRTConfigParams::m_tltModelKey
std::string m_tltModelKey
Tao model key.
Definition: sources/libs/nvmultiobjecttracker/include/modules/FrameTransform/trtModule.hpp:67
TRTConfigParams::m_engineFilePath
std::string m_engineFilePath
Reid engine path.
Definition: sources/libs/nvmultiobjecttracker/include/modules/FrameTransform/trtModule.hpp:69
TrackerInt8EntropyCalibrator::~TrackerInt8EntropyCalibrator
~TrackerInt8EntropyCalibrator()
Release resources owned by the TrackerInt8EntropyCalibrator instance.
Definition: sources/libs/nvmultiobjecttracker/include/modules/FrameTransform/trtModule.hpp:90
logger
Logger logger
TrtModule::m_absModelFilePath
std::string m_absModelFilePath
Absolute model file path.
Definition: sources/libs/nvmultiobjecttracker/include/modules/FrameTransform/trtModule.hpp:207
TRTConfigParams::m_builderOptimizationLevel
int m_builderOptimizationLevel
Engine builder optimization level.
Definition: sources/libs/nvmultiobjecttracker/include/modules/FrameTransform/trtModule.hpp:73
TrackerInt8EntropyCalibrator::readCalibrationCache
const void * readCalibrationCache(size_t &length) noexcept override
Read the calibration table file into a buffer and return a pointer to it.
Definition: sources/libs/nvmultiobjecttracker/include/modules/FrameTransform/trtModule.hpp:109
TRTConfigParams::read
void read(const YAML::Node &fn) override
Load configuration values from a YAML node.
TrtModule::m_calibrator
std::shared_ptr< TrackerInt8EntropyCalibrator > m_calibrator
TensorRT int8 calibrator.
Definition: sources/libs/nvmultiobjecttracker/include/modules/FrameTransform/trtModule.hpp:206
TrtModule::m_engine
std::shared_ptr< nvinfer1::ICudaEngine > m_engine
TensorRT engine for reid.
Definition: sources/libs/nvmultiobjecttracker/include/modules/FrameTransform/trtModule.hpp:201