24 #include "modules/perception/proto/rt.pb.h" 30 namespace perception {
33 class DFMBPSROIAlignPlugin;
34 class RCNNProposalPlugin;
35 class RPNProposalSSDPlugin;
40 typedef std::map<std::string, std::vector<nvinfer1::Weights>>
WeightMap;
41 typedef std::map<std::string, nvinfer1::ITensor *>
TensorMap;
42 typedef std::map<std::string, nvinfer1::DimsCHW>
TensorDimsMap;
45 const std::map<EltwiseParameter::EltwiseOp, nvinfer1::ElementWiseOperation>
47 {EltwiseParameter_EltwiseOp_PROD,
48 nvinfer1::ElementWiseOperation::kPROD},
49 {EltwiseParameter_EltwiseOp_SUM, nvinfer1::ElementWiseOperation::kSUM},
50 {EltwiseParameter_EltwiseOp_MAX, nvinfer1::ElementWiseOperation::kMAX}};
51 const std::map<std::string, nvinfer1::ActivationType>
active_map{
52 {
"Sigmoid", nvinfer1::ActivationType::kSIGMOID},
53 {
"TanH", nvinfer1::ActivationType::kTANH},
54 {
"ReLU", nvinfer1::ActivationType::kRELU}};
56 "GeForce GTX 1080",
"GeForce GTX 1080 Ti",
"Tesla P4",
57 "Tesla P40",
"GeForce GTX 1070",
"GeForce GTX 1060",
58 "Tesla V100-SXM2-16GB"};
62 RTNet(
const std::string &net_file,
const std::string &model_file,
63 const std::vector<std::string> &outputs,
64 const std::vector<std::string> &inputs);
65 RTNet(
const std::string &net_file,
const std::string &model_file,
66 const std::vector<std::string> &outputs,
67 const std::vector<std::string> &inputs,
69 RTNet(
const std::string &net_file,
const std::string &model_file,
70 const std::vector<std::string> &outputs,
71 const std::vector<std::string> &inputs,
const std::string &model_root);
75 bool Init(
const std::map<std::string, std::vector<int>> &shapes)
override;
77 void Infer()
override;
79 std::shared_ptr<apollo::perception::base::Blob<float>>
get_blob(
80 const std::string &name)
override;
83 bool addInput(
const TensorDimsMap &tensor_dims_map,
84 const std::map<std::string, std::vector<int>> &shapes,
85 TensorMap *tensor_map);
86 bool shape(
const std::string &name, std::vector<int> *res);
88 void ConstructMap(
const LayerParameter &layer_param, nvinfer1::ILayer *layer,
89 TensorMap *tensor_map, TensorModifyMap *tensor_modify_map);
90 void parse_with_api(
const std::map<std::string, std::vector<int>> &shapes);
91 void addLayer(
const LayerParameter &layer_param,
92 nvinfer1::ITensor *
const *inputs,
int nbInputs,
93 WeightMap *weight_map, nvinfer1::INetworkDefinition *net,
94 TensorMap *tensor_map, TensorModifyMap *tensor_modify_map);
97 nvinfer1::ITensor *
const *inputs, WeightMap *weight_map,
98 nvinfer1::INetworkDefinition *net, TensorMap *tensor_map,
99 TensorModifyMap *tensor_modify_map);
102 nvinfer1::ITensor *
const *inputs, WeightMap *weight_map,
103 nvinfer1::INetworkDefinition *net, TensorMap *tensor_map,
104 TensorModifyMap *tensor_modify_map);
107 nvinfer1::ITensor *
const *inputs,
int nbInputs,
108 nvinfer1::INetworkDefinition *net, TensorMap *tensor_map,
109 TensorModifyMap *tensor_modify_map);
112 nvinfer1::ITensor *
const *inputs,
int nbInputs,
113 nvinfer1::INetworkDefinition *net, TensorMap *tensor_map,
114 TensorModifyMap *tensor_modify_map);
117 nvinfer1::ITensor *
const *inputs,
118 nvinfer1::INetworkDefinition *net, TensorMap *tensor_map,
119 TensorModifyMap *tensor_modify_map);
121 nvinfer1::ITensor *
const *inputs,
int nbInputs,
122 nvinfer1::INetworkDefinition *net, TensorMap *tensor_map,
123 TensorModifyMap *tensor_modify_map);
126 nvinfer1::ITensor *
const *inputs,
127 WeightMap *weight_map,
128 nvinfer1::INetworkDefinition *net,
129 TensorMap *tensor_map,
130 TensorModifyMap *tensor_modify_map);
133 nvinfer1::ITensor *
const *inputs, WeightMap *weight_map,
134 nvinfer1::INetworkDefinition *net, TensorMap *tensor_map,
135 TensorModifyMap *tensor_modify_map);
138 nvinfer1::ITensor *
const *inputs,
139 WeightMap *weight_map,
140 nvinfer1::INetworkDefinition *net,
141 TensorMap *tensor_map,
142 TensorModifyMap *tensor_modify_map);
145 nvinfer1::ITensor *
const *inputs,
int nbInputs,
146 nvinfer1::INetworkDefinition *net, TensorMap *tensor_map,
147 TensorModifyMap *tensor_modify_map);
150 nvinfer1::ITensor *
const *inputs,
151 nvinfer1::INetworkDefinition *net, TensorMap *tensor_map,
152 TensorModifyMap *tensor_modify_map);
155 nvinfer1::ITensor *
const *inputs,
int nbInputs,
156 nvinfer1::INetworkDefinition *net, TensorMap *tensor_map,
157 TensorModifyMap *tensor_modify_map);
160 nvinfer1::ITensor *
const *inputs,
int nbInputs,
161 nvinfer1::INetworkDefinition *net, TensorMap *tensor_map,
162 TensorModifyMap *tensor_modify_map);
165 nvinfer1::ITensor *
const *inputs,
166 nvinfer1::INetworkDefinition *net, TensorMap *tensor_map,
167 TensorModifyMap *tensor_modify_map);
170 nvinfer1::ITensor *
const *inputs,
171 nvinfer1::INetworkDefinition *net, TensorMap *tensor_map,
172 TensorModifyMap *tensor_modify_map);
175 nvinfer1::ITensor *
const *inputs,
int nbInputs,
176 nvinfer1::INetworkDefinition *net,
177 TensorMap *tensor_map,
178 TensorModifyMap *tensor_modify_map);
181 nvinfer1::ITensor *
const *inputs,
int nbInputs,
182 nvinfer1::INetworkDefinition *net,
183 TensorMap *tensor_map,
184 TensorModifyMap *tensor_modify_map);
187 nvinfer1::ITensor *
const *inputs,
int nbInputs,
188 nvinfer1::INetworkDefinition *net,
189 TensorMap *tensor_map,
190 TensorModifyMap *tensor_modify_map);
192 bool checkInt8(
const std::string &gpu_name,
193 nvinfer1::IInt8Calibrator *calibrator);
194 void mergeBN(
int index, LayerParameter *layer_param);
198 bool loadWeights(
const std::string &model_file, WeightMap *weight_map);
199 void init_blob(std::vector<std::string> *names);
202 nvinfer1::IExecutionContext *context_ =
nullptr;
203 cudaStream_t stream_ = 0;
204 std::vector<std::shared_ptr<ArgMax1Plugin>> argmax_plugins_;
205 std::vector<std::shared_ptr<DFMBPSROIAlignPlugin>> dfmb_psroi_align_plugins_;
206 std::vector<std::shared_ptr<RCNNProposalPlugin>> rcnn_proposal_plugins_;
207 std::vector<std::shared_ptr<RPNProposalSSDPlugin>> rpn_proposal_ssd_plugins_;
208 std::vector<std::shared_ptr<SoftmaxPlugin>> softmax_plugins_;
209 std::vector<std::shared_ptr<SLICEPlugin>> slice_plugins_;
210 std::vector<std::shared_ptr<ReLUPlugin>> relu_plugins_;
211 std::vector<std::string> output_names_;
212 std::vector<std::string> input_names_;
213 std::map<std::string, std::string> tensor_modify_map_;
215 std::shared_ptr<NetParameter> net_param_;
216 WeightMap weight_map_;
217 std::vector<void *> buffers_;
218 int workspaceSize_ = 1;
220 bool is_own_calibrator_ =
true;
221 std::string model_root_;
222 nvinfer1::IBuilder *builder_ =
nullptr;
223 nvinfer1::INetworkDefinition *network_ =
nullptr;
224 std::vector<std::shared_ptr<float>> weights_mem_;
void addReshapeLayer(const LayerParameter &layer_param, nvinfer1::ITensor *const *inputs, nvinfer1::INetworkDefinition *net, TensorMap *tensor_map, TensorModifyMap *tensor_modify_map)
std::shared_ptr< apollo::perception::base::Blob< float > > get_blob(const std::string &name) override
void addArgmaxLayer(const LayerParameter &layer_param, nvinfer1::ITensor *const *inputs, int nbInputs, nvinfer1::INetworkDefinition *net, TensorMap *tensor_map, TensorModifyMap *tensor_modify_map)
bool loadWeights(const std::string &model_file, WeightMap *weight_map)
void addRPNProposalSSDLayer(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)
std::map< std::string, nvinfer1::DimsCHW > TensorDimsMap
Definition: rt_common.h:38
RTNet(const std::string &net_file, const std::string &model_file, const std::vector< std::string > &outputs, const std::vector< std::string > &inputs)
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)
PlanningContext is the runtime context in planning. It is persistent across multiple frames...
Definition: atomic_hash_map.h:25
void addScaleLayer(const LayerParameter &layer_param, nvinfer1::ITensor *const *inputs, WeightMap *weight_map, nvinfer1::INetworkDefinition *net, TensorMap *tensor_map, TensorModifyMap *tensor_modify_map)
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)
nvinfer1::Weights loadLayerWeights(const float *data, int size)
void addBatchnormLayer(const LayerParameter &layer_param, nvinfer1::ITensor *const *inputs, WeightMap *weight_map, nvinfer1::INetworkDefinition *net, TensorMap *tensor_map, TensorModifyMap *tensor_modify_map)
std::map< std::string, std::shared_ptr< apollo::perception::base::Blob< float > > > BlobMap
Definition: inference.h:34
std::map< std::string, std::vector< nvinfer1::Weights > > WeightMap
Definition: rt_common.h:36
void addConvLayer(const LayerParameter &layer_param, nvinfer1::ITensor *const *inputs, WeightMap *weight_map, 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)
void addConcatLayer(const LayerParameter &layer_param, nvinfer1::ITensor *const *inputs, int nbInputs, nvinfer1::INetworkDefinition *net, TensorMap *tensor_map, TensorModifyMap *tensor_modify_map)
std::map< std::string, nvinfer1::ITensor * > TensorMap
Definition: rt_common.h:37
bool Init(const std::map< std::string, std::vector< int >> &shapes) override
const std::map< std::string, nvinfer1::ActivationType > active_map
Definition: rt_net.h:51
bool shape(const std::string &name, std::vector< int > *res)
void parse_with_api(const std::map< std::string, std::vector< int >> &shapes)
bool addInput(const TensorDimsMap &tensor_dims_map, const std::map< std::string, std::vector< int >> &shapes, TensorMap *tensor_map)
void addInnerproductLayer(const LayerParameter &layer_param, nvinfer1::ITensor *const *inputs, WeightMap *weight_map, nvinfer1::INetworkDefinition *net, TensorMap *tensor_map, TensorModifyMap *tensor_modify_map)
Definition: inference.h:36
void addPoolingLayer(const LayerParameter &layer_param, nvinfer1::ITensor *const *inputs, nvinfer1::INetworkDefinition *net, TensorMap *tensor_map, TensorModifyMap *tensor_modify_map)
void mergeBN(int index, LayerParameter *layer_param)
void addDFMBPSROIAlignLayer(const LayerParameter &layer_param, nvinfer1::ITensor *const *inputs, int nbInputs, 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)
const std::map< EltwiseParameter::EltwiseOp, nvinfer1::ElementWiseOperation > eltwise_map
Definition: rt_net.h:46
Definition: entropy_calibrator.h:29
void addPermuteLayer(const LayerParameter &layer_param, nvinfer1::ITensor *const *inputs, int nbInputs, 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)
const std::vector< std::string > _gpu_checklist
Definition: rt_net.h:55
void addEltwiseLayer(const LayerParameter &layer_param, nvinfer1::ITensor *const *inputs, 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)
std::map< std::string, std::string > TensorModifyMap
Definition: rt_net.h:43
void addActiveLayer(const LayerParameter &layer_param, nvinfer1::ITensor *const *inputs, int nbInputs, nvinfer1::INetworkDefinition *net, TensorMap *tensor_map, TensorModifyMap *tensor_modify_map)
bool checkInt8(const std::string &gpu_name, nvinfer1::IInt8Calibrator *calibrator)