IVGCVSW-4712 Fill layer datatype adjustments
authorTeresa Charlin <teresa.charlinreyes@arm.com>
Wed, 29 Jul 2020 08:36:41 +0000 (09:36 +0100)
committerKeithARM <keith.davis@arm.com>
Fri, 31 Jul 2020 11:56:31 +0000 (11:56 +0000)
* Input layer to be int32 instead of same type as output
* Enable float16 end to end tests
* Neon and Cl layer support check for backend

Signed-off-by: Teresa Charlin <teresa.charlinreyes@arm.com>
Change-Id: I6bc889077c8da63eeff66bd45730ce5d8783c419

src/armnnDeserializer/test/DeserializeFill.cpp
src/armnnSerializer/test/SerializerTests.cpp
src/backends/backendsCommon/test/FillEndToEndTestImpl.hpp
src/backends/backendsCommon/test/layerTests/FillTestImpl.cpp
src/backends/cl/ClLayerSupport.cpp
src/backends/cl/test/ClEndToEndTests.cpp
src/backends/neon/NeonLayerSupport.cpp
src/backends/neon/test/NeonEndToEndTests.cpp
src/backends/reference/RefLayerSupport.cpp
src/backends/reference/test/RefEndToEndTests.cpp

index 632734f..163a0fe 100644 (file)
@@ -34,7 +34,7 @@ struct FillFixture : public ParserFlatbuffersSerializeFixture
                           dimensions: [
                             4
                           ],
-                          dataType: "Float32",
+                          dataType: "Signed32",
                           quantizationScale: 0.0
                         }
                       }
