IVGCVSW-4472 Yolo v3 ExecuteNetwork failing
authorKeith Davis <keith.davis@arm.com>
Wed, 19 Feb 2020 10:08:33 +0000 (10:08 +0000)
committerKeith Davis <keith.davis@arm.com>
Wed, 19 Feb 2020 10:08:33 +0000 (10:08 +0000)
 * 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

src/armnnTfLiteParser/TfLiteParser.cpp
src/armnnTfLiteParser/test/Dequantize.cpp
src/backends/backendsCommon/WorkloadData.cpp
src/backends/reference/RefLayerSupport.cpp
src/backends/reference/RefWorkloadFactory.cpp
src/backends/reference/workloads/RefDebugWorkload.cpp
src/backends/reference/workloads/RefDebugWorkload.hpp

index 593f3eb..f5c01f2 100644 (file)
@@ -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,
index 79dfe2e..663f2ca 100644 (file)
@@ -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 }}});
index fea7225..410469e 100644 (file)
@@ -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
     };
 
index bba83e2..5cb36c4 100644 (file)
@@ -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
     };
 
index dadb456..02dbbab 100644 (file)
@@ -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);
index 2f0b427..af714a3 100644 (file)
@@ -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>;
index 4966ca3..5a2a1cd 100644 (file)
@@ -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>;