From b016157f1eea1acc6a84308521c0b90543161da4 Mon Sep 17 00:00:00 2001 From: Sadik Armagan Date: Wed, 3 Aug 2022 11:27:05 +0100 Subject: IVGCVSW-6954 'Arm NN SL Improvements' * Move the Conv2D and DepthwiseConv2D validation to Optimization level when the weights and tensors are as constant inputs * Take into account offset and scales values when doing INT8 to FP32 dequantization Signed-off-by: Sadik Armagan Change-Id: I1f81f15640395ac041923b10dbe9151159715117 --- src/armnn/Network.cpp | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) (limited to 'src/armnn/Network.cpp') diff --git a/src/armnn/Network.cpp b/src/armnn/Network.cpp index 22fc0a3ed4..c4869fae04 100644 --- a/src/armnn/Network.cpp +++ b/src/armnn/Network.cpp @@ -2058,16 +2058,18 @@ IConnectableLayer* NetworkImpl::AddConvolution2dLayer(const Convolution2dDescrip auto layer = m_Graph->AddLayer(convolution2dDescriptor, name); // Add a constant layer for weights ConstantLayer* weightsLayer = m_Graph->AddLayer("Weights"); - weightsLayer->m_LayerOutput = std::make_shared(weights); - layer->m_Weight = std::make_shared(weights); + auto weightsTensorHandle = std::make_shared(weights); + weightsLayer->m_LayerOutput = weightsTensorHandle; + layer->m_Weight = weightsTensorHandle; weightsLayer->GetOutputSlot(0).SetTensorInfo(weightsLayer->m_LayerOutput->GetTensorInfo()); weightsLayer->GetOutputSlot(0).Connect(layer->GetInputSlot(1)); // Add a constant layer for biases if (biases.has_value() && convolution2dDescriptor.m_BiasEnabled) { ConstantLayer* biasLayer = m_Graph->AddLayer("Bias"); - biasLayer->m_LayerOutput = std::make_shared(biases.value()); - layer->m_Bias = std::make_shared(biases.value()); + auto biasTensorHandle = std::make_shared(biases.value()); + biasLayer->m_LayerOutput = biasTensorHandle; + layer->m_Bias = biasTensorHandle; biasLayer->GetOutputSlot(0).SetTensorInfo(biasLayer->m_LayerOutput->GetTensorInfo()); biasLayer->GetOutputSlot(0).Connect(layer->GetInputSlot(2)); } @@ -2113,8 +2115,9 @@ IConnectableLayer* NetworkImpl::AddDepthwiseConvolution2dLayer( // Add a constant layer for weights ConstantLayer* weightsLayer = m_Graph->AddLayer("Weights"); - weightsLayer->m_LayerOutput = std::make_shared(weights); - layer->m_Weight = std::make_shared(weights); + auto weightsTensorHandle = std::make_shared(weights); + weightsLayer->m_LayerOutput = weightsTensorHandle; + layer->m_Weight = weightsTensorHandle; weightsLayer->GetOutputSlot(0).SetTensorInfo(weightsLayer->m_LayerOutput->GetTensorInfo()); weightsLayer->GetOutputSlot(0).Connect(layer->GetInputSlot(1)); @@ -2123,8 +2126,9 @@ IConnectableLayer* NetworkImpl::AddDepthwiseConvolution2dLayer( if (biases.has_value() && convolution2dDescriptor.m_BiasEnabled) { ConstantLayer* biasLayer = m_Graph->AddLayer("Bias"); - biasLayer->m_LayerOutput = std::make_shared(biases.value()); - layer->m_Bias = std::make_shared(biases.value()); + auto biasTensorHandle = std::make_shared(biases.value()); + biasLayer->m_LayerOutput = biasTensorHandle; + layer->m_Bias = biasTensorHandle; biasLayer->GetOutputSlot(0).SetTensorInfo(biasLayer->m_LayerOutput->GetTensorInfo()); biasLayer->GetOutputSlot(0).Connect(layer->GetInputSlot(2)); -- cgit v1.2.1