@@ -125,7 +125,7 @@ struct SimpleFillFixture : FillFixture
 
 BOOST_FIXTURE_TEST_CASE(Fill, SimpleFillFixture)
 {
-    RunTest<4, armnn::DataType::Float32>(
+    RunTest<4, armnn::DataType::Signed32, armnn::DataType::Float32>(
             0,
             {{"InputLayer", { 1, 3, 3, 1 }}},
             {{"OutputLayer",{ 1, 1, 1, 1, 1, 1, 1, 1, 1}}});
index e059511..e00fb4d 100644 (file)
@@ -1204,7 +1204,7 @@ BOOST_AUTO_TEST_CASE(SerializeFill)
     DECLARE_LAYER_VERIFIER_CLASS_WITH_DESCRIPTOR(Fill)
 
     const std::string layerName("fill");
-    const armnn::TensorInfo inputInfo({4}, armnn::DataType::Float32);
+    const armnn::TensorInfo inputInfo({4}, armnn::DataType::Signed32);
     const armnn::TensorInfo outputInfo({1, 3, 3, 1}, armnn::DataType::Float32);
 
     armnn::FillDescriptor descriptor(1.0f);
index f734a94..5d7601b 100644 (file)
@@ -39,27 +39,31 @@ void FillEndToEnd(const std::vector<armnn::BackendId>& backends)
     FillDescriptor descriptor;
     descriptor.m_Value = 9;
 
-    std::vector<T> inputData{
+    std::vector<int32_t> inputData {
             1, 1, 5, 3
     };
 
-    std::vector<T> expectedOutputData{
+    std::vector<float> floatExpectedOutputData {
             9, 9, 9, 9, 9,
             9, 9, 9, 9, 9,
             9, 9, 9, 9, 9
     };
+    std::vector<T> expectedOutputData = armnnUtils::QuantizedVector<T>(floatExpectedOutputData);
 
-    TensorInfo inputInfo ({ 4 }, ArmnnType);
+    TensorInfo inputInfo ({ 4 }, DataType::Signed32);
     TensorInfo outputInfo({ 1, 1, 5, 3 }, ArmnnType);
 
     armnn::INetworkPtr network = CreateFillNetwork(inputInfo, outputInfo, descriptor);
 
     BOOST_TEST_CHECKPOINT("create a network");
 
-    std::map<int, std::vector<T>> inputTensorData          = {{ 0, inputData }};
+    std::map<int, std::vector<int32_t>> inputTensorData    = {{ 0, inputData }};
     std::map<int, std::vector<T>> expectedOutputTensorData = {{ 0, expectedOutputData }};
 
-    EndToEndLayerTestImpl<ArmnnType, ArmnnType>(move(network), inputTensorData, expectedOutputTensorData, backends);
+    EndToEndLayerTestImpl<DataType::Signed32, ArmnnType>(move(network),
+                                                         inputTensorData,
+                                                         expectedOutputTensorData,
+                                                         backends);
 }
 
 } // anonymous namespace
\ No newline at end of file
index 64970fe..040a988 100644 (file)
@@ -17,13 +17,10 @@ LayerTestResult<T, 4> SimpleFillTest(
     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
 {
     IgnoreUnused(memoryManager);
-    armnn::TensorInfo inputTensorInfo({4}, ArmnnType);
-    inputTensorInfo.SetQuantizationScale(0.0f);
-
+    armnn::TensorInfo inputTensorInfo({4}, armnn::DataType::Signed32);
     armnn::TensorInfo outputTensorInfo({2, 2, 3, 2}, ArmnnType);
-    outputTensorInfo.SetQuantizationScale(0.0f);
 
-    auto input = MakeTensor<T, 1>(inputTensorInfo, ConvertToDataType<ArmnnType>(
+    auto input = MakeTensor<int32_t, 1>(inputTensorInfo, ConvertToDataType<armnn::DataType::Signed32>(
         {2, 2, 3, 2},
         inputTensorInfo));
 
index 74b5aad..1af5c91 100644 (file)
@@ -430,12 +430,16 @@ bool ClLayerSupport::IsElementwiseUnarySupported(const TensorInfo& input,
     }
 }
 
-bool ClLayerSupport::IsFillSupported(const TensorInfo&,
-                                     const TensorInfo&,
-                                     const FillDescriptor&,
-                                     Optional<std::string&>) const
+bool ClLayerSupport::IsFillSupported(const TensorInfo& input,
+                                     const TensorInfo& output,
+                                     const FillDescriptor& descriptor,
+                                     Optional<std::string&> reasonIfUnsupported) const
 {
-    return true;
+    armnn::IgnoreUnused(input);
+    armnn::IgnoreUnused(output);
+    armnn::IgnoreUnused(descriptor);
+
+    return IsClBackendSupported(reasonIfUnsupported);
 }
 
 bool ClLayerSupport::IsFloorSupported(const TensorInfo& input,
index 0ac1b2a..edee368 100644 (file)
@@ -237,6 +237,11 @@ BOOST_AUTO_TEST_CASE(ClFillEndToEndTest)
     FillEndToEnd<armnn::DataType::Float32>(defaultBackends);
 }
 
+BOOST_AUTO_TEST_CASE(RefFillEndToEndTestFloat16)
+{
+    FillEndToEnd<armnn::DataType::Float16>(defaultBackends);
+}
+
 BOOST_AUTO_TEST_CASE(ClFillEndToEndTestInt32)
 {
     FillEndToEnd<armnn::DataType::Signed32>(defaultBackends);
index b848f0c..9dc8a01 100644 (file)
@@ -406,12 +406,16 @@ bool NeonLayerSupport::IsElementwiseUnarySupported(const TensorInfo& input,
     }
 }
 
-bool NeonLayerSupport::IsFillSupported(const TensorInfo&,
-                                       const TensorInfo&,
-                                       const FillDescriptor&,
-                                       Optional<std::string&>) const
+bool NeonLayerSupport::IsFillSupported(const TensorInfo& input,
+                                       const TensorInfo& output,
+                                       const FillDescriptor& descriptor,
+                                       Optional<std::string&> reasonIfUnsupported) const
 {
-    return true;
+    armnn::IgnoreUnused(input);
+    armnn::IgnoreUnused(output);
+    armnn::IgnoreUnused(descriptor);
+
+    return IsNeonBackendSupported(reasonIfUnsupported);
 }
 
 bool NeonLayerSupport::IsFloorSupported(const TensorInfo& input,
index e89718a..ffbae51 100644 (file)
@@ -452,6 +452,11 @@ BOOST_AUTO_TEST_CASE(NeonFillEndToEndTest)
     FillEndToEnd<armnn::DataType::Float32>(defaultBackends);
 }
 
+BOOST_AUTO_TEST_CASE(RefFillEndToEndTestFloat16)
+{
+    FillEndToEnd<armnn::DataType::Float16>(defaultBackends);
+}
+
 BOOST_AUTO_TEST_CASE(NeonFillEndToEndTestInt32)
 {
     FillEndToEnd<armnn::DataType::Signed32>(defaultBackends);
index 80527bd..f6c214e 100644 (file)
@@ -874,7 +874,7 @@ bool RefLayerSupport::IsFillSupported(const TensorInfo& input,
         DataType::Signed32
     };
 
-    supported &= CheckSupportRule(TypeAnyOf(input, supportedTypes), reasonIfUnsupported,
+    supported &= CheckSupportRule(TypeIs(input, DataType::Signed32), reasonIfUnsupported,
                                   "Reference Fill: input type not supported.");
 
     supported &= CheckSupportRule(TypeAnyOf(output, supportedTypes), reasonIfUnsupported,
index 027b621..4598568 100644 (file)
@@ -589,10 +589,10 @@ BOOST_AUTO_TEST_CASE(RefFillEndToEndTest)
     FillEndToEnd<armnn::DataType::Float32>(defaultBackends);
 }
 
-//BOOST_AUTO_TEST_CASE(RefFillEndToEndTestFloat16)
-//{
-//    FillEndToEnd<armnn::DataType::Float16>(defaultBackends);
-//}
+BOOST_AUTO_TEST_CASE(RefFillEndToEndTestFloat16)
+{
+    FillEndToEnd<armnn::DataType::Float16>(defaultBackends);
+}
 
 BOOST_AUTO_TEST_CASE(RefFillEndToEndTestInt32)
 {