aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSadik Armagan <sadik.armagan@arm.com>2019-07-26 16:59:35 +0100
committerSadik Armagan <sadik.armagan@arm.com>2019-07-29 08:17:44 +0000
commit15d63e2ec45a244bd8c7d913d834aa5cab46a807 (patch)
tree902c5ee1f89b45eeb14240d1e460c4acffd3d5f8
parentb7421e5b2a7cd924155b8fc7ec1fc006c0e0519d (diff)
downloadandroid-nn-driver-15d63e2ec45a244bd8c7d913d834aa5cab46a807.tar.gz
IVGCVSW-3582 Fix Skipped Pooling Hal 1.2 Tests
Signed-off-by: Sadik Armagan <sadik.armagan@arm.com> Change-Id: I9f9d11b19de591ec8936822ca229b4090ed318fe
-rw-r--r--1.2/HalPolicy.cpp27
-rw-r--r--1.2/HalPolicy.hpp6
-rw-r--r--ConversionUtils.hpp42
3 files changed, 57 insertions, 18 deletions
diff --git a/1.2/HalPolicy.cpp b/1.2/HalPolicy.cpp
index 7515eb3e..9cad29fa 100644
--- a/1.2/HalPolicy.cpp
+++ b/1.2/HalPolicy.cpp
@@ -25,7 +25,6 @@ bool HandledByV1_0(V1_2::OperationType operationType)
switch (static_cast<V1_0::OperationType>(operationType))
{
case V1_0::OperationType::ADD:
- case V1_0::OperationType::AVERAGE_POOL_2D:
case V1_0::OperationType::CONCATENATION:
case V1_0::OperationType::DEPTH_TO_SPACE:
case V1_0::OperationType::DEQUANTIZE:
@@ -34,12 +33,10 @@ bool HandledByV1_0(V1_2::OperationType operationType)
case V1_0::OperationType::FULLY_CONNECTED:
case V1_0::OperationType::HASHTABLE_LOOKUP:
case V1_0::OperationType::L2_NORMALIZATION:
- case V1_0::OperationType::L2_POOL_2D:
case V1_0::OperationType::LOCAL_RESPONSE_NORMALIZATION:
case V1_0::OperationType::LOGISTIC:
case V1_0::OperationType::LSH_PROJECTION:
case V1_0::OperationType::LSTM:
- case V1_0::OperationType::MAX_POOL_2D:
case V1_0::OperationType::MUL:
case V1_0::OperationType::RESHAPE:
case V1_0::OperationType::RNN:
@@ -131,10 +128,16 @@ bool HalPolicy::ConvertOperation(const Operation& operation, const Model& model,
switch (operation.type)
{
+ case V1_2::OperationType::AVERAGE_POOL_2D:
+ return ConvertAveragePool2d(operation, model, data);
case V1_2::OperationType::CONV_2D:
return ConvertConv2d(operation, model, data);
case V1_2::OperationType::DEPTHWISE_CONV_2D:
return ConvertDepthwiseConv2d(operation, model, data);
+ case V1_2::OperationType::L2_POOL_2D:
+ return ConvertL2Pool2d(operation, model, data);
+ case V1_2::OperationType::MAX_POOL_2D:
+ return ConvertMaxPool2d(operation, model, data);
case V1_2::OperationType::MAXIMUM:
return ConvertMaximum(operation, model, data);
case V1_2::OperationType::MINIMUM:
@@ -167,6 +170,12 @@ bool HalPolicy::ConvertOperation(const Operation& operation, const Model& model,
}
}
+bool HalPolicy::ConvertAveragePool2d(const Operation& operation, const Model& model, ConversionData& data)
+{
+ ALOGV("hal_1_2::HalPolicy::ConvertAveragePool2d()");
+ return ConvertPooling2d<hal_1_2::HalPolicy>(operation, __func__, armnn::PoolingAlgorithm::Average, model, data);
+}
+
bool HalPolicy::ConvertConv2d(const Operation& operation, const Model& model, ConversionData& data)
{
ALOGV("hal_1_2::HalPolicy::ConvertConv2d()");
@@ -485,6 +494,18 @@ bool HalPolicy::ConvertDepthwiseConv2d(const Operation& operation, const Model&
return SetupAndTrackLayerOutputSlot<hal_1_2::HalPolicy>(operation, 0, *endLayer, model, data);
}
+bool HalPolicy::ConvertL2Pool2d(const Operation& operation, const Model& model, ConversionData& data)
+{
+ ALOGV("hal_1_2::HalPolicy::ConvertL2Pool2d()");
+ return ConvertPooling2d<hal_1_2::HalPolicy>(operation, __func__, armnn::PoolingAlgorithm::L2, model, data);
+}
+
+bool HalPolicy::ConvertMaxPool2d(const Operation& operation, const Model& model, ConversionData& data)
+{
+ ALOGV("hal_1_2::HalPolicy::ConvertMaxPool2d()");
+ return ConvertPooling2d<hal_1_2::HalPolicy>(operation, __func__, armnn::PoolingAlgorithm::Max, model, data);
+}
+
bool HalPolicy::ConvertMaximum(const Operation& operation, const Model& model, ConversionData& data)
{
ALOGV("hal_1_2::HalPolicy::ConvertMaximum()");
diff --git a/1.2/HalPolicy.hpp b/1.2/HalPolicy.hpp
index d11ae3ca..f689613f 100644
--- a/1.2/HalPolicy.hpp
+++ b/1.2/HalPolicy.hpp
@@ -31,10 +31,16 @@ public:
static bool ConvertOperation(const Operation& operation, const Model& model, ConversionData& data);
private:
+ static bool ConvertAveragePool2d(const Operation& operation, const Model& model, ConversionData& data);
+
static bool ConvertConv2d(const Operation& operation, const Model& model, ConversionData& data);
static bool ConvertDepthwiseConv2d(const Operation& operation, const Model& model, ConversionData& data);
+ static bool ConvertL2Pool2d(const Operation& operation, const Model& model, ConversionData& data);
+
+ static bool ConvertMaxPool2d(const Operation& operation, const Model& model, ConversionData& data);
+
static bool ConvertMaximum(const Operation& operation, const Model& model, ConversionData& data);
static bool ConvertMinimum(const Operation& operation, const Model& model, ConversionData& data);
diff --git a/ConversionUtils.hpp b/ConversionUtils.hpp
index 9a2b08f0..759514d6 100644
--- a/ConversionUtils.hpp
+++ b/ConversionUtils.hpp
@@ -1332,7 +1332,30 @@ bool ConvertPooling2d(const HalOperation& operation,
ActivationFn activation;
- if (operation.inputs.size() == 7)
+ auto inputSize = operation.inputs.size();
+
+ if (inputSize >= 10)
+ {
+ // one input, 9 parameters (padding l r t b, stridex, stridey, width, height, activation type)
+ if (!GetInputScalar<HalPolicy>(operation, 1, HalOperandType::INT32, desc.m_PadLeft, model, data) ||
+ !GetInputScalar<HalPolicy>(operation, 2, HalOperandType::INT32, desc.m_PadRight, model, data) ||
+ !GetInputScalar<HalPolicy>(operation, 3, HalOperandType::INT32, desc.m_PadTop, model, data) ||
+ !GetInputScalar<HalPolicy>(operation, 4, HalOperandType::INT32, desc.m_PadBottom, model, data) ||
+ !GetInputScalar<HalPolicy>(operation, 5, HalOperandType::INT32, desc.m_StrideX, model, data) ||
+ !GetInputScalar<HalPolicy>(operation, 6, HalOperandType::INT32, desc.m_StrideY, model, data) ||
+ !GetInputScalar<HalPolicy>(operation, 7, HalOperandType::INT32, desc.m_PoolWidth, model, data) ||
+ !GetInputScalar<HalPolicy>(operation, 8, HalOperandType::INT32, desc.m_PoolHeight, model, data) ||
+ !GetInputActivationFunction<HalPolicy>(operation, 9, activation, model, data))
+ {
+ return Fail("%s: Operation has invalid inputs", operationName);
+ }
+
+ if (Is12Operand(*output))
+ {
+ desc.m_DataLayout = OptionalDataLayout<HalPolicy>(operation, 10, model, data);
+ }
+ }
+ else
{
// one input, 6 parameters (padding, stridex, stridey, width, height, activation type)
android::nn::PaddingScheme scheme;
@@ -1351,21 +1374,10 @@ bool ConvertPooling2d(const HalOperation& operation,
CalcPadding(inputWidth, desc.m_PoolWidth, desc.m_StrideX, desc.m_PadLeft, desc.m_PadRight, scheme);
CalcPadding(inputHeight, desc.m_PoolHeight, desc.m_StrideY, desc.m_PadTop, desc.m_PadBottom, scheme);
- }
- else
- {
- // one input, 9 parameters (padding l r t b, stridex, stridey, width, height, activation type)
- if (!GetInputScalar<HalPolicy>(operation, 1, HalOperandType::INT32, desc.m_PadLeft, model, data) ||
- !GetInputScalar<HalPolicy>(operation, 2, HalOperandType::INT32, desc.m_PadRight, model, data) ||
- !GetInputScalar<HalPolicy>(operation, 3, HalOperandType::INT32, desc.m_PadTop, model, data) ||
- !GetInputScalar<HalPolicy>(operation, 4, HalOperandType::INT32, desc.m_PadBottom, model, data) ||
- !GetInputScalar<HalPolicy>(operation, 5, HalOperandType::INT32, desc.m_StrideX, model, data) ||
- !GetInputScalar<HalPolicy>(operation, 6, HalOperandType::INT32, desc.m_StrideY, model, data) ||
- !GetInputScalar<HalPolicy>(operation, 7, HalOperandType::INT32, desc.m_PoolWidth, model, data) ||
- !GetInputScalar<HalPolicy>(operation, 8, HalOperandType::INT32, desc.m_PoolHeight, model, data) ||
- !GetInputActivationFunction<HalPolicy>(operation, 9, activation, model, data))
+
+ if (Is12Operand(*output))
{
- return Fail("%s: Operation has invalid inputs", operationName);
+ desc.m_DataLayout = OptionalDataLayout<HalPolicy>(operation, 7, model, data);
}
}