diff options
author | Jim Flynn <jim.flynn@arm.com> | 2019-02-28 10:40:49 +0000 |
---|---|---|
committer | Jim Flynn <jim.flynn@arm.com> | 2019-03-07 15:43:47 +0000 |
commit | ac25a1beda8da71a82c0cf2795e2a6eaaeaa26b1 (patch) | |
tree | 2f186eac90aa72f224bd0eccaee3cffa83dea164 /src/armnnDeserializer/Deserializer.cpp | |
parent | d469faf863f4ecd3ba56f27e51884ef0dfeac7bf (diff) | |
download | armnn-ac25a1beda8da71a82c0cf2795e2a6eaaeaa26b1.tar.gz |
IVGCVSW-2697 Add Serialize/Deserialize for the Merger Layer
* Force generation of schema header in every build
* Also fixed typo in OriginsDescriptor comment (Descriptors.hpp)
* Added Serialize/Deserialize check on Addition Layer
* Added Serialize/Deserialize check on Floor Layer
* Added Serialize/Deserialize check on Minimum Layer
* Added Serialize/Deserialize check on Maximum Layer
* Added Serialize/Deserialize check on Multiplication Layer
* Added Serialize/Deserialize check on Division Layer
Change-Id: I1358ea4db7ca506d8bcec2ee64e1fbad6005e723
Signed-off-by: Jim Flynn <jim.flynn@arm.com>
Diffstat (limited to 'src/armnnDeserializer/Deserializer.cpp')
-rw-r--r-- | src/armnnDeserializer/Deserializer.cpp | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/src/armnnDeserializer/Deserializer.cpp b/src/armnnDeserializer/Deserializer.cpp index ed110ad750..d62751d640 100644 --- a/src/armnnDeserializer/Deserializer.cpp +++ b/src/armnnDeserializer/Deserializer.cpp @@ -201,6 +201,7 @@ m_ParserFunctions(Layer_MAX+1, &Deserializer::ParseUnsupportedLayer) m_ParserFunctions[Layer_MaximumLayer] = &Deserializer::ParseMaximum; m_ParserFunctions[Layer_MeanLayer] = &Deserializer::ParseMean; m_ParserFunctions[Layer_MinimumLayer] = &Deserializer::ParseMinimum; + m_ParserFunctions[Layer_MergerLayer] = &Deserializer::ParseMerger; m_ParserFunctions[Layer_MultiplicationLayer] = &Deserializer::ParseMultiplication; m_ParserFunctions[Layer_NormalizationLayer] = &Deserializer::ParseNormalization; m_ParserFunctions[Layer_PadLayer] = &Deserializer::ParsePad; @@ -255,6 +256,8 @@ Deserializer::LayerBaseRawPtr Deserializer::GetBaseLayer(const GraphPtr& graphPt return graphPtr->layers()->Get(layerIndex)->layer_as_MinimumLayer()->base(); case Layer::Layer_MaximumLayer: return graphPtr->layers()->Get(layerIndex)->layer_as_MaximumLayer()->base(); + case Layer::Layer_MergerLayer: + return graphPtr->layers()->Get(layerIndex)->layer_as_MergerLayer()->base(); case Layer::Layer_MultiplicationLayer: return graphPtr->layers()->Get(layerIndex)->layer_as_MultiplicationLayer()->base(); case Layer::Layer_NormalizationLayer: @@ -1111,6 +1114,45 @@ void Deserializer::ParseMaximum(GraphPtr graph, unsigned int layerIndex) RegisterOutputSlots(graph, layerIndex, layer); } +void Deserializer::ParseMerger(GraphPtr graph, unsigned int layerIndex) +{ + CHECK_LAYERS(graph, 0, layerIndex); + CHECK_LOCATION(); + + auto outputs = GetOutputs(graph, layerIndex); + CHECK_VALID_SIZE(outputs.size(), 1); + + auto mergerLayer = graph->layers()->Get(layerIndex)->layer_as_MergerLayer(); + auto layerName = GetLayerName(graph, layerIndex); + auto mergerDescriptor = mergerLayer->descriptor(); + unsigned int numViews = mergerDescriptor->numViews(); + unsigned int numDimensions = mergerDescriptor->numDimensions(); + + // can now check the number of inputs == number of views + auto inputs = GetInputs(graph, layerIndex); + CHECK_VALID_SIZE(inputs.size(), numViews); + + armnn::OriginsDescriptor descriptor(numViews, numDimensions); + auto originsPtr = mergerDescriptor->viewOrigins(); + for (unsigned int v = 0; v < numViews; ++v) + { + auto originPtr = originsPtr->Get(v); + for (unsigned int d = 0; d < numDimensions; ++d) + { + uint32_t value = originPtr->data()->Get(d); + descriptor.SetViewOriginCoord(v, d, value); + } + } + descriptor.SetConcatAxis(mergerDescriptor->concatAxis()); + + IConnectableLayer* layer = m_Network->AddMergerLayer(descriptor, layerName.c_str()); + armnn::TensorInfo outputTensorInfo = ToTensorInfo(outputs[0]); + layer->GetOutputSlot(0).SetTensorInfo(outputTensorInfo); + + RegisterInputSlots(graph, layerIndex, layer); + RegisterOutputSlots(graph, layerIndex, layer); +} + void Deserializer::ParseMultiplication(GraphPtr graph, unsigned int layerIndex) { CHECK_LAYERS(graph, 0, layerIndex); |