13 #ifndef __NVDSINFER_MODEL_BUILDER_H__
14 #define __NVDSINFER_MODEL_BUILDER_H__
18 #include <condition_variable>
24 #include <unordered_map>
27 #include <NvInferRuntime.h>
28 #include <NvOnnxParser.h>
30 #include <nvdsinfer_custom_impl.h>
32 #include "nvdsinfer_tlt.h"
55 const std::shared_ptr<DlLibHandle>& dllib)
58 virtual bool isValid()
const = 0;
72 class OnnxModelParser :
public BaseModelParser
76 const std::shared_ptr<DlLibHandle>& handle =
nullptr)
78 m_ModelName(initParams.onnxFilePath) {}
80 bool isValid()
const override {
return !m_ModelName.empty(); }
81 const char*
getModelName()
const override {
return m_ModelName.c_str(); }
86 std::string m_ModelName;
99 class CustomModelParser :
public BaseModelParser
103 const std::shared_ptr<DlLibHandle>& handle);
109 return (
bool)m_CustomParser;
120 return m_CustomParser->hasFullDimsSupported();
124 std::unique_ptr<IModelParser> m_CustomParser;
128 class TrtModelBuilder;
137 std::tuple<nvinfer1::DataType, nvinfer1::TensorFormats>;
139 std::tuple<nvinfer1::DataType, nvinfer1::DeviceType>;
146 std::unordered_map<std::string, TensorIOFormat>
outputFormats;
158 struct ImplicitBuildParams :
public BuildParams
166 bool sanityCheck()
const override;
170 nvinfer1::EnumMax<nvinfer1::OptProfileSelector>()>;
175 struct ExplicitBuildParams :
public BuildParams
188 bool sanityCheck()
const override;
198 : m_Engine(std::move(
engine)), m_DlaCore(dlaCore) {}
201 const std::shared_ptr<nvinfer1::IRuntime>& runtime,
int dlaCore = -1,
202 const std::shared_ptr<DlLibHandle>& dlHandle =
nullptr,
203 nvinfer1::IPluginFactory* pluginFactory =
nullptr);
207 bool hasDla()
const {
return m_DlaCore >= 0; }
211 std::vector<NvDsInferBatchDimsLayerInfo>& layersInfo);
213 int profileIdx, std::vector<NvDsInferBatchDimsLayerInfo>& layersInfo);
227 return m_Engine.get();
233 std::shared_ptr<nvinfer1::IRuntime> m_Runtime;
234 std::unique_ptr<nvinfer1::ICudaEngine> m_Engine;
235 std::shared_ptr<DlLibHandle> m_DlHandle;
236 nvinfer1::IPluginFactory* m_RuntimePluginFactory =
nullptr;
240 nvinfer1::IBuilderConfig *
const builderConfig,
243 nvinfer1::ICudaEngine *& cudaEngine);
254 class TrtModelBuilder
258 const std::shared_ptr<DlLibHandle>& dlHandle =
nullptr,
bool isEngineFile =
false);
266 m_Int8Calibrator = std::move(calibrator);
278 std::string& suggestedPathName);
284 std::unique_ptr<TrtEngine> buildEngine(
285 nvinfer1::INetworkDefinition& network,
BuildParams& options);
290 const std::string& path, nvinfer1::ICudaEngine& engine);
295 const std::string& path,
int dla = -1);
306 std::unique_ptr<TrtEngine> buildEngine();
310 std::unique_ptr<TrtEngine> getCudaEngineFromCustomLib(
322 std::unique_ptr<BuildParams> createImplicitParams(
324 std::unique_ptr<BuildParams> createDynamicParams(
326 void initCommonParams(
332 nvinfer1::ILogger& m_Logger;
333 std::shared_ptr<DlLibHandle> m_DlLib;
334 std::shared_ptr<BaseModelParser> m_Parser;
335 std::unique_ptr<BuildParams> m_Options;
336 std::unique_ptr<nvinfer1::IBuilder> m_Builder;
337 std::unique_ptr<nvinfer1::IBuilderConfig> m_BuilderConfig;
338 std::unique_ptr<nvinfer1::INetworkDefinition> m_Network;
339 std::shared_ptr<nvinfer1::IInt8Calibrator> m_Int8Calibrator;
346 nvinfer1::IBuilderConfig *
const builderConfig,
349 nvinfer1::ICudaEngine *& cudaEngine);