20#include <NvInferVersion.h>
22#ifdef NV_TENSORRT_MAJOR
23#if NV_TENSORRT_MAJOR == 8
33#include "modules/perception/common/proto/rt.pb.h"
42class DFMBPSROIAlignPlugin;
43class RCNNProposalPlugin;
44class RPNProposalSSDPlugin;
49typedef std::map<std::string, std::vector<nvinfer1::Weights>>
WeightMap;
50typedef std::map<std::string, nvinfer1::ITensor *>
TensorMap;
51typedef std::map<std::string, nvinfer1::DimsCHW>
TensorDimsMap;
54const std::map<EltwiseParameter::EltwiseOp, nvinfer1::ElementWiseOperation>
56 {EltwiseParameter_EltwiseOp_PROD,
57 nvinfer1::ElementWiseOperation::kPROD},
58 {EltwiseParameter_EltwiseOp_SUM, nvinfer1::ElementWiseOperation::kSUM},
59 {EltwiseParameter_EltwiseOp_MAX, nvinfer1::ElementWiseOperation::kMAX}};
60const std::map<std::string, nvinfer1::ActivationType>
active_map{
61 {
"Sigmoid", nvinfer1::ActivationType::kSIGMOID},
62 {
"TanH", nvinfer1::ActivationType::kTANH},
63 {
"ReLU", nvinfer1::ActivationType::kRELU}};
65 "GeForce GTX 1080 Ti",
70 "Tesla V100-SXM2-16GB",
75 RTNet(
const std::string &net_file,
const std::string &model_file,
76 const std::vector<std::string> &outputs,
77 const std::vector<std::string> &inputs);
78 RTNet(
const std::string &net_file,
const std::string &model_file,
79 const std::vector<std::string> &outputs,
80 const std::vector<std::string> &inputs,
82 RTNet(
const std::string &net_file,
const std::string &model_file,
83 const std::vector<std::string> &outputs,
84 const std::vector<std::string> &inputs,
const std::string &model_root);
88 bool Init(
const std::map<std::string, std::vector<int>> &shapes)
override;
90 void Infer()
override;
96 const std::map<std::string, std::vector<int>> &shapes,
98 bool shape(
const std::string &name, std::vector<int> *res);
102 void parse_with_api(
const std::map<std::string, std::vector<int>> &shapes);
104 nvinfer1::ITensor *
const *inputs,
int nbInputs,
105 WeightMap *weight_map, nvinfer1::INetworkDefinition *net,
109 nvinfer1::ITensor *
const *inputs,
WeightMap *weight_map,
110 nvinfer1::INetworkDefinition *net,
TensorMap *tensor_map,
114 nvinfer1::ITensor *
const *inputs,
WeightMap *weight_map,
115 nvinfer1::INetworkDefinition *net,
TensorMap *tensor_map,
119 nvinfer1::ITensor *
const *inputs,
int nbInputs,
120 nvinfer1::INetworkDefinition *net,
TensorMap *tensor_map,
124 nvinfer1::ITensor *
const *inputs,
int nbInputs,
125 nvinfer1::INetworkDefinition *net,
TensorMap *tensor_map,
129 nvinfer1::ITensor *
const *inputs,
130 nvinfer1::INetworkDefinition *net,
TensorMap *tensor_map,
133 nvinfer1::ITensor *
const *inputs,
int nbInputs,
134 nvinfer1::INetworkDefinition *net,
TensorMap *tensor_map,
138 nvinfer1::ITensor *
const *inputs,
140 nvinfer1::INetworkDefinition *net,
145 nvinfer1::ITensor *
const *inputs,
WeightMap *weight_map,
146 nvinfer1::INetworkDefinition *net,
TensorMap *tensor_map,
150 nvinfer1::ITensor *
const *inputs,
152 nvinfer1::INetworkDefinition *net,
157 nvinfer1::ITensor *
const *inputs,
int nbInputs,
158 nvinfer1::INetworkDefinition *net,
TensorMap *tensor_map,
162 nvinfer1::ITensor *
const *inputs,
163 nvinfer1::INetworkDefinition *net,
TensorMap *tensor_map,
167 nvinfer1::ITensor *
const *inputs,
int nbInputs,
168 nvinfer1::INetworkDefinition *net,
TensorMap *tensor_map,
172 nvinfer1::ITensor *
const *inputs,
int nbInputs,
173 nvinfer1::INetworkDefinition *net,
TensorMap *tensor_map,
177 nvinfer1::ITensor *
const *inputs,
178 nvinfer1::INetworkDefinition *net,
TensorMap *tensor_map,
182 nvinfer1::ITensor *
const *inputs,
183 nvinfer1::INetworkDefinition *net,
TensorMap *tensor_map,
187 nvinfer1::ITensor *
const *inputs,
int nbInputs,
188 nvinfer1::INetworkDefinition *net,
193 nvinfer1::ITensor *
const *inputs,
int nbInputs,
194 nvinfer1::INetworkDefinition *net,
199 nvinfer1::ITensor *
const *inputs,
int nbInputs,
200 nvinfer1::INetworkDefinition *net,
204 bool checkInt8(
const std::string &gpu_name,
205 nvinfer1::IInt8Calibrator *calibrator);
211 void init_blob(std::vector<std::string> *names);
214 nvinfer1::IExecutionContext *context_ =
nullptr;
215 cudaStream_t stream_ = 0;
216 std::vector<std::shared_ptr<ArgMax1Plugin>> argmax_plugins_;
217 std::vector<std::shared_ptr<DFMBPSROIAlignPlugin>> dfmb_psroi_align_plugins_;
218 std::vector<std::shared_ptr<RCNNProposalPlugin>> rcnn_proposal_plugins_;
219 std::vector<std::shared_ptr<RPNProposalSSDPlugin>> rpn_proposal_ssd_plugins_;
220 std::vector<std::shared_ptr<SoftmaxPlugin>> softmax_plugins_;
221 std::vector<std::shared_ptr<SLICEPlugin>> slice_plugins_;
222 std::vector<std::shared_ptr<ReLUPlugin>> relu_plugins_;
223 std::vector<std::string> output_names_;
224 std::vector<std::string> input_names_;
225 std::map<std::string, std::string> tensor_modify_map_;
227 std::shared_ptr<NetParameter> net_param_;
229 std::vector<void *> buffers_;
230 int workspaceSize_ = 1;
232 bool is_own_calibrator_ =
true;
233 std::string model_root_;
234 nvinfer1::IBuilder *builder_ =
nullptr;
235 nvinfer1::IBuilderConfig *builder_config_ =
nullptr;
236 nvinfer1::INetworkDefinition *network_ =
nullptr;
237 std::vector<std::shared_ptr<float>> weights_mem_;
void addScaleLayer(const LayerParameter &layer_param, nvinfer1::ITensor *const *inputs, WeightMap *weight_map, nvinfer1::INetworkDefinition *net, TensorMap *tensor_map, TensorModifyMap *tensor_modify_map)
void addRCNNProposalLayer(const LayerParameter &layer_param, nvinfer1::ITensor *const *inputs, int nbInputs, nvinfer1::INetworkDefinition *net, TensorMap *tensor_map, TensorModifyMap *tensor_modify_map)
void addSoftmaxLayer(const LayerParameter &layer_param, nvinfer1::ITensor *const *inputs, int nbInputs, nvinfer1::INetworkDefinition *net, TensorMap *tensor_map, TensorModifyMap *tensor_modify_map)
void addPermuteLayer(const LayerParameter &layer_param, nvinfer1::ITensor *const *inputs, int nbInputs, nvinfer1::INetworkDefinition *net, TensorMap *tensor_map, TensorModifyMap *tensor_modify_map)
void addConcatLayer(const LayerParameter &layer_param, nvinfer1::ITensor *const *inputs, int nbInputs, nvinfer1::INetworkDefinition *net, TensorMap *tensor_map, TensorModifyMap *tensor_modify_map)
void addDFMBPSROIAlignLayer(const LayerParameter &layer_param, nvinfer1::ITensor *const *inputs, int nbInputs, nvinfer1::INetworkDefinition *net, TensorMap *tensor_map, TensorModifyMap *tensor_modify_map)
void addConvLayer(const LayerParameter &layer_param, nvinfer1::ITensor *const *inputs, WeightMap *weight_map, nvinfer1::INetworkDefinition *net, TensorMap *tensor_map, TensorModifyMap *tensor_modify_map)
void parse_with_api(const std::map< std::string, std::vector< int > > &shapes)
bool checkInt8(const std::string &gpu_name, nvinfer1::IInt8Calibrator *calibrator)
void addRPNProposalSSDLayer(const LayerParameter &layer_param, nvinfer1::ITensor *const *inputs, int nbInputs, nvinfer1::INetworkDefinition *net, TensorMap *tensor_map, TensorModifyMap *tensor_modify_map)
void addLayer(const LayerParameter &layer_param, nvinfer1::ITensor *const *inputs, int nbInputs, WeightMap *weight_map, nvinfer1::INetworkDefinition *net, TensorMap *tensor_map, TensorModifyMap *tensor_modify_map)
bool loadWeights(const std::string &model_file, WeightMap *weight_map)
void addArgmaxLayer(const LayerParameter &layer_param, nvinfer1::ITensor *const *inputs, int nbInputs, nvinfer1::INetworkDefinition *net, TensorMap *tensor_map, TensorModifyMap *tensor_modify_map)
void init_blob(std::vector< std::string > *names)
void addInnerproductLayer(const LayerParameter &layer_param, nvinfer1::ITensor *const *inputs, WeightMap *weight_map, nvinfer1::INetworkDefinition *net, TensorMap *tensor_map, TensorModifyMap *tensor_modify_map)
void addActiveLayer(const LayerParameter &layer_param, nvinfer1::ITensor *const *inputs, int nbInputs, nvinfer1::INetworkDefinition *net, TensorMap *tensor_map, TensorModifyMap *tensor_modify_map)
void addSliceLayer(const LayerParameter &layer_param, nvinfer1::ITensor *const *inputs, int nbInputs, nvinfer1::INetworkDefinition *net, TensorMap *tensor_map, TensorModifyMap *tensor_modify_map)
bool addInput(const TensorDimsMap &tensor_dims_map, const std::map< std::string, std::vector< int > > &shapes, TensorMap *tensor_map)
void addBatchnormLayer(const LayerParameter &layer_param, nvinfer1::ITensor *const *inputs, WeightMap *weight_map, nvinfer1::INetworkDefinition *net, TensorMap *tensor_map, TensorModifyMap *tensor_modify_map)
base::BlobPtr< float > get_blob(const std::string &name) override
nvinfer1::Weights loadLayerWeights(const float *data, int size)
bool shape(const std::string &name, std::vector< int > *res)
void addEltwiseLayer(const LayerParameter &layer_param, nvinfer1::ITensor *const *inputs, nvinfer1::INetworkDefinition *net, TensorMap *tensor_map, TensorModifyMap *tensor_modify_map)
bool Init(const std::map< std::string, std::vector< int > > &shapes) override
void mergeBN(int index, LayerParameter *layer_param)
void addPaddingLayer(const LayerParameter &layer_param, nvinfer1::ITensor *const *inputs, nvinfer1::INetworkDefinition *net, TensorMap *tensor_map, TensorModifyMap *tensor_modify_map)
void addDeconvLayer(const LayerParameter &layer_param, nvinfer1::ITensor *const *inputs, WeightMap *weight_map, nvinfer1::INetworkDefinition *net, TensorMap *tensor_map, TensorModifyMap *tensor_modify_map)
void addPoolingLayer(const LayerParameter &layer_param, nvinfer1::ITensor *const *inputs, nvinfer1::INetworkDefinition *net, TensorMap *tensor_map, TensorModifyMap *tensor_modify_map)
void addReshapeLayer(const LayerParameter &layer_param, nvinfer1::ITensor *const *inputs, nvinfer1::INetworkDefinition *net, TensorMap *tensor_map, TensorModifyMap *tensor_modify_map)
void ConstructMap(const LayerParameter &layer_param, nvinfer1::ILayer *layer, TensorMap *tensor_map, TensorModifyMap *tensor_modify_map)
std::shared_ptr< Blob< Dtype > > BlobPtr
std::map< std::string, Tensor > TensorMap
const std::map< EltwiseParameter::EltwiseOp, std::string > eltwise_map
std::map< std::string, std::string > TensorModifyMap
const std::map< std::string, std::string > active_map
const std::vector< std::string > _gpu_checklist
std::map< std::string, TensorDims > TensorDimsMap
std::map< std::string, base::BlobPtr< float > > BlobMap
std::map< std::string, std::vector< Weights > > WeightMap