24#include <migraphx/argument.hpp>
25#include <migraphx/gpu/context.hpp>
26#include <migraphx/gpu/hip.hpp>
27#include <migraphx/gpu/target.hpp>
28#include <migraphx/instruction.hpp>
29#include <migraphx/make_op.hpp>
30#include <migraphx/program.hpp>
31#include <migraphx/ref/target.hpp>
32#include <migraphx/target.hpp>
34#include "modules/perception/common/proto/rt.pb.h"
43class DFMBPSROIAlignPlugin;
44class RCNNProposalPlugin;
45class RPNProposalSSDPlugin;
50 std::shared_ptr<float> value_ptr_;
53 Weights(
size_t size, std::shared_ptr<float> value_ptr)
54 : size_(size), value_ptr_(value_ptr) {}
56 char *
data()
const {
return reinterpret_cast<char *
>(value_ptr_.get()); }
57 size_t bytes()
const {
return size_ *
sizeof(float); }
60typedef migraphx::instruction_ref
Tensor;
63typedef std::map<std::string, std::vector<Weights>>
WeightMap;
69 {
"Sigmoid",
"sigmoid"},
72 {
"LeakyReLU",
"leaky_relu"}};
74const std::map<EltwiseParameter::EltwiseOp, std::string>
eltwise_map{
75 {EltwiseParameter_EltwiseOp_PROD,
"mul"},
76 {EltwiseParameter_EltwiseOp_SUM,
"add"},
77 {EltwiseParameter_EltwiseOp_MAX,
"max"}};
81 MINet(
const std::string &net_file,
const std::string &model_file,
82 const std::vector<std::string> &outputs,
83 const std::vector<std::string> &inputs);
84 MINet(
const std::string &net_file,
const std::string &model_file,
85 const std::vector<std::string> &outputs,
86 const std::vector<std::string> &inputs,
const std::string &model_root);
90 bool Init(
const std::map<std::string, std::vector<int>> &shapes)
override;
92 void Infer()
override;
94 std::shared_ptr<apollo::perception::base::Blob<float>>
get_blob(
95 const std::string &name)
override;
99 const std::map<std::string, std::vector<int>> &shapes,
103 std::vector<Tensor> outputs,
TensorMap *tensor_map,
106 void parse_with_api(
const std::map<std::string, std::vector<int>> &shapes);
109 int nbInputs,
WeightMap *weight_map, migraphx::module *net,
113 WeightMap *weight_map, migraphx::module *net,
117 WeightMap *weight_map, migraphx::module *net,
122 int nbInputs, migraphx::module *net,
127 int nbInputs, migraphx::module *net,
132 migraphx::module *net,
TensorMap *tensor_map,
136 int nbInputs, migraphx::module *net,
TensorMap *tensor_map,
141 migraphx::module *net,
TensorMap *tensor_map,
145 WeightMap *weight_map, migraphx::module *net,
150 migraphx::module *net,
TensorMap *tensor_map,
154 int nbInputs, migraphx::module *net,
159 migraphx::module *net,
TensorMap *tensor_map,
163 int nbInputs, migraphx::module *net,
168 int nbInputs, migraphx::module *net,
173 migraphx::module *net,
TensorMap *tensor_map,
177 migraphx::module *net,
TensorMap *tensor_map,
181 migraphx::module *net,
TensorMap *tensor_map,
185 Tensor const *inputs,
int nbInputs,
186 migraphx::module *net,
TensorMap *tensor_map,
190 Tensor const *inputs,
int nbInputs,
191 migraphx::module *net,
TensorMap *tensor_map,
195 Tensor const *inputs,
int nbInputs,
196 migraphx::module *net,
TensorMap *tensor_map,
199 bool checkInt8(
const std::string &gpu_name);
206 void init_blob(std::map<std::string, Tensor> *tensors);
209 std::vector<std::shared_ptr<DFMBPSROIAlignPlugin>> dfmb_psroi_align_plugins_;
210 std::vector<std::shared_ptr<RCNNProposalPlugin>> rcnn_proposal_plugins_;
211 std::vector<std::shared_ptr<RPNProposalSSDPlugin>> rpn_proposal_ssd_plugins_;
213 std::vector<std::string> output_names_;
214 std::vector<std::string> input_names_;
215 std::map<std::string, Tensor> outputs_;
216 std::map<std::string, Tensor> inputs_;
217 std::map<std::string, std::string> tensor_modify_map_;
218 std::map<std::string, std::string> input_param_map_;
219 std::map<std::string, std::string> output_param_map_;
221 migraphx::module *network_;
222 migraphx::program program_;
223 migraphx::parameter_map parameter_map_;
225 std::shared_ptr<NetParameter> net_param_;
227 std::map<std::string, void *> buffers_;
228 std::string model_root_;
bool checkInt8(const std::string &gpu_name)
void ConstructMap(const LayerParameter &layer_param, std::vector< Tensor > outputs, TensorMap *tensor_map, TensorModifyMap *tensor_modify_map)
void addReshapeLayer(const LayerParameter &layer_param, Tensor const *inputs, migraphx::module *net, TensorMap *tensor_map, TensorModifyMap *tensor_modify_map)
void addInnerproductLayer(const LayerParameter &layer_param, Tensor const *inputs, WeightMap *weight_map, migraphx::module *net, TensorMap *tensor_map, TensorModifyMap *tensor_modify_map)
void addConcatLayer(const LayerParameter &layer_param, Tensor const *inputs, int nbInputs, migraphx::module *net, TensorMap *tensor_map, TensorModifyMap *tensor_modify_map)
void addScaleLayer(const LayerParameter &layer_param, Tensor const *inputs, WeightMap *weight_map, migraphx::module *net, TensorMap *tensor_map, TensorModifyMap *tensor_modify_map)
void addLayer(const LayerParameter &layer_param, Tensor const *inputs, int nbInputs, WeightMap *weight_map, migraphx::module *net, TensorMap *tensor_map, TensorModifyMap *tensor_modify_map)
bool addInput(TensorDimsMap *tensor_dims_map, const std::map< std::string, std::vector< int > > &shapes, TensorMap *tensor_map)
void addConvLayer(const LayerParameter &layer_param, Tensor const *inputs, WeightMap *weight_map, migraphx::module *net, TensorMap *tensor_map, TensorModifyMap *tensor_modify_map)
void addSilenceLayer(const LayerParameter &layer_param, Tensor const *inputs, migraphx::module *net, TensorMap *tensor_map, TensorModifyMap *tensor_modify_map)
void addDeconvLayer(const LayerParameter &layer_param, Tensor const *inputs, WeightMap *weight_map, migraphx::module *net, TensorMap *tensor_map, TensorModifyMap *tensor_modify_map)
bool loadWeights(const std::string &model_file, WeightMap *weight_map)
void addDFMBPSROIAlignLayer(const LayerParameter &layer_param, Tensor const *inputs, int nbInputs, migraphx::module *net, TensorMap *tensor_map, TensorModifyMap *tensor_modify_map)
Weights loadLayerWeights(const float *data, size_t size)
void init_blob(std::map< std::string, Tensor > *tensors)
void addArgmaxLayer(const LayerParameter &layer_param, Tensor const *inputs, int nbInputs, migraphx::module *net, TensorMap *tensor_map, TensorModifyMap *tensor_modify_map)
void addBatchnormLayer(const LayerParameter &layer_param, Tensor const *inputs, WeightMap *weight_map, migraphx::module *net, TensorMap *tensor_map, TensorModifyMap *tensor_modify_map)
bool Init(const std::map< std::string, std::vector< int > > &shapes) override
std::shared_ptr< apollo::perception::base::Blob< float > > get_blob(const std::string &name) override
void addEltwiseLayer(const LayerParameter &layer_param, Tensor const *inputs, migraphx::module *net, TensorMap *tensor_map, TensorModifyMap *tensor_modify_map)
void addSliceLayer(const LayerParameter &layer_param, Tensor const *inputs, int nbInputs, migraphx::module *net, TensorMap *tensor_map, TensorModifyMap *tensor_modify_map)
void addRPNProposalSSDLayer(const LayerParameter &layer_param, Tensor const *inputs, int nbInputs, migraphx::module *net, TensorMap *tensor_map, TensorModifyMap *tensor_modify_map)
void addSoftmaxLayer(const LayerParameter &layer_param, Tensor const *inputs, int nbInputs, migraphx::module *net, TensorMap *tensor_map, TensorModifyMap *tensor_modify_map)
void addRCNNProposalLayer(const LayerParameter &layer_param, Tensor const *inputs, int nbInputs, migraphx::module *net, TensorMap *tensor_map, TensorModifyMap *tensor_modify_map)
void addPaddingLayer(const LayerParameter &layer_param, Tensor const *inputs, migraphx::module *net, TensorMap *tensor_map, TensorModifyMap *tensor_modify_map)
void parse_with_api(const std::map< std::string, std::vector< int > > &shapes)
void addPoolingLayer(const LayerParameter &layer_param, Tensor const *inputs, migraphx::module *net, TensorMap *tensor_map, TensorModifyMap *tensor_modify_map)
void mergeBN(int index, LayerParameter *layer_param)
void addActiveLayer(const LayerParameter &layer_param, Tensor const *inputs, int nbInputs, migraphx::module *net, TensorMap *tensor_map, TensorModifyMap *tensor_modify_map)
void addPermuteLayer(const LayerParameter &layer_param, Tensor const *inputs, int nbInputs, migraphx::module *net, TensorMap *tensor_map, TensorModifyMap *tensor_modify_map)
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
migraphx::operation Operation
std::map< std::string, TensorDims > TensorDimsMap
migraphx::instruction_ref Tensor
std::map< std::string, base::BlobPtr< float > > BlobMap
std::map< std::string, std::vector< Weights > > WeightMap
Weights(size_t size, std::shared_ptr< float > value_ptr)