aboutsummaryrefslogtreecommitdiff
path: root/src/armnnDeserializer/Deserializer.cpp
diff options
context:
space:
mode:
authorSadik Armagan <sadik.armagan@arm.com>2021-03-25 07:46:55 +0000
committerSadik Armagan <sadik.armagan@arm.com>2021-03-25 07:46:55 +0000
commitf0a6dec75832604d5ab18242dc216852821a8279 (patch)
treeff25e64c62c63975a54abd16a8bff744be70d7c0 /src/armnnDeserializer/Deserializer.cpp
parent16fb1a2d9c1d3d80c0f0b6ab549919fbabd2a0b9 (diff)
downloadarmnn-f0a6dec75832604d5ab18242dc216852821a8279.tar.gz
IVGCVSW-5736 and IVGCVSW-5743 'NonConstWeights: Update front-end and TfLiteDelegate support for FullyConnected Operator'
* Added front-end support for non-const weights for FULLY_CONNECTED operator * Added FULLY_CONNECTED end-to-end test * Updated FULLY_CONNECTED operator support in TfLite Arm NN Delegate for non-const weights * Updated the version numbers Signed-off-by: Sadik Armagan <sadik.armagan@arm.com> Change-Id: Iffa5b9aa9297aca4c02d923cce4636c88ac21faa
Diffstat (limited to 'src/armnnDeserializer/Deserializer.cpp')
-rw-r--r--src/armnnDeserializer/Deserializer.cpp37
1 files changed, 26 insertions, 11 deletions
diff --git a/src/armnnDeserializer/Deserializer.cpp b/src/armnnDeserializer/Deserializer.cpp
index c34797725f..633c272f00 100644
--- a/src/armnnDeserializer/Deserializer.cpp
+++ b/src/armnnDeserializer/Deserializer.cpp
@@ -1841,7 +1841,6 @@ void IDeserializer::DeserializerImpl::ParseFullyConnected(GraphPtr graph, unsign
CHECK_LAYERS(graph, 0, layerIndex);
auto inputs = GetInputs(graph, layerIndex);
CHECK_LOCATION();
- CHECK_VALID_SIZE(inputs.size(), 1);
auto outputs = GetOutputs(graph, layerIndex);
CHECK_VALID_SIZE(outputs.size(), 1);
@@ -1853,20 +1852,36 @@ void IDeserializer::DeserializerImpl::ParseFullyConnected(GraphPtr graph, unsign
armnn::FullyConnectedDescriptor fullyConnectedDescriptor;
fullyConnectedDescriptor.m_BiasEnabled = flatBufferDescriptor->biasEnabled();
fullyConnectedDescriptor.m_TransposeWeightMatrix = flatBufferDescriptor->transposeWeightsMatrix();
+ fullyConnectedDescriptor.m_ConstantWeights = flatBufferDescriptor->constantWeights();
+ uint32_t numInputs = 1;
+ if (!fullyConnectedDescriptor.m_ConstantWeights)
+ {
+ numInputs = 2;
+ if (fullyConnectedDescriptor.m_BiasEnabled)
+ {
+ numInputs = 3;
+ }
+ }
+ CHECK_VALID_SIZE(inputs.size(), numInputs);
- armnn::ConstTensor weightsTensor = ToConstTensor(flatBufferLayer->weights());
-
- armnn::IConnectableLayer* layer;
+ armnn::Optional <armnn::ConstTensor> optionalWeights = armnn::EmptyOptional();
armnn::Optional<armnn::ConstTensor> optionalBiases = armnn::EmptyOptional();
- if (flatBufferDescriptor->biasEnabled())
+ if (fullyConnectedDescriptor.m_ConstantWeights)
{
- armnn::ConstTensor biasTensorData = ToConstTensor(flatBufferLayer->biases());
- optionalBiases = armnn::Optional<armnn::ConstTensor>(biasTensorData);
+ armnn::ConstTensor weightsTensorData = ToConstTensor(flatBufferLayer->weights());
+ optionalWeights = armnn::Optional<armnn::ConstTensor>(weightsTensorData);
+
+ if (flatBufferDescriptor->biasEnabled())
+ {
+ armnn::ConstTensor biasTensorData = ToConstTensor(flatBufferLayer->biases());
+ optionalBiases = armnn::Optional<armnn::ConstTensor>(biasTensorData);
+ }
}
- layer = m_Network->AddFullyConnectedLayer(fullyConnectedDescriptor,
- weightsTensor,
- optionalBiases,
- layerName.c_str());
+
+ armnn::IConnectableLayer* layer = m_Network->AddFullyConnectedLayer(fullyConnectedDescriptor,
+ optionalWeights,
+ optionalBiases,
+ layerName.c_str());
armnn::TensorInfo outputTensorInfo = ToTensorInfo(outputs[0]);
layer->GetOutputSlot(0).SetTensorInfo(outputTensorInfo);