8 #include "google/protobuf/repeated_field.h" 9 #include <unordered_map> 11 #include <onnx/onnx.pb.h> 23 using ModelPtr = std::unique_ptr<onnx::ModelProto>;
28 using OperationParsingFunction = void(
OnnxParserImpl::*)(
const onnx::NodeProto& NodeProto);
32 using GraphPtr = std::unique_ptr<onnx::GraphProto>;
54 static ModelPtr LoadModelFromBinaryFile(
const char * fileName);
55 static ModelPtr LoadModelFromTextFile(
const char * fileName);
56 static ModelPtr LoadModelFromString(
const std::string& inputString);
59 static std::vector<std::string> GetInputs(
ModelPtr& model);
62 static std::vector<std::string> GetOutputs(
ModelPtr& model);
75 void SetupInfo(
const google::protobuf::RepeatedPtrField<onnx::ValueInfoProto >* list);
77 std::vector<armnn::TensorInfo> ComputeOutputInfo(std::vector<std::string> outNames,
79 std::vector<armnn::TensorShape> inputShapes);
81 void DetectFullyConnected();
83 template <
typename Location>
84 void GetInputAndParam(
const onnx::NodeProto& node,
85 std::string* inputName,
86 std::string* constName,
87 const Location& location);
89 template <
typename Location>
90 void To1DTensor(
const std::string &name,
const Location& location);
93 std::pair<std::string, std::string> AddPrepareBroadcast(
const std::string& input0,
const std::string& input1);
94 void PrependForBroadcast(
const std::string& outputName,
const std::string& input0,
const std::string& input1);
97 void AddFullyConnected(
const onnx::NodeProto& matmulNode,
const onnx::NodeProto* addNode =
nullptr);
102 const std::string& outputName,
103 const std::string& layerName);
106 void ParseClip(
const onnx::NodeProto& nodeProto);
107 void ParseSigmoid(
const onnx::NodeProto& nodeProto);
108 void ParseTanh(
const onnx::NodeProto& nodeProto);
109 void ParseRelu(
const onnx::NodeProto& nodeProto);
110 void ParseLeakyRelu(
const onnx::NodeProto& nodeProto);
112 void ParseAdd(
const onnx::NodeProto& nodeProto);
113 void ParseAveragePool(
const onnx::NodeProto& nodeProto);
114 void ParseBatchNormalization(
const onnx::NodeProto& node);
115 void ParseConstant(
const onnx::NodeProto& nodeProto);
116 void ParseConv(
const onnx::NodeProto& nodeProto);
117 void ParseFlatten(
const onnx::NodeProto& node);
118 void ParseGlobalAveragePool(
const onnx::NodeProto& node);
119 void ParseMaxPool(
const onnx::NodeProto& nodeProto);
120 void ParseReshape(
const onnx::NodeProto& nodeProto);
125 void SetupInputLayers();
126 void SetupOutputLayers();
131 std::pair<armnn::ConstTensor, std::unique_ptr<float[]>>
135 template <
typename TypeList,
typename Location>
136 void ValidateInputs(
const onnx::NodeProto& node,
137 TypeList validInputs,
138 const Location& location);
149 std::unique_ptr<armnn::TensorInfo> m_info;
150 std::unique_ptr<const onnx::TensorProto> m_tensor;
153 OnnxTensor() : m_info(nullptr), m_tensor(nullptr), m_dtype(onnx::TensorProto::FLOAT) { }
154 bool isConstant() {
return m_tensor !=
nullptr; }
157 std::unordered_map<std::string, OnnxTensor> m_TensorsInfo;
160 static const std::map<std::string, OperationParsingFunction> m_ParserFunctions;
168 std::vector<armnn::IInputSlot*> inputSlots;
170 TensorSlots() : outputSlot(nullptr) { }
173 std::unordered_map<std::string, TensorSlots> m_TensorConnections;
176 std::unordered_map<std::string, std::pair<const onnx::NodeProto*, int>> m_OutputsMap;
182 std::vector<size_t> fusedWithNodes;
183 size_t inputForNodes;
185 UsageSummary() : fusedWithNodes({}), inputForNodes(0) { }
189 std::vector<UsageSummary> m_OutputsFusedAndUsed;
Interface for a layer that is connectable to other layers via InputSlots and OutputSlots.
A Convolution2dDescriptor for the Convolution2dLayer.
flatbuffers::Offset< ConstTensor > CreateConstTensor(flatbuffers::FlatBufferBuilder &_fbb, flatbuffers::Offset< armnnSerializer::TensorInfo > info=0, armnnSerializer::ConstTensorData data_type=armnnSerializer::ConstTensorData_NONE, flatbuffers::Offset< void > data=0)
Copyright (c) 2021 ARM Limited and Contributors.
const std::string GetVersion()
std::unique_ptr< onnx::GraphProto > GraphPtr
std::unique_ptr< onnx::ModelProto > ModelPtr
flatbuffers::Offset< ReshapeLayer > CreateReshapeLayer(flatbuffers::FlatBufferBuilder &_fbb, flatbuffers::Offset< armnnSerializer::LayerBase > base=0, flatbuffers::Offset< armnnSerializer::ReshapeDescriptor > descriptor=0)
An output connection slot for a layer.
EmptyOptional is used to initialize the Optional class in case we want to have default value for an O...
flatbuffers::Offset< ConstantLayer > CreateConstantLayer(flatbuffers::FlatBufferBuilder &_fbb, flatbuffers::Offset< armnnSerializer::LayerBase > base=0, flatbuffers::Offset< armnnSerializer::ConstTensor > input=0)
std::unique_ptr< INetwork, void(*)(INetwork *network)> INetworkPtr
armnn::BindingPointInfo BindingPointInfo
A Pooling2dDescriptor for the Pooling2dLayer.