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
diff --git a/include/armnn/Descriptors.hpp b/include/armnn/Descriptors.hpp
index 13765e8..9e5dea2 100644
--- a/include/armnn/Descriptors.hpp
+++ b/include/armnn/Descriptors.hpp
@@ -718,6 +718,8 @@
: m_TargetWidth(0)
, m_TargetHeight(0)
, m_DataLayout(DataLayout::NCHW)
+ , m_AlignCorners(false)
+ , m_HalfPixelCenters(false)
{}
/// Target width value.
@@ -726,6 +728,10 @@
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 @@
, m_TargetHeight(0)
, m_Method(ResizeMethod::NearestNeighbor)
, m_DataLayout(DataLayout::NCHW)
- , m_BilinearAlignCorners(false)
+ , m_AlignCorners(false)
, m_HalfPixelCenters(false)
{}
@@ -746,7 +752,7 @@
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 @@
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 a047297..d636d01 100644
--- a/src/armnn/Network.cpp
+++ b/src/armnn/Network.cpp
@@ -1458,10 +1458,12 @@
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 36beebc..bea34e1 100644
--- a/src/armnnDeserializer/Deserializer.cpp
+++ b/src/armnnDeserializer/Deserializer.cpp
@@ -2045,6 +2045,8 @@
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 @@
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 6e5ee3f..532c12c 100644
--- a/src/armnnSerializer/ArmnnSchema.fbs
+++ b/src/armnnSerializer/ArmnnSchema.fbs
@@ -558,6 +558,8 @@
targetWidth:uint;
targetHeight:uint;
dataLayout:DataLayout;
+ alignCorners:bool;
+ halfPixelCenters:bool;
}
table SliceLayer {
@@ -817,6 +819,8 @@
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 c4d3cfb..9c62a93 100644
--- a/src/armnnSerializer/Serializer.cpp
+++ b/src/armnnSerializer/Serializer.cpp
@@ -864,7 +864,9 @@
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 @@
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 76ac5a4..e7f93c6 100644
--- a/src/armnnSerializer/test/SerializerTests.cpp
+++ b/src/armnnSerializer/test/SerializerTests.cpp
@@ -2206,6 +2206,8 @@
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 @@
{
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 @@
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 08bd68d..53b49f4 100644
--- a/src/armnnTfLiteParser/TfLiteParser.cpp
+++ b/src/armnnTfLiteParser/TfLiteParser.cpp
@@ -2168,7 +2168,7 @@
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 05b212c..adfb368 100644
--- a/src/backends/cl/workloads/ClResizeWorkload.cpp
+++ b/src/backends/cl/workloads/ClResizeWorkload.cpp
@@ -40,7 +40,7 @@
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 @@
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 9e3be26..afb753f 100644
--- a/src/backends/neon/workloads/NeonResizeWorkload.cpp
+++ b/src/backends/neon/workloads/NeonResizeWorkload.cpp
@@ -64,7 +64,7 @@
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 624b426..4e53c4f 100644
--- a/src/backends/reference/workloads/RefResizeWorkload.cpp
+++ b/src/backends/reference/workloads/RefResizeWorkload.cpp
@@ -35,7 +35,7 @@
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