18 #ifndef __NVDSINFER_MODEL_BUILDER_H__
19 #define __NVDSINFER_MODEL_BUILDER_H__
23 #include <condition_variable>
29 #include <unordered_map>
32 #include <NvInferRuntime.h>
33 #include <NvOnnxParser.h>
35 #include <nvdsinfer_custom_impl.h>
37 #include "nvdsinfer_tlt.h"
60 const std::shared_ptr<DlLibHandle>& dllib)
63 virtual bool isValid()
const = 0;
77 class OnnxModelParser :
public BaseModelParser
81 const std::shared_ptr<DlLibHandle>& handle =
nullptr)
83 m_ModelName(initParams.onnxFilePath) {}
85 bool isValid()
const override {
return !m_ModelName.empty(); }
86 const char*
getModelName()
const override {
return m_ModelName.c_str(); }
91 std::string m_ModelName;
104 class CustomModelParser :
public BaseModelParser
108 const std::shared_ptr<DlLibHandle>& handle);
114 return (
bool)m_CustomParser;
125 return m_CustomParser->hasFullDimsSupported();
129 std::unique_ptr<IModelParser> m_CustomParser;
133 class TrtModelBuilder;
142 std::tuple<nvinfer1::DataType, nvinfer1::TensorFormats>;
144 std::tuple<nvinfer1::DataType, nvinfer1::DeviceType>;
151 std::unordered_map<std::string, TensorIOFormat>
outputFormats;
163 struct ImplicitBuildParams :
public BuildParams
171 bool sanityCheck()
const override;
175 nvinfer1::EnumMax<nvinfer1::OptProfileSelector>()>;
180 struct ExplicitBuildParams :
public BuildParams
193 bool sanityCheck()
const override;
203 : m_Engine(std::move(
engine)), m_DlaCore(dlaCore) {}
206 const std::shared_ptr<nvinfer1::IRuntime>& runtime,
int dlaCore = -1,
207 const std::shared_ptr<DlLibHandle>& dlHandle =
nullptr,
208 nvinfer1::IPluginFactory* pluginFactory =
nullptr);
212 bool hasDla()
const {
return m_DlaCore >= 0; }
216 std::vector<NvDsInferBatchDimsLayerInfo>& layersInfo);
218 int profileIdx, std::vector<NvDsInferBatchDimsLayerInfo>& layersInfo);
232 return m_Engine.get();
238 std::shared_ptr<nvinfer1::IRuntime> m_Runtime;
239 std::unique_ptr<nvinfer1::ICudaEngine> m_Engine;
240 std::shared_ptr<DlLibHandle> m_DlHandle;
241 nvinfer1::IPluginFactory* m_RuntimePluginFactory =
nullptr;
245 nvinfer1::IBuilderConfig *
const builderConfig,
248 nvinfer1::ICudaEngine *& cudaEngine);
259 class TrtModelBuilder
263 const std::shared_ptr<DlLibHandle>& dlHandle =
nullptr,
bool isEngineFile =
false);
271 m_Int8Calibrator = std::move(calibrator);
283 std::string& suggestedPathName);
289 std::unique_ptr<TrtEngine> buildEngine(
290 nvinfer1::INetworkDefinition& network,
BuildParams& options);
295 const std::string& path, nvinfer1::ICudaEngine& engine);
300 const std::string& path,
int dla = -1);
311 std::unique_ptr<TrtEngine> buildEngine();
315 std::unique_ptr<TrtEngine> getCudaEngineFromCustomLib(
327 std::unique_ptr<BuildParams> createImplicitParams(
329 std::unique_ptr<BuildParams> createDynamicParams(
331 void initCommonParams(
337 nvinfer1::ILogger& m_Logger;
338 std::shared_ptr<DlLibHandle> m_DlLib;
339 std::shared_ptr<BaseModelParser> m_Parser;
340 std::unique_ptr<BuildParams> m_Options;
341 std::unique_ptr<nvinfer1::IBuilder> m_Builder;
342 std::unique_ptr<nvinfer1::IBuilderConfig> m_BuilderConfig;
343 std::unique_ptr<nvinfer1::INetworkDefinition> m_Network;
344 std::shared_ptr<nvinfer1::IInt8Calibrator> m_Int8Calibrator;
351 nvinfer1::IBuilderConfig *
const builderConfig,
354 nvinfer1::ICudaEngine *& cudaEngine);