aboutsummaryrefslogtreecommitdiff
path: root/src/backends/tosaReference
diff options
context:
space:
mode:
authorMatthew Sloyan <matthew.sloyan@arm.com>2022-12-08 13:38:23 +0000
committerCathal Corbett <cathal.corbett@arm.com>2022-12-15 10:00:12 +0000
commitfc9d5e7d1e0c1a4d7fed4ebc363832e03c3e2543 (patch)
tree5c1b7efd146256c2de9781ae5a60e22cf2d6142a /src/backends/tosaReference
parent67fd526f8f7c79803d514a6045454049104eced9 (diff)
downloadarmnn-fc9d5e7d1e0c1a4d7fed4ebc363832e03c3e2543.tar.gz
IVGCVSW-7204 Add TransposeConv2d support to TOSA Reference Backend
Signed-off-by: Matthew Sloyan <matthew.sloyan@arm.com> Change-Id: I9bfd597afd41468f304edfbe5d7141378ce60d4f
Diffstat (limited to 'src/backends/tosaReference')
-rw-r--r--src/backends/tosaReference/TosaRefLayerSupport.cpp13
-rw-r--r--src/backends/tosaReference/test/TosaRefEndToEndTests.cpp14
-rw-r--r--src/backends/tosaReference/test/TosaRefLayerSupportTests.cpp51
3 files changed, 75 insertions, 3 deletions
diff --git a/src/backends/tosaReference/TosaRefLayerSupport.cpp b/src/backends/tosaReference/TosaRefLayerSupport.cpp
index 928a19c232..e5427ebc93 100644
--- a/src/backends/tosaReference/TosaRefLayerSupport.cpp
+++ b/src/backends/tosaReference/TosaRefLayerSupport.cpp
@@ -66,6 +66,19 @@ bool TosaRefLayerSupport::IsLayerSupported(const LayerType& type,
inputInfos.push_back(&infos[0]);
outputInfos.push_back(&infos[1]);
break;
+ case LayerType::TransposeConvolution2d:
+ {
+ inputInfos.push_back(&infos[0]); // input
+ outputInfos.push_back(&infos[1]); // output
+ inputInfos.push_back(&infos[2]); // weights
+
+ auto conv2dDesc = PolymorphicDowncast<const TransposeConvolution2dDescriptor*>(&descriptor);
+ if(conv2dDesc->m_BiasEnabled)
+ {
+ inputInfos.push_back(&infos[3]); // bias
+ }
+ break;
+ }
default:
break;
}
diff --git a/src/backends/tosaReference/test/TosaRefEndToEndTests.cpp b/src/backends/tosaReference/test/TosaRefEndToEndTests.cpp
index 2f1231013a..00c0386b51 100644
--- a/src/backends/tosaReference/test/TosaRefEndToEndTests.cpp
+++ b/src/backends/tosaReference/test/TosaRefEndToEndTests.cpp
@@ -10,6 +10,7 @@
#include "backendsCommon/test/Pooling2dEndToEndTestImpl.hpp"
#include "backendsCommon/test/ReshapeEndToEndTestImpl.hpp"
#include "backendsCommon/test/SliceEndToEndTestImpl.hpp"
+#include "backendsCommon/test/TransposeConvolution2dEndToEndTestImpl.hpp"
#include <doctest/doctest.h>
@@ -108,4 +109,17 @@ TEST_CASE("TosaRefSliceEndtoEndTestFloat16")
SliceEndToEndFloat16<DataType::Float16>(tosaDefaultBackends);
}
+// TransposeConvolution2d
+TEST_CASE("TosaRefTransposeConvolution2dEndToEndFloatNhwcTest")
+{
+ TransposeConvolution2dEndToEnd<armnn::DataType::Float32, armnn::DataType::Float32>(
+ tosaDefaultBackends, armnn::DataLayout::NHWC);
+}
+
+TEST_CASE("TosaRefSimpleTransposeConvolution2dEndToEndFloatNhwcTest")
+{
+ SimpleTransposeConvolution2dEndToEnd<armnn::DataType::Float32, armnn::DataType::Float32>(
+ tosaDefaultBackends, armnn::DataLayout::NHWC);
+}
+
} \ No newline at end of file
diff --git a/src/backends/tosaReference/test/TosaRefLayerSupportTests.cpp b/src/backends/tosaReference/test/TosaRefLayerSupportTests.cpp
index 0d0cd6eefc..3c3abc2af3 100644
--- a/src/backends/tosaReference/test/TosaRefLayerSupportTests.cpp
+++ b/src/backends/tosaReference/test/TosaRefLayerSupportTests.cpp
@@ -105,7 +105,7 @@ TEST_CASE("IsLayerSupportedTosaReferenceConv2d")
TosaRefLayerSupport supportChecker;
std::string reasonIfNotSupported;
- auto supported = supportChecker.IsLayerSupported(armnn::LayerType::Convolution2d,
+ auto supported = supportChecker.IsLayerSupported(LayerType::Convolution2d,
{inputInfo, outputInfo, weightsInfo, biasesInfo},
desc,
EmptyOptional(),
@@ -128,7 +128,7 @@ TEST_CASE("IsLayerSupportedTosaReferenceConv2dUnsupported")
TosaRefLayerSupport supportChecker;
std::string reasonIfNotSupported;
- auto supported = supportChecker.IsLayerSupported(armnn::LayerType::Convolution2d,
+ auto supported = supportChecker.IsLayerSupported(LayerType::Convolution2d,
{inputInfo, outputInfo, weightsInfo, biasesInfo},
desc,
EmptyOptional(),
@@ -150,7 +150,7 @@ TEST_CASE("IsLayerSupportedTosaReferenceMaxPooling2d")
desc.m_PoolWidth = 1;
desc.m_StrideX = 1;
desc.m_StrideY = 1;
- desc.m_PoolType = armnn::PoolingAlgorithm::Max;
+ desc.m_PoolType = PoolingAlgorithm::Max;
TosaRefLayerSupport supportChecker;
std::string reasonIfNotSupported;
@@ -324,4 +324,49 @@ TEST_CASE("IsLayerSupportedTosaReferenceSliceUnsupported")
CHECK(!supported);
}
+TEST_CASE("IsLayerSupportedTosaReferenceTransposeConv2d")
+{
+ TensorInfo inputInfo ({ 1, 3, 3, 1 }, DataType::Float32);
+ TensorInfo outputInfo({ 1, 5, 5, 1 }, DataType::Float32);
+ TensorInfo weightsInfo({ 1, 3, 3, 1 }, DataType::Float32);
+ TensorInfo biasesInfo ({ 1 }, DataType::Float32);
+
+ TransposeConvolution2dDescriptor desc;
+ desc.m_StrideX = 1;
+ desc.m_StrideY = 1;
+ desc.m_BiasEnabled = true;
+
+ TosaRefLayerSupport supportChecker;
+ std::string reasonIfNotSupported;
+ auto supported = supportChecker.IsLayerSupported(LayerType::TransposeConvolution2d,
+ {inputInfo, outputInfo, weightsInfo, biasesInfo},
+ desc,
+ EmptyOptional(),
+ EmptyOptional(),
+ reasonIfNotSupported);
+ CHECK(supported);
+}
+
+TEST_CASE("IsLayerSupportedTosaReferenceTransposeConv2dUnsupported")
+{
+ // If inputs and weights are Fp32, output must match.
+ TensorInfo inputInfo ({ 1, 3, 3, 1 }, DataType::Float32);
+ TensorInfo outputInfo({ 1, 5, 5, 1 }, DataType::Float32);
+ TensorInfo weightsInfo({ 1, 3, 3, 1 }, DataType::Float32, 0.0f, 0, true);
+ TensorInfo biasesInfo ({ 1 }, DataType::Float32, 0.0f, 0, true);
+
+ TransposeConvolution2dDescriptor desc;
+ desc.m_BiasEnabled = true;
+
+ TosaRefLayerSupport supportChecker;
+ std::string reasonIfNotSupported;
+ auto supported = supportChecker.IsLayerSupported(LayerType::TransposeConvolution2d,
+ {inputInfo, outputInfo, weightsInfo, biasesInfo},
+ desc,
+ EmptyOptional(),
+ EmptyOptional(),
+ reasonIfNotSupported);
+ CHECK(!supported);
+}
+
}