26 #include "modules/perception/proto/rt.pb.h" 29 namespace perception {
36 typedef std::map<std::string, std::vector<nvinfer1::Weights>>
WeightMap;
37 typedef std::map<std::string, nvinfer1::ITensor *>
TensorMap;
38 typedef std::map<std::string, nvinfer1::DimsCHW>
TensorDimsMap;
41 const std::map<EltwiseParameter::EltwiseOp, nvinfer1::ElementWiseOperation>
43 {EltwiseParameter_EltwiseOp_PROD,
44 nvinfer1::ElementWiseOperation::kPROD},
45 {EltwiseParameter_EltwiseOp_SUM, nvinfer1::ElementWiseOperation::kSUM},
46 {EltwiseParameter_EltwiseOp_MAX, nvinfer1::ElementWiseOperation::kMAX}};
47 const std::map<std::string, nvinfer1::ActivationType>
active_map{
48 {
"Sigmoid", nvinfer1::ActivationType::kSIGMOID},
49 {
"TanH", nvinfer1::ActivationType::kTANH},
50 {
"ReLU", nvinfer1::ActivationType::kRELU}};
52 "GeForce GTX 1080",
"GeForce GTX 1080 Ti",
"Tesla P4",
53 "Tesla P40",
"GeForce GTX 1070",
"GeForce GTX 1060",
54 "Tesla V100-SXM2-16GB"};
58 RTNet(
const std::string &net_file,
const std::string &model_file,
59 const std::vector<std::string> &outputs,
60 const std::vector<std::string> &inputs);
61 RTNet(
const std::string &net_file,
const std::string &model_file,
62 const std::vector<std::string> &outputs,
63 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,
const std::string &model_root);
71 bool Init(
const std::map<std::string, std::vector<int>> &shapes)
override;
73 void Infer()
override;
75 std::shared_ptr<apollo::perception::base::Blob<float>>
get_blob(
76 const std::string &name)
override;
79 bool addInput(
const TensorDimsMap &tensor_dims_map,
80 const std::map<std::string, std::vector<int>> &shapes,
81 TensorMap *tensor_map);
82 bool shape(
const std::string &name, std::vector<int> *res);
84 void ConstructMap(
const LayerParameter &layer_param, nvinfer1::ILayer *layer,
85 TensorMap *tensor_map, TensorModifyMap *tensor_modify_map);
86 void parse_with_api(
const std::map<std::string, std::vector<int>> &shapes);
87 void addLayer(
const LayerParameter &layer_param,
88 nvinfer1::ITensor *
const *inputs,
int nbInputs,
89 WeightMap *weight_map, nvinfer1::INetworkDefinition *net,
90 TensorMap *tensor_map, TensorModifyMap *tensor_modify_map);
93 nvinfer1::ITensor *
const *inputs, WeightMap *weight_map,
94 nvinfer1::INetworkDefinition *net, TensorMap *tensor_map,
95 TensorModifyMap *tensor_modify_map);
98 nvinfer1::ITensor *
const *inputs, WeightMap *weight_map,
99 nvinfer1::INetworkDefinition *net, TensorMap *tensor_map,
100 TensorModifyMap *tensor_modify_map);
103 nvinfer1::ITensor *
const *inputs,
int nbInputs,
104 nvinfer1::INetworkDefinition *net, TensorMap *tensor_map,
105 TensorModifyMap *tensor_modify_map);
108 nvinfer1::ITensor *
const *inputs,
int nbInputs,
109 nvinfer1::INetworkDefinition *net, TensorMap *tensor_map,
110 TensorModifyMap *tensor_modify_map);
113 nvinfer1::ITensor *
const *inputs,
114 nvinfer1::INetworkDefinition *net, TensorMap *tensor_map,
115 TensorModifyMap *tensor_modify_map);
117 nvinfer1::ITensor *
const *inputs,
int nbInputs,
118 nvinfer1::INetworkDefinition *net, TensorMap *tensor_map,
119 TensorModifyMap *tensor_modify_map);
122 nvinfer1::ITensor *
const *inputs,
123 WeightMap *weight_map,
124 nvinfer1::INetworkDefinition *net,
125 TensorMap *tensor_map,
126 TensorModifyMap *tensor_modify_map);
129 nvinfer1::ITensor *
const *inputs, WeightMap *weight_map,
130 nvinfer1::INetworkDefinition *net, TensorMap *tensor_map,
131 TensorModifyMap *tensor_modify_map);
134 nvinfer1::ITensor *
const *inputs,
135 WeightMap *weight_map,
136 nvinfer1::INetworkDefinition *net,
137 TensorMap *tensor_map,
138 TensorModifyMap *tensor_modify_map);
141 nvinfer1::ITensor *
const *inputs,
int nbInputs,
142 nvinfer1::INetworkDefinition *net, TensorMap *tensor_map,
143 TensorModifyMap *tensor_modify_map);
146 nvinfer1::ITensor *
const *inputs,
147 nvinfer1::INetworkDefinition *net, TensorMap *tensor_map,
148 TensorModifyMap *tensor_modify_map);
151 nvinfer1::ITensor *
const *inputs,
int nbInputs,
152 nvinfer1::INetworkDefinition *net, TensorMap *tensor_map,
153 TensorModifyMap *tensor_modify_map);
156 nvinfer1::ITensor *
const *inputs,
int nbInputs,
157 nvinfer1::INetworkDefinition *net, TensorMap *tensor_map,
158 TensorModifyMap *tensor_modify_map);
161 nvinfer1::ITensor *
const *inputs,
162 nvinfer1::INetworkDefinition *net, TensorMap *tensor_map,
163 TensorModifyMap *tensor_modify_map);
166 nvinfer1::ITensor *
const *inputs,
167 nvinfer1::INetworkDefinition *net, TensorMap *tensor_map,
168 TensorModifyMap *tensor_modify_map);
169 bool checkInt8(
const std::string &gpu_name,
170 nvinfer1::IInt8Calibrator *calibrator);
171 void mergeBN(
int index, LayerParameter *layer_param);
175 bool loadWeights(
const std::string &model_file, WeightMap *weight_map);
176 void init_blob(std::vector<std::string> *names);
179 nvinfer1::IExecutionContext *context_ =
nullptr;
180 cudaStream_t stream_ = 0;
181 std::vector<std::shared_ptr<ArgMax1Plugin>> argmax_plugins_;
182 std::vector<std::shared_ptr<SoftmaxPlugin>> softmax_plugins_;
183 std::vector<std::shared_ptr<SLICEPlugin>> slice_plugins_;
184 std::vector<std::shared_ptr<ReLUPlugin>> relu_plugins_;
185 std::vector<std::string> output_names_;
186 std::vector<std::string> input_names_;
187 std::map<std::string, std::string> tensor_modify_map_;
189 std::shared_ptr<NetParameter> net_param_;
190 WeightMap weight_map_;
191 std::vector<void *> buffers_;
192 int workspaceSize_ = 1;
194 bool is_own_calibrator_ =
true;
195 std::string model_root_;
196 nvinfer1::IBuilder *builder_ =
nullptr;
197 nvinfer1::INetworkDefinition *network_ =
nullptr;
198 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 init_blob(std::vector< std::string > *names)
std::map< std::string, nvinfer1::DimsCHW > TensorDimsMap
Definition: rt_common.h:37
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)
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:35
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:36
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:47
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 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:42
Definition: entropy_calibrator.h:58
void addPermuteLayer(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:51
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:39
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)