diff options
author | Matthew Sloyan <matthew.sloyan@arm.com> | 2021-07-13 19:46:11 +0100 |
---|---|---|
committer | Matthew Sloyan <matthew.sloyan@arm.com> | 2021-08-06 09:25:26 +0000 |
commit | 81beae3a870004795275e9266bc43d845b9f78db (patch) | |
tree | 70af86f3c36c8e330c72770e6f1419ca7b2a4bb8 /src/backends/backendsCommon/test/layerTests | |
parent | 95e9efc28ce70a8cda93e722f5ce90ebc96bdd95 (diff) | |
download | armnn-81beae3a870004795275e9266bc43d845b9f78db.tar.gz |
IVGCVSW-6119 ConstTensorsAsInput: FullyConnected
* Constant weights and biases are now stored as Constant layers.
* Updated Serializer, Deserializer and unit tests to reflect this.
* Updated TfLiteDelegate, TfLiteParser and OnnxParser.
* Updated Schema with IsConstant and ConstantTensorsAsInputs.
* Updated Ref backend to handle constant weights and
bias as inputs rather than reading from member variables.
* Added dynamic or constant input EndToEnd tests.
!android-nn-driver:5959
Signed-off-by: Matthew Sloyan <matthew.sloyan@arm.com>
Change-Id: Ibf3cf437df1100e4b322b0d303c575c6339f9696
Diffstat (limited to 'src/backends/backendsCommon/test/layerTests')
-rw-r--r-- | src/backends/backendsCommon/test/layerTests/FullyConnectedTestImpl.cpp | 112 |
1 files changed, 28 insertions, 84 deletions
diff --git a/src/backends/backendsCommon/test/layerTests/FullyConnectedTestImpl.cpp b/src/backends/backendsCommon/test/layerTests/FullyConnectedTestImpl.cpp index c47048e566..dcf87fe92b 100644 --- a/src/backends/backendsCommon/test/layerTests/FullyConnectedTestImpl.cpp +++ b/src/backends/backendsCommon/test/layerTests/FullyConnectedTestImpl.cpp @@ -22,56 +22,6 @@ template<typename T, typename B> LayerTestResult<T, 2> SimpleFullyConnectedTestImpl( - armnn::IWorkloadFactory& workloadFactory, - const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, - const armnn::ITensorHandleFactory& tensorHandleFactory, - armnn::TensorInfo inputTensorInfo, - armnn::TensorInfo outputTensorInfo, - armnn::TensorInfo weightsDesc, - armnn::TensorInfo biasesDesc, - std::vector<T>& weights, - std::vector<B>& bias, - std::vector<T>& input, - bool biasEnabled, - bool transposeWeights) -{ - std::unique_ptr<armnn::ITensorHandle> inputHandle = tensorHandleFactory.CreateTensorHandle(inputTensorInfo); - std::unique_ptr<armnn::ITensorHandle> outputHandle = tensorHandleFactory.CreateTensorHandle(outputTensorInfo); - - armnn::FullyConnectedQueueDescriptor data; - armnn::WorkloadInfo info; - armnn::ScopedTensorHandle weightsTensor(weightsDesc); - armnn::ScopedTensorHandle biasTensor(biasesDesc); - - std::vector<T> actualOutput(outputTensorInfo.GetNumElements()); - - AllocateAndCopyDataToITensorHandle(&weightsTensor, weights.data()); - AllocateAndCopyDataToITensorHandle(&biasTensor, bias.data()); - - AddInputToWorkload(data, info, inputTensorInfo, inputHandle.get()); - AddOutputToWorkload(data, info, outputTensorInfo, outputHandle.get()); - data.m_Weight = &weightsTensor; - data.m_Bias = &biasTensor; - data.m_Parameters.m_BiasEnabled = biasEnabled; - data.m_Parameters.m_TransposeWeightMatrix = transposeWeights; - - std::unique_ptr<armnn::IWorkload> workload = workloadFactory.CreateFullyConnected(data, info); - LayerTestResult<T, 2> result(outputTensorInfo); - - inputHandle->Allocate(); - outputHandle->Allocate(); - CopyDataToITensorHandle(inputHandle.get(), input.data()); - - ExecuteWorkload(*workload, memoryManager); - - CopyDataFromITensorHandle(actualOutput.data(), outputHandle.get()); - result.m_ActualData = actualOutput; - - return result; -} - -template<typename T, typename B> -LayerTestResult<T, 2> SimpleFullyConnectedTestWeightsAsInputsImpl( armnn::IWorkloadFactory& workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, const armnn::ITensorHandleFactory& tensorHandleFactory, @@ -83,7 +33,8 @@ LayerTestResult<T, 2> SimpleFullyConnectedTestWeightsAsInputsImpl( std::vector<B>& bias, std::vector<T>& input, bool biasEnabled, - bool transposeWeights) + bool transposeWeights, + bool constantWeights) { std::unique_ptr<armnn::ITensorHandle> input0Handle = tensorHandleFactory.CreateTensorHandle(inputTensorInfo); std::unique_ptr<armnn::ITensorHandle> input1Handle = tensorHandleFactory.CreateTensorHandle(weightsTensorInfo); @@ -93,13 +44,23 @@ LayerTestResult<T, 2> SimpleFullyConnectedTestWeightsAsInputsImpl( armnn::FullyConnectedQueueDescriptor data; armnn::WorkloadInfo info; + armnn::ScopedTensorHandle weightsTensor(weightsTensorInfo); + armnn::ScopedTensorHandle biasTensor(biasesTensorInfo); + + AllocateAndCopyDataToITensorHandle(&weightsTensor, weights.data()); + AllocateAndCopyDataToITensorHandle(&biasTensor, bias.data()); AddInputToWorkload(data, info, inputTensorInfo, input0Handle.get()); AddInputToWorkload(data, info, weightsTensorInfo, input1Handle.get()); AddOutputToWorkload(data, info, outputTensorInfo, outputHandle.get()); + + // Need to set as layer members will be null when creating the workload because the optimization hasn't been run. + data.m_Weight = &weightsTensor; + data.m_Bias = &biasTensor; + data.m_Parameters.m_BiasEnabled = biasEnabled; data.m_Parameters.m_TransposeWeightMatrix = transposeWeights; - data.m_Parameters.m_ConstantWeights = false; + data.m_Parameters.m_ConstantWeights = constantWeights; std::unique_ptr<armnn::ITensorHandle> input2Handle = nullptr; if (biasEnabled) @@ -180,36 +141,19 @@ LayerTestResult<T, 2> FullyConnectedTest( std::vector<int32_t> bias = {9250, 67500}; - if (constantWeights) - { - result = SimpleFullyConnectedTestImpl<T>(workloadFactory, - memoryManager, - tensorHandleFactory, - inputTensorInfo, - outputTensorInfo, - weightsDesc, - biasesDesc, - weights, - bias, - input, - biasEnabled, - true); - } - else - { - result = SimpleFullyConnectedTestWeightsAsInputsImpl<T>(workloadFactory, - memoryManager, - tensorHandleFactory, - inputTensorInfo, - outputTensorInfo, - weightsDesc, - biasesDesc, - weights, - bias, - input, - biasEnabled, - true); - } + result = SimpleFullyConnectedTestImpl<T>(workloadFactory, + memoryManager, + tensorHandleFactory, + inputTensorInfo, + outputTensorInfo, + weightsDesc, + biasesDesc, + weights, + bias, + input, + biasEnabled, + true, + constantWeights); if (biasEnabled) { @@ -299,7 +243,7 @@ LayerTestResult<T, 2> FullyConnectedLargeTestCommon( inputTensorInfo, outputTensorInfo, weightsDesc, biasesDesc, weights, biasValues, input, - true, transposeWeights + true, transposeWeights, true ); result.m_ExpectedData = armnnUtils::QuantizedVector<T>({ 965432.0f }, qScale, qOffset); @@ -408,7 +352,7 @@ LayerTestResult<float, 2> FullyConnectedFloat32Test( inputTensorInfo, outputTensorInfo, weightsDesc, biasesDesc, weights, biasValues, input, - biasEnabled, transposeWeights + biasEnabled, transposeWeights, true ); std::vector<float> expectedOutput = |