aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Monahan <david.monahan@arm.com>2020-05-30 09:48:39 +0100
committerDavid Monahan <david.monahan@arm.com>2020-05-30 11:35:48 +0100
commit4a0c9b99deb88a0ec5de7997f09062686915c6cc (patch)
tree0456d14c0222c9a70ee1ba41f8b0ce384f4f25ad
parentf540eb8111ce5d241111da487be7d817661e29b4 (diff)
downloadarmnn-4a0c9b99deb88a0ec5de7997f09062686915c6cc.tar.gz
IVGCVSW-4888 Update Resize Front end for new parameters
* Added AlignCorners and HalfPixelCenters to Resize and ResizeBilinear * Updated Serializer and Serializer tests !android-nn-driver:3280 Signed-off-by: David Monahan <david.monahan@arm.com> Change-Id: Ice3bb448c239b04323854641525bfe0808c03b2e
-rw-r--r--include/armnn/Descriptors.hpp14
-rw-r--r--src/armnn/Network.cpp10
-rw-r--r--src/armnnDeserializer/Deserializer.cpp4
-rw-r--r--src/armnnSerializer/ArmnnSchema.fbs4
-rw-r--r--src/armnnSerializer/Serializer.cpp8
-rw-r--r--src/armnnSerializer/test/SerializerTests.cpp14
-rw-r--r--src/armnnTfLiteParser/TfLiteParser.cpp2
-rw-r--r--src/backends/cl/workloads/ClResizeWorkload.cpp4
-rw-r--r--src/backends/neon/workloads/NeonResizeWorkload.cpp2
-rw-r--r--src/backends/reference/workloads/RefResizeWorkload.cpp2
10 files changed, 45 insertions, 19 deletions
diff --git a/include/armnn/Descriptors.hpp b/include/armnn/Descriptors.hpp
index 13765e8db3..9e5dea2fea 100644
--- a/include/armnn/Descriptors.hpp
+++ b/include/armnn/Descriptors.hpp
@@ -718,6 +718,8 @@ struct ResizeBilinearDescriptor
: m_TargetWidth(0)
, m_TargetHeight(0)
, m_DataLayout(DataLayout::NCHW)
+ , m_AlignCorners(false)
+ , m_HalfPixelCenters(false)
{}
/// Target width value.
@@ -726,6 +728,10 @@ struct ResizeBilinearDescriptor
uint32_t m_TargetHeight;
/// The data layout to be used (NCHW, NHWC).
DataLayout m_DataLayout;
+ /// Aligned corners
+ bool m_AlignCorners;
+ /// Half Pixel Centers
+ bool m_HalfPixelCenters;
};
/// A ResizeDescriptor for the ResizeLayer.
@@ -736,7 +742,7 @@ struct ResizeDescriptor
, m_TargetHeight(0)
, m_Method(ResizeMethod::NearestNeighbor)
, m_DataLayout(DataLayout::NCHW)
- , m_BilinearAlignCorners(false)
+ , m_AlignCorners(false)
, m_HalfPixelCenters(false)
{}
@@ -746,7 +752,7 @@ struct ResizeDescriptor
m_TargetHeight == rhs.m_TargetHeight &&
m_Method == rhs.m_Method &&
m_DataLayout == rhs.m_DataLayout &&
- m_BilinearAlignCorners == rhs.m_BilinearAlignCorners &&
+ m_AlignCorners == rhs.m_AlignCorners &&
m_HalfPixelCenters == rhs.m_HalfPixelCenters;
}
@@ -759,8 +765,8 @@ struct ResizeDescriptor
ResizeMethod m_Method;
/// The data layout to be used (NCHW, NHWC).
DataLayout m_DataLayout;
- /// Aligned corners for bilinear method
- bool m_BilinearAlignCorners;
+ /// Aligned corners
+ bool m_AlignCorners;
/// Half Pixel Centers
bool m_HalfPixelCenters;
};
diff --git a/src/armnn/Network.cpp b/src/armnn/Network.cpp
index a047297e15..d636d01291 100644
--- a/src/armnn/Network.cpp
+++ b/src/armnn/Network.cpp
@@ -1458,10 +1458,12 @@ IConnectableLayer* Network::AddResizeBilinearLayer(const ResizeBilinearDescripto
const char* name)
{
ResizeDescriptor resizeDescriptor;
- resizeDescriptor.m_Method = ResizeMethod::Bilinear;
- resizeDescriptor.m_DataLayout = descriptor.m_DataLayout;
- resizeDescriptor.m_TargetWidth = descriptor.m_TargetWidth;
- resizeDescriptor.m_TargetHeight = descriptor.m_TargetHeight;
+ resizeDescriptor.m_Method = ResizeMethod::Bilinear;
+ resizeDescriptor.m_DataLayout = descriptor.m_DataLayout;
+ resizeDescriptor.m_TargetWidth = descriptor.m_TargetWidth;
+ resizeDescriptor.m_TargetHeight = descriptor.m_TargetHeight;
+ resizeDescriptor.m_AlignCorners = descriptor.m_AlignCorners;
+ resizeDescriptor.m_HalfPixelCenters = descriptor.m_HalfPixelCenters;
return m_Graph->AddLayer<ResizeLayer>(resizeDescriptor, name);
}
diff --git a/src/armnnDeserializer/Deserializer.cpp b/src/armnnDeserializer/Deserializer.cpp
index 36beebc1cd..bea34e16e7 100644
--- a/src/armnnDeserializer/Deserializer.cpp
+++ b/src/armnnDeserializer/Deserializer.cpp
@@ -2045,6 +2045,8 @@ void Deserializer::ParseResize(GraphPtr graph, unsigned int layerIndex)
descriptor.m_TargetHeight = flatBufferDescriptor->targetHeight();
descriptor.m_Method = ToResizeMethod(flatBufferDescriptor->method());
descriptor.m_DataLayout = ToDataLayout(flatBufferDescriptor->dataLayout());
+ descriptor.m_AlignCorners = flatBufferDescriptor->alignCorners();
+ descriptor.m_HalfPixelCenters = flatBufferDescriptor->halfPixelCenters();
auto layerName = GetLayerName(graph, layerIndex);
IConnectableLayer* layer = m_Network->AddResizeLayer(descriptor, layerName.c_str());
@@ -2073,6 +2075,8 @@ void Deserializer::ParseResizeBilinear(GraphPtr graph, unsigned int layerIndex)
descriptor.m_TargetHeight = flatBufferDescriptor->targetHeight();
descriptor.m_Method = armnn::ResizeMethod::Bilinear;
descriptor.m_DataLayout = ToDataLayout(flatBufferDescriptor->dataLayout());
+ descriptor.m_AlignCorners = flatBufferDescriptor->alignCorners();
+ descriptor.m_HalfPixelCenters = flatBufferDescriptor->halfPixelCenters();
auto layerName = GetLayerName(graph, layerIndex);
IConnectableLayer* layer = m_Network->AddResizeLayer(descriptor, layerName.c_str());
diff --git a/src/armnnSerializer/ArmnnSchema.fbs b/src/armnnSerializer/ArmnnSchema.fbs
index 6e5ee3f3d3..532c12c706 100644
--- a/src/armnnSerializer/ArmnnSchema.fbs
+++ b/src/armnnSerializer/ArmnnSchema.fbs
@@ -558,6 +558,8 @@ table ResizeBilinearDescriptor {
targetWidth:uint;
targetHeight:uint;
dataLayout:DataLayout;
+ alignCorners:bool;
+ halfPixelCenters:bool;
}
table SliceLayer {
@@ -817,6 +819,8 @@ table ResizeDescriptor {
targetWidth:uint;
method:ResizeMethod = NearestNeighbor;
dataLayout:DataLayout;
+ alignCorners:bool;
+ halfPixelCenters:bool;
}
table StackLayer {
diff --git a/src/armnnSerializer/Serializer.cpp b/src/armnnSerializer/Serializer.cpp
index c4d3cfb5dd..9c62a93e3b 100644
--- a/src/armnnSerializer/Serializer.cpp
+++ b/src/armnnSerializer/Serializer.cpp
@@ -864,7 +864,9 @@ void SerializerVisitor::VisitResizeBilinearLayer(const armnn::IConnectableLayer*
CreateResizeBilinearDescriptor(m_flatBufferBuilder,
resizeDescriptor.m_TargetWidth,
resizeDescriptor.m_TargetHeight,
- GetFlatBufferDataLayout(resizeDescriptor.m_DataLayout));
+ GetFlatBufferDataLayout(resizeDescriptor.m_DataLayout),
+ resizeDescriptor.m_AlignCorners,
+ resizeDescriptor.m_HalfPixelCenters);
auto flatBufferLayer = serializer::CreateResizeBilinearLayer(m_flatBufferBuilder,
flatBufferBaseLayer,
@@ -886,7 +888,9 @@ void SerializerVisitor::VisitResizeLayer(const armnn::IConnectableLayer* layer,
resizeDescriptor.m_TargetHeight,
resizeDescriptor.m_TargetWidth,
GetFlatBufferResizeMethod(resizeDescriptor.m_Method),
- GetFlatBufferDataLayout(resizeDescriptor.m_DataLayout));
+ GetFlatBufferDataLayout(resizeDescriptor.m_DataLayout),
+ resizeDescriptor.m_AlignCorners,
+ resizeDescriptor.m_HalfPixelCenters);
auto flatBufferLayer = serializer::CreateResizeLayer(m_flatBufferBuilder,
flatBufferBaseLayer,
diff --git a/src/armnnSerializer/test/SerializerTests.cpp b/src/armnnSerializer/test/SerializerTests.cpp
index 76ac5a4de2..e7f93c6740 100644
--- a/src/armnnSerializer/test/SerializerTests.cpp
+++ b/src/armnnSerializer/test/SerializerTests.cpp
@@ -2206,6 +2206,8 @@ BOOST_AUTO_TEST_CASE(SerializeResize)
desc.m_TargetWidth = 4;
desc.m_TargetHeight = 2;
desc.m_Method = armnn::ResizeMethod::NearestNeighbor;
+ desc.m_AlignCorners = true;
+ desc.m_HalfPixelCenters = true;
armnn::INetworkPtr network = armnn::INetwork::Create();
armnn::IConnectableLayer* const inputLayer = network->AddInputLayer(0);
@@ -2241,10 +2243,12 @@ public:
{
VerifyNameAndConnections(layer, name);
- BOOST_CHECK(descriptor.m_Method == armnn::ResizeMethod::Bilinear);
- BOOST_CHECK(descriptor.m_TargetWidth == m_Descriptor.m_TargetWidth);
- BOOST_CHECK(descriptor.m_TargetHeight == m_Descriptor.m_TargetHeight);
- BOOST_CHECK(descriptor.m_DataLayout == m_Descriptor.m_DataLayout);
+ BOOST_CHECK(descriptor.m_Method == armnn::ResizeMethod::Bilinear);
+ BOOST_CHECK(descriptor.m_TargetWidth == m_Descriptor.m_TargetWidth);
+ BOOST_CHECK(descriptor.m_TargetHeight == m_Descriptor.m_TargetHeight);
+ BOOST_CHECK(descriptor.m_DataLayout == m_Descriptor.m_DataLayout);
+ BOOST_CHECK(descriptor.m_AlignCorners == m_Descriptor.m_AlignCorners);
+ BOOST_CHECK(descriptor.m_HalfPixelCenters == m_Descriptor.m_HalfPixelCenters);
}
void VisitResizeBilinearLayer(const armnn::IConnectableLayer*,
@@ -2267,6 +2271,8 @@ BOOST_AUTO_TEST_CASE(SerializeResizeBilinear)
armnn::ResizeBilinearDescriptor desc;
desc.m_TargetWidth = 4u;
desc.m_TargetHeight = 2u;
+ desc.m_AlignCorners = true;
+ desc.m_HalfPixelCenters = true;
armnn::INetworkPtr network = armnn::INetwork::Create();
armnn::IConnectableLayer* const inputLayer = network->AddInputLayer(0);
diff --git a/src/armnnTfLiteParser/TfLiteParser.cpp b/src/armnnTfLiteParser/TfLiteParser.cpp
index 08bd68d2ae..53b49f48d0 100644
--- a/src/armnnTfLiteParser/TfLiteParser.cpp
+++ b/src/armnnTfLiteParser/TfLiteParser.cpp
@@ -2168,7 +2168,7 @@ void TfLiteParser::ParseResize(size_t subgraphIndex, size_t operatorIndex, Resiz
const auto & operatorPtr = m_Model->subgraphs[subgraphIndex]->operators[operatorIndex];
const auto * options = operatorPtr->builtin_options.AsResizeBilinearOptions();
- desc.m_BilinearAlignCorners = options->align_corners;
+ desc.m_AlignCorners = options->align_corners;
break;
}
case ResizeMethod::NearestNeighbor:
diff --git a/src/backends/cl/workloads/ClResizeWorkload.cpp b/src/backends/cl/workloads/ClResizeWorkload.cpp
index 05b212c3d4..adfb3686fd 100644
--- a/src/backends/cl/workloads/ClResizeWorkload.cpp
+++ b/src/backends/cl/workloads/ClResizeWorkload.cpp
@@ -40,7 +40,7 @@ arm_compute::Status ClResizeWorkloadValidate(const TensorInfo& input,
arm_compute::PixelValue(0.f),
arm_compute::SamplingPolicy::TOP_LEFT,
true,
- descriptor.m_BilinearAlignCorners);
+ descriptor.m_AlignCorners);
}
ClResizeWorkload::ClResizeWorkload(const ResizeQueueDescriptor& descriptor, const WorkloadInfo& info) :
@@ -65,7 +65,7 @@ ClResizeWorkload::ClResizeWorkload(const ResizeQueueDescriptor& descriptor, cons
arm_compute::PixelValue(0.f),
arm_compute::SamplingPolicy::TOP_LEFT,
true,
- descriptor.m_Parameters.m_BilinearAlignCorners);
+ descriptor.m_Parameters.m_AlignCorners);
};
void ClResizeWorkload::Execute() const
diff --git a/src/backends/neon/workloads/NeonResizeWorkload.cpp b/src/backends/neon/workloads/NeonResizeWorkload.cpp
index 9e3be2655c..afb753fd64 100644
--- a/src/backends/neon/workloads/NeonResizeWorkload.cpp
+++ b/src/backends/neon/workloads/NeonResizeWorkload.cpp
@@ -64,7 +64,7 @@ NeonResizeWorkload::NeonResizeWorkload(const ResizeQueueDescriptor& descriptor,
arm_compute::PixelValue(0.f),
arm_compute::SamplingPolicy::TOP_LEFT,
true,
- descriptor.m_Parameters.m_BilinearAlignCorners);
+ descriptor.m_Parameters.m_AlignCorners);
};
void NeonResizeWorkload::Execute() const
diff --git a/src/backends/reference/workloads/RefResizeWorkload.cpp b/src/backends/reference/workloads/RefResizeWorkload.cpp
index 624b426cbf..4e53c4f650 100644
--- a/src/backends/reference/workloads/RefResizeWorkload.cpp
+++ b/src/backends/reference/workloads/RefResizeWorkload.cpp
@@ -35,7 +35,7 @@ void RefResizeWorkload::Execute() const
outputInfo,
m_Data.m_Parameters.m_DataLayout,
m_Data.m_Parameters.m_Method,
- m_Data.m_Parameters.m_BilinearAlignCorners);
+ m_Data.m_Parameters.m_AlignCorners);
}
} //namespace armnn