IVGCVSW-4712 Fill layer datatype adjustments
* 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
diff --git a/src/armnnDeserializer/test/DeserializeFill.cpp b/src/armnnDeserializer/test/DeserializeFill.cpp
index 632734f..163a0fe 100644
--- a/src/armnnDeserializer/test/DeserializeFill.cpp
+++ b/src/armnnDeserializer/test/DeserializeFill.cpp
@@ -34,7 +34,7 @@
dimensions: [
4
],
- dataType: "Float32",
+ dataType: "Signed32",
quantizationScale: 0.0
}
}
@@ -125,7 +125,7 @@
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}}});
diff --git a/src/armnnSerializer/test/SerializerTests.cpp b/src/armnnSerializer/test/SerializerTests.cpp
index e059511..e00fb4d 100644
--- a/src/armnnSerializer/test/SerializerTests.cpp
+++ b/src/armnnSerializer/test/SerializerTests.cpp
@@ -1204,7 +1204,7 @@
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);
diff --git a/src/backends/backendsCommon/test/FillEndToEndTestImpl.hpp b/src/backends/backendsCommon/test/FillEndToEndTestImpl.hpp
index f734a94..5d7601b 100644
--- a/src/backends/backendsCommon/test/FillEndToEndTestImpl.hpp
+++ b/src/backends/backendsCommon/test/FillEndToEndTestImpl.hpp
@@ -39,27 +39,31 @@
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
diff --git a/src/backends/backendsCommon/test/layerTests/FillTestImpl.cpp b/src/backends/backendsCommon/test/layerTests/FillTestImpl.cpp
index 64970fe..040a988 100644
--- a/src/backends/backendsCommon/test/layerTests/FillTestImpl.cpp
+++ b/src/backends/backendsCommon/test/layerTests/FillTestImpl.cpp
@@ -17,13 +17,10 @@
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));
diff --git a/src/backends/cl/ClLayerSupport.cpp b/src/backends/cl/ClLayerSupport.cpp
index 74b5aad..1af5c91 100644
--- a/src/backends/cl/ClLayerSupport.cpp
+++ b/src/backends/cl/ClLayerSupport.cpp
@@ -430,12 +430,16 @@
}
}
-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,
diff --git a/src/backends/cl/test/ClEndToEndTests.cpp b/src/backends/cl/test/ClEndToEndTests.cpp
index 0ac1b2a..edee368 100644
--- a/src/backends/cl/test/ClEndToEndTests.cpp
+++ b/src/backends/cl/test/ClEndToEndTests.cpp
@@ -237,6 +237,11 @@
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);
diff --git a/src/backends/neon/NeonLayerSupport.cpp b/src/backends/neon/NeonLayerSupport.cpp
index b848f0c..9dc8a01 100644
--- a/src/backends/neon/NeonLayerSupport.cpp
+++ b/src/backends/neon/NeonLayerSupport.cpp
@@ -406,12 +406,16 @@
}
}
-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,
diff --git a/src/backends/neon/test/NeonEndToEndTests.cpp b/src/backends/neon/test/NeonEndToEndTests.cpp
index e89718a..ffbae51 100644
--- a/src/backends/neon/test/NeonEndToEndTests.cpp
+++ b/src/backends/neon/test/NeonEndToEndTests.cpp
@@ -452,6 +452,11 @@
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);
diff --git a/src/backends/reference/RefLayerSupport.cpp b/src/backends/reference/RefLayerSupport.cpp
index 80527bd..f6c214e 100644
--- a/src/backends/reference/RefLayerSupport.cpp
+++ b/src/backends/reference/RefLayerSupport.cpp
@@ -874,7 +874,7 @@
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,
diff --git a/src/backends/reference/test/RefEndToEndTests.cpp b/src/backends/reference/test/RefEndToEndTests.cpp
index 027b621..4598568 100644
--- a/src/backends/reference/test/RefEndToEndTests.cpp
+++ b/src/backends/reference/test/RefEndToEndTests.cpp
@@ -589,10 +589,10 @@
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)
{