From b4dd5cc86d4eb841de670f0f102ede599e0d9c40 Mon Sep 17 00:00:00 2001 From: Keith Davis Date: Thu, 7 Apr 2022 11:32:00 +0100 Subject: IVGCVSW-6124 ConstTensorsAsInput: Conv2d - FrontEnd * Update Front-end and Tools. * Updated Serializer, Deserializer and unit tests to reflect this. * Updated TfLiteDelegate, TfLiteParser and OnnxParser. * Updated Ref. * Fixed resulting Neon / CL tests * Unified optimizers for conv2d ops * Optimizer Fix - Fp32ToBf16 * Partial implementation for ACL backends to fix VTS failures !android-nn-driver:7477 Signed-off-by: Keith Davis Change-Id: I5fb18877f7ee32643e15a9818945356274bb401b --- .../backendsCommon/test/WorkloadDataValidation.cpp | 93 +++++++++++++++++++++- 1 file changed, 91 insertions(+), 2 deletions(-) (limited to 'src/backends/backendsCommon/test/WorkloadDataValidation.cpp') diff --git a/src/backends/backendsCommon/test/WorkloadDataValidation.cpp b/src/backends/backendsCommon/test/WorkloadDataValidation.cpp index c715d28ebe..fed21eb911 100644 --- a/src/backends/backendsCommon/test/WorkloadDataValidation.cpp +++ b/src/backends/backendsCommon/test/WorkloadDataValidation.cpp @@ -642,7 +642,7 @@ TEST_CASE("LstmQueueDescriptor_Validate") CHECK_NOTHROW(data.Validate(info)); } -TEST_CASE("BiasPerAxisQuantization_Validate") +TEST_CASE("BiasPerAxisQuantization_ValidateCorrectValues") { constexpr unsigned int nInput = 1u; constexpr unsigned int cInput = 3u; @@ -675,6 +675,7 @@ TEST_CASE("BiasPerAxisQuantization_Validate") WorkloadInfo workloadInfo; AddInputToWorkload(queueDescriptor, workloadInfo, inputInfo, nullptr); + AddInputToWorkload(queueDescriptor, workloadInfo, weightInfo, nullptr); AddOutputToWorkload(queueDescriptor, workloadInfo, outputInfo, nullptr); ScopedTensorHandle weightTensor(weightInfo); @@ -687,17 +688,102 @@ TEST_CASE("BiasPerAxisQuantization_Validate") ScopedTensorHandle biasHandle1(biasInfo1); queueDescriptor.m_Bias = &biasHandle1; + AddInputToWorkload(queueDescriptor, workloadInfo, biasInfo1, nullptr); + CHECK_NOTHROW(queueDescriptor.Validate(workloadInfo)); +} - // Test 2: wrong per-axis quantization values +TEST_CASE("BiasPerAxisQuantization_ValidateIncorrectValues") +{ + constexpr unsigned int nInput = 1u; + constexpr unsigned int cInput = 3u; + constexpr unsigned int hInput = 3u; + constexpr unsigned int wInput = 3u; + + constexpr unsigned int nOutput = nInput; + constexpr unsigned int cOutput = cInput; + constexpr unsigned int hOutput = 1u; + constexpr unsigned int wOutput = 1u; + + const TensorShape inputShape { nInput, cInput, hInput, wInput }; + const TensorShape outputShape{ nOutput, cOutput, hOutput, wOutput }; + const TensorShape weightShape{ cOutput, cInput, hInput, wInput }; + const TensorShape biasShape { cOutput }; + + constexpr DataType inputType = DataType::QAsymmU8; + constexpr DataType weightType = DataType::QSymmS8; + constexpr DataType biasType = DataType::Signed32; + + constexpr float perTensorScale = 1.5f; + const TensorInfo inputInfo (inputShape, inputType, perTensorScale); + const TensorInfo outputInfo(outputShape, inputType, perTensorScale); + + const std::vector weightPerAxisScales = { 2.50f, 3.50f }; + const TensorInfo weightInfo(weightShape, weightType, weightPerAxisScales, 0); + + Convolution2dQueueDescriptor queueDescriptor; + queueDescriptor.m_Parameters.m_BiasEnabled = true; + + WorkloadInfo workloadInfo; + AddInputToWorkload(queueDescriptor, workloadInfo, inputInfo, nullptr); + AddInputToWorkload(queueDescriptor, workloadInfo, weightInfo, nullptr); + AddOutputToWorkload(queueDescriptor, workloadInfo, outputInfo, nullptr); + + ScopedTensorHandle weightTensor(weightInfo); + queueDescriptor.m_Weight = &weightTensor; + + // Test 2: wrong per-axis quantization values const std::vector biasPerAxisScales2 = { 4.00f, 5.00f }; const TensorInfo biasInfo2(biasShape, biasType, biasPerAxisScales2, 0); ScopedTensorHandle biasHandle2(biasInfo2); queueDescriptor.m_Bias = &biasHandle2; + AddInputToWorkload(queueDescriptor, workloadInfo, biasInfo2, nullptr); + CHECK_NOTHROW(queueDescriptor.Validate(workloadInfo)); +} + +TEST_CASE("BiasPerAxisQuantization_ValidateInvalidArgumentException") +{ + constexpr unsigned int nInput = 1u; + constexpr unsigned int cInput = 3u; + constexpr unsigned int hInput = 3u; + constexpr unsigned int wInput = 3u; + + constexpr unsigned int nOutput = nInput; + constexpr unsigned int cOutput = cInput; + constexpr unsigned int hOutput = 1u; + constexpr unsigned int wOutput = 1u; + + const TensorShape inputShape { nInput, cInput, hInput, wInput }; + const TensorShape outputShape{ nOutput, cOutput, hOutput, wOutput }; + const TensorShape weightShape{ cOutput, cInput, hInput, wInput }; + const TensorShape biasShape { cOutput }; + + constexpr DataType inputType = DataType::QAsymmU8; + constexpr DataType weightType = DataType::QSymmS8; + constexpr DataType biasType = DataType::Signed32; + + constexpr float perTensorScale = 1.5f; + const TensorInfo inputInfo (inputShape, inputType, perTensorScale); + const TensorInfo outputInfo(outputShape, inputType, perTensorScale); + + const std::vector weightPerAxisScales = { 2.50f, 3.50f }; + const TensorInfo weightInfo(weightShape, weightType, weightPerAxisScales, 0); + + Convolution2dQueueDescriptor queueDescriptor; + queueDescriptor.m_Parameters.m_BiasEnabled = true; + + WorkloadInfo workloadInfo; + AddInputToWorkload(queueDescriptor, workloadInfo, inputInfo, nullptr); + AddInputToWorkload(queueDescriptor, workloadInfo, weightInfo, nullptr); + AddOutputToWorkload(queueDescriptor, workloadInfo, outputInfo, nullptr); + + ScopedTensorHandle weightTensor(weightInfo); + queueDescriptor.m_Weight = &weightTensor; + // Test 3: mismatched number of quantization scales const std::vector biasPerAxisScales3 = { 3.75f, 5.25f, 5.25f }; const TensorInfo biasInfo3(biasShape, biasType, biasPerAxisScales3, 0); @@ -705,7 +791,10 @@ TEST_CASE("BiasPerAxisQuantization_Validate") ScopedTensorHandle biasHandle3(biasInfo3); queueDescriptor.m_Bias = &biasHandle3; + AddInputToWorkload(queueDescriptor, workloadInfo, biasInfo3, nullptr); + CHECK_THROWS_AS(queueDescriptor.Validate(workloadInfo), InvalidArgumentException); } + } -- cgit v1.2.1