#pragma once #include "Utility.h" #include #include #include #include enum class Precision { FP32, FP16 }; enum class DataType { FLOAT, HALF, INT8, INT32, BOOL, UINT8, INT64, UNKNOWN }; struct Options { using AxisNames = std::map< std::string, std::map >; using AxisSizes = std::map >; using ShapeTensorSizes = std::map, std::vector, std::vector> >; Precision precision = Precision::FP32; AxisNames dynamic_axes_names; AxisSizes dynamic_axes_sizes; ShapeTensorSizes shape_tensor_sizes; std::tuple defaultSizes = { 1,8,16 }; int deviceID = 0; }; bool ConvertONNXToTRT( const Options& options, const std::string& onnxModelPath, std::string& generatedTRTFile, const std::string prefix = "", bool forceConvert = false ); // Forward declaration typedef struct CUstream_st *cudaStream_t; class TRTInferenceEngine { public: TRTInferenceEngine(); ~TRTInferenceEngine(); using AxisSizes = std::map; bool Initialize(const std::string& trtPath, int deviceID, const Options::AxisNames& axisNames = {}); bool InitInputs(const AxisSizes& axisSizes = {}); void Destroy(); void SetInputData(const std::string& name, const void* data, size_t byteCount); template void SetInputData(const std::string& name, const T* data, size_t elementCount); template void SetInputData(const std::string& name, const TPinnedVector& data); void GetOutputData(const std::string& name, void* data, size_t byteCount); template void GetOutputData(const std::string& name, T* data, size_t elementCount); template void GetOutputData(const std::string& name, TPinnedVector& data); void SetInputDataAsync(const std::string& name, const void* data, size_t byteCount, cudaStream_t stream); template void SetInputDataAsync(const std::string& name, const T* data, size_t elementCount, cudaStream_t stream); template void SetInputDataAsync(const std::string& name, const TPinnedVector& data, cudaStream_t stream); void GetOutputDataAsync(const std::string& name, void* data, size_t byteCount, cudaStream_t stream); template void GetOutputDataAsync(const std::string& name, T* data, size_t elementCount, cudaStream_t stream); template void GetOutputDataAsync(const std::string& name, TPinnedVector& data, cudaStream_t stream); std::vector GetInputTensorNames() const; std::vector GetOutputTensorNames() const; bool GetTensorShape(std::string name, std::vector& shape) const; DataType GetTensorDataType(std::string name) const; bool Enqueue(cudaStream_t stream); private: class Impl; std::shared_ptr m_impl = nullptr; }; #include "InferenceEngine.inl"