diff options
author | Keith Davis <keith.davis@arm.com> | 2020-02-19 10:08:33 +0000 |
---|---|---|
committer | Keith Davis <keith.davis@arm.com> | 2020-02-19 10:08:33 +0000 |
commit | 67e6c54b4c4ff1e46a9ed14014d279794a666969 (patch) | |
tree | 80f272650985f9cd7ae684791dc54d6f68bfd1ca | |
parent | 48d709356269f4f4131d319f6638ab4f7b083931 (diff) | |
download | armnn-67e6c54b4c4ff1e46a9ed14014d279794a666969.tar.gz |
IVGCVSW-4472 Yolo v3 ExecuteNetwork failing
* Add Debug workload for QAsymmS8/U8
* Change Dequantize tests to test AsymmS8 instead of SymmS8
* Fix incorrect supportedness within RefLayerSupport
Signed-off-by: Keith Davis <keith.davis@arm.com>
Change-Id: Ie51f1e33c564d46c86bf0150b1addda3fc093d13
-rw-r--r-- | src/armnnTfLiteParser/TfLiteParser.cpp | 8 | ||||
-rw-r--r-- | src/armnnTfLiteParser/test/Dequantize.cpp | 8 | ||||
-rw-r--r-- | src/backends/backendsCommon/WorkloadData.cpp | 13 | ||||
-rw-r--r-- | src/backends/reference/RefLayerSupport.cpp | 19 | ||||
-rw-r--r-- | src/backends/reference/RefWorkloadFactory.cpp | 18 | ||||
-rw-r--r-- | src/backends/reference/workloads/RefDebugWorkload.cpp | 1 | ||||
-rw-r--r-- | src/backends/reference/workloads/RefDebugWorkload.hpp | 1 |
7 files changed, 44 insertions, 24 deletions
diff --git a/src/armnnTfLiteParser/TfLiteParser.cpp b/src/armnnTfLiteParser/TfLiteParser.cpp index 593f3eb02d..f5c01f249a 100644 --- a/src/armnnTfLiteParser/TfLiteParser.cpp +++ b/src/armnnTfLiteParser/TfLiteParser.cpp @@ -316,7 +316,7 @@ armnn::TensorInfo ToTensorInfo(TfLiteParser::TensorRawPtr tensorPtr, const std:: type = armnn::DataType::Float32; break; case tflite::TensorType_INT8: - if (tensorPtr->quantization->zero_point.size() == 1 && tensorPtr->quantization->zero_point[0] != 0) + if (tensorPtr->quantization->zero_point.size() == 1) { // Per-tensor type = armnn::DataType::QAsymmS8; @@ -398,7 +398,6 @@ armnn::TensorInfo ToTensorInfo(TfLiteParser::TensorRawPtr tensorPtr, const std:: quantizationScales, dimensionMappings[boost::numeric_cast<unsigned int>( tensorPtr->quantization->quantized_dimension)]); - return result; } } @@ -2900,6 +2899,11 @@ TfLiteParser::CreateConstTensor(TensorRawPtr tensorPtr, tensorPtr, tensorInfo, permutationVector); + case armnn::DataType::QAsymmS8: + return CreateConstTensorAndStoreData<int8_t>(bufferPtr, + tensorPtr, + tensorInfo, + permutationVector); case armnn::DataType::Signed32: return CreateConstTensorAndStoreData<int32_t>(bufferPtr, tensorPtr, diff --git a/src/armnnTfLiteParser/test/Dequantize.cpp b/src/armnnTfLiteParser/test/Dequantize.cpp index 79dfe2e26a..663f2ca823 100644 --- a/src/armnnTfLiteParser/test/Dequantize.cpp +++ b/src/armnnTfLiteParser/test/Dequantize.cpp @@ -103,16 +103,16 @@ BOOST_AUTO_TEST_SUITE(TensorflowLiteParser) {{"outputTensor", { 0.0f, 1.5f, 7.5f, 49150.5f, -1.5f,-49152.0f }}}); } - struct SimpleDequantizeFixtureQSymmS8 : DequantizeFixture + struct SimpleDequantizeFixtureQAsymmS8 : DequantizeFixture { - SimpleDequantizeFixtureQSymmS8() : DequantizeFixture("[ 1, 6 ]", + SimpleDequantizeFixtureQAsymmS8() : DequantizeFixture("[ 1, 6 ]", "[ 1, 6 ]", "INT8") {} }; - BOOST_FIXTURE_TEST_CASE(SimpleDequantizeQSymmS8, SimpleDequantizeFixtureQSymmS8) + BOOST_FIXTURE_TEST_CASE(SimpleDequantizeQAsymmS8, SimpleDequantizeFixtureQAsymmS8) { - RunTest<2, armnn::DataType::QSymmS8 , armnn::DataType::Float32>( + RunTest<2, armnn::DataType::QAsymmS8 , armnn::DataType::Float32>( 0, {{"inputTensor", { 0, 1, 5, 127, -128, -1 }}}, {{"outputTensor", { 0.0f, 1.5f, 7.5f, 190.5f, -192.0f, -1.5f }}}); diff --git a/src/backends/backendsCommon/WorkloadData.cpp b/src/backends/backendsCommon/WorkloadData.cpp index fea72256a1..410469e97d 100644 --- a/src/backends/backendsCommon/WorkloadData.cpp +++ b/src/backends/backendsCommon/WorkloadData.cpp @@ -1045,8 +1045,7 @@ void AdditionQueueDescriptor::Validate(const WorkloadInfo& workloadInfo) const DataType::Float16, DataType::QAsymmS8, DataType::QAsymmU8, - DataType::QSymmS16, - DataType::QSymmS8 + DataType::QSymmS16 }; ValidateDataTypes(inputTensorInfo0, supportedTypes, descriptorName); @@ -1079,7 +1078,7 @@ void MultiplicationQueueDescriptor::Validate(const WorkloadInfo& workloadInfo) c { DataType::Float32, DataType::QAsymmU8, - DataType::QSymmS8, + DataType::QAsymmS8, DataType::QSymmS16, DataType::Float16 }; @@ -1389,8 +1388,8 @@ void ResizeQueueDescriptor::Validate(const WorkloadInfo& workloadInfo) const { DataType::Float16, DataType::Float32, + DataType::QAsymmS8, DataType::QAsymmU8, - DataType::QSymmS8, DataType::QSymmS16 }; @@ -1543,6 +1542,7 @@ void ConstantQueueDescriptor::Validate(const WorkloadInfo& workloadInfo) const DataType::Float16, DataType::Signed32, DataType::QAsymmU8, + DataType::QAsymmS8, DataType::QSymmS8, DataType::QSymmS16 }; @@ -1570,8 +1570,7 @@ void ReshapeQueueDescriptor::Validate(const WorkloadInfo& workloadInfo) const DataType::Signed32, DataType::QSymmS16, DataType::QAsymmS8, - DataType::QAsymmU8, - DataType::QSymmS8 + DataType::QAsymmU8 }; ValidateDataTypes(inputTensorInfo, supportedTypes, descriptorName); @@ -2114,8 +2113,8 @@ void MaximumQueueDescriptor::Validate(const WorkloadInfo& workloadInfo) const DataType::Float16, DataType::Float32, DataType::Signed32, + DataType::QAsymmS8, DataType::QAsymmU8, - DataType::QSymmS8, DataType::QSymmS16 }; diff --git a/src/backends/reference/RefLayerSupport.cpp b/src/backends/reference/RefLayerSupport.cpp index bba83e23d4..5cb36c4299 100644 --- a/src/backends/reference/RefLayerSupport.cpp +++ b/src/backends/reference/RefLayerSupport.cpp @@ -82,7 +82,6 @@ bool RefLayerSupport::IsActivationSupported(const TensorInfo& input, std::array<DataType,6> supportedTypes = { DataType::Float32, DataType::Float16, - DataType::QSymmS8, DataType::QAsymmS8, DataType::QAsymmU8, DataType::QSymmS16 @@ -147,7 +146,6 @@ bool RefLayerSupport::IsAdditionSupported(const TensorInfo& input0, std::array<DataType,6> supportedTypes = { DataType::Float32, DataType::Float16, - DataType::QSymmS8, DataType::QAsymmS8, DataType::QAsymmU8, DataType::QSymmS16 @@ -332,8 +330,8 @@ bool RefLayerSupport::IsConcatSupported(const std::vector<const TensorInfo*> inp { DataType::Float32, DataType::Float16, - DataType::QSymmS8, DataType::QAsymmU8, + DataType::QAsymmS8, DataType::QSymmS16 }; @@ -355,11 +353,12 @@ bool RefLayerSupport::IsConcatSupported(const std::vector<const TensorInfo*> inp bool RefLayerSupport::IsConstantSupported(const TensorInfo& output, Optional<std::string&> reasonIfUnsupported) const { - std::array<DataType,5> supportedTypes = + std::array<DataType,6> supportedTypes = { DataType::Float32, DataType::Signed32, DataType::QAsymmU8, + DataType::QAsymmS8, DataType::QSymmS8, DataType::QSymmS16 }; @@ -1120,7 +1119,7 @@ bool RefLayerSupport::IsMaximumSupported(const TensorInfo& input0, std::array<DataType,5> supportedTypes = { DataType::Float32, DataType::Float16, - DataType::QSymmS8, + DataType::QAsymmS8, DataType::QAsymmU8, DataType::QSymmS16 }; @@ -1284,11 +1283,11 @@ bool RefLayerSupport::IsMultiplicationSupported(const TensorInfo& input0, { bool supported = true; - std::array<DataType,5> supportedTypes = { + std::array<DataType,6> supportedTypes = { DataType::Float32, DataType::Float16, - DataType::QSymmS8, DataType::QAsymmU8, + DataType::QAsymmS8, DataType::QSymmS16 }; @@ -1416,11 +1415,10 @@ bool RefLayerSupport::IsPooling2dSupported(const TensorInfo& input, bool supported = true; // Define supported output and inputs types. - std::array<DataType,6> supportedTypes = + std::array<DataType,5> supportedTypes = { DataType::Float32, DataType::Float16, - DataType::QSymmS8, DataType::QAsymmS8, DataType::QAsymmU8, DataType::QSymmS16 @@ -1488,7 +1486,6 @@ bool RefLayerSupport::IsReshapeSupported(const TensorInfo& input, DataType::Signed32, DataType::QAsymmS8, DataType::QAsymmU8, - DataType::QSymmS8, DataType::QSymmS16 }; @@ -1532,8 +1529,8 @@ bool RefLayerSupport::IsResizeSupported(const TensorInfo& input, { DataType::Float32, DataType::Float16, - DataType::QSymmS8, DataType::QAsymmU8, + DataType::QAsymmS8, DataType::QSymmS16 }; diff --git a/src/backends/reference/RefWorkloadFactory.cpp b/src/backends/reference/RefWorkloadFactory.cpp index dadb456104..02dbbabf9f 100644 --- a/src/backends/reference/RefWorkloadFactory.cpp +++ b/src/backends/reference/RefWorkloadFactory.cpp @@ -65,6 +65,16 @@ bool IsQSymmS8(const WorkloadInfo& info) return IsDataType<DataType::QSymmS8>(info); } +bool IsQAsymmS8(const WorkloadInfo& info) +{ + return IsDataType<DataType::QAsymmS8>(info); +} + +bool IsQAsymmU8(const WorkloadInfo& info) +{ + return IsDataType<DataType::QAsymmU8>(info); +} + RefWorkloadFactory::RefWorkloadFactory(const std::shared_ptr<RefMemoryManager>& memoryManager) : m_MemoryManager(memoryManager) { @@ -200,6 +210,14 @@ std::unique_ptr<IWorkload> RefWorkloadFactory::CreateDebug(const DebugQueueDescr { return std::make_unique<RefDebugQSymmS8Workload>(descriptor, info); } + if (IsQAsymmU8(info)) + { + return std::make_unique<RefDebugQAsymmU8Workload>(descriptor, info); + } + if (IsQAsymmS8(info)) + { + return std::make_unique<RefDebugQAsymmS8Workload>(descriptor, info); + } if (IsSigned32(info)) { return std::make_unique<RefDebugSigned32Workload>(descriptor, info); diff --git a/src/backends/reference/workloads/RefDebugWorkload.cpp b/src/backends/reference/workloads/RefDebugWorkload.cpp index 2f0b4276c0..af714a3ca7 100644 --- a/src/backends/reference/workloads/RefDebugWorkload.cpp +++ b/src/backends/reference/workloads/RefDebugWorkload.cpp @@ -47,6 +47,7 @@ void RefDebugWorkload<DataType>::RegisterDebugCallback(const DebugCallbackFuncti template class RefDebugWorkload<DataType::Float16>; template class RefDebugWorkload<DataType::Float32>; template class RefDebugWorkload<DataType::QAsymmU8>; +template class RefDebugWorkload<DataType::QAsymmS8>; template class RefDebugWorkload<DataType::QSymmS16>; template class RefDebugWorkload<DataType::QSymmS8>; template class RefDebugWorkload<DataType::Signed32>; diff --git a/src/backends/reference/workloads/RefDebugWorkload.hpp b/src/backends/reference/workloads/RefDebugWorkload.hpp index 4966ca3432..5a2a1cdf1b 100644 --- a/src/backends/reference/workloads/RefDebugWorkload.hpp +++ b/src/backends/reference/workloads/RefDebugWorkload.hpp @@ -40,6 +40,7 @@ private: using RefDebugFloat16Workload = RefDebugWorkload<DataType::Float16>; using RefDebugFloat32Workload = RefDebugWorkload<DataType::Float32>; using RefDebugQAsymmU8Workload = RefDebugWorkload<DataType::QAsymmU8>; +using RefDebugQAsymmS8Workload = RefDebugWorkload<DataType::QAsymmS8>; using RefDebugQSymmS16Workload = RefDebugWorkload<DataType::QSymmS16>; using RefDebugQSymmS8Workload = RefDebugWorkload<DataType::QSymmS8>; using RefDebugSigned32Workload = RefDebugWorkload<DataType::Signed32>; |