aboutsummaryrefslogtreecommitdiff
path: root/src/backends/reference
diff options
context:
space:
mode:
Diffstat (limited to 'src/backends/reference')
-rw-r--r--src/backends/reference/workloads/RefResizeWorkload.cpp8
-rw-r--r--src/backends/reference/workloads/Resize.cpp11
-rw-r--r--src/backends/reference/workloads/Resize.hpp3
3 files changed, 17 insertions, 5 deletions
diff --git a/src/backends/reference/workloads/RefResizeWorkload.cpp b/src/backends/reference/workloads/RefResizeWorkload.cpp
index 26225f8823..624b426cbf 100644
--- a/src/backends/reference/workloads/RefResizeWorkload.cpp
+++ b/src/backends/reference/workloads/RefResizeWorkload.cpp
@@ -29,7 +29,13 @@ void RefResizeWorkload::Execute() const
std::unique_ptr<Encoder<float>> encoderPtr = MakeEncoder<float>(outputInfo, m_Data.m_Outputs[0]->Map());
Encoder<float> &encoder = *encoderPtr;
- Resize(decoder, inputInfo, encoder, outputInfo, m_Data.m_Parameters.m_DataLayout, m_Data.m_Parameters.m_Method);
+ Resize(decoder,
+ inputInfo,
+ encoder,
+ outputInfo,
+ m_Data.m_Parameters.m_DataLayout,
+ m_Data.m_Parameters.m_Method,
+ m_Data.m_Parameters.m_BilinearAlignCorners);
}
} //namespace armnn
diff --git a/src/backends/reference/workloads/Resize.cpp b/src/backends/reference/workloads/Resize.cpp
index 3050bae870..a26e34a1ff 100644
--- a/src/backends/reference/workloads/Resize.cpp
+++ b/src/backends/reference/workloads/Resize.cpp
@@ -37,7 +37,8 @@ void Resize(Decoder<float>& in,
Encoder<float>& out,
const TensorInfo& outputInfo,
DataLayoutIndexed dataLayout,
- armnn::ResizeMethod resizeMethod)
+ armnn::ResizeMethod resizeMethod,
+ bool alignCorners)
{
// We follow the definition of TensorFlow and AndroidNN: the top-left corner of a texel in the output
// image is projected into the input image to figure out the interpolants and weights. Note that this
@@ -51,10 +52,14 @@ void Resize(Decoder<float>& in,
const unsigned int outputHeight = outputInfo.GetShape()[dataLayout.GetHeightIndex()];
const unsigned int outputWidth = outputInfo.GetShape()[dataLayout.GetWidthIndex()];
+ const unsigned int sizeOffset = resizeMethod == armnn::ResizeMethod::Bilinear && alignCorners ? 1 : 0;
+
// How much to scale pixel coordinates in the output image, to get the corresponding pixel coordinates
// in the input image.
- const float scaleY = boost::numeric_cast<float>(inputHeight) / boost::numeric_cast<float>(outputHeight);
- const float scaleX = boost::numeric_cast<float>(inputWidth) / boost::numeric_cast<float>(outputWidth);
+ const float scaleY = boost::numeric_cast<float>(inputHeight - sizeOffset)
+ / boost::numeric_cast<float>(outputHeight - sizeOffset);
+ const float scaleX = boost::numeric_cast<float>(inputWidth - sizeOffset)
+ / boost::numeric_cast<float>(outputWidth - sizeOffset);
TensorShape inputShape = inputInfo.GetShape();
TensorShape outputShape = outputInfo.GetShape();
diff --git a/src/backends/reference/workloads/Resize.hpp b/src/backends/reference/workloads/Resize.hpp
index 4c357946d9..cd8835fa08 100644
--- a/src/backends/reference/workloads/Resize.hpp
+++ b/src/backends/reference/workloads/Resize.hpp
@@ -19,6 +19,7 @@ void Resize(Decoder<float>& in,
Encoder<float>& out,
const TensorInfo& outputInfo,
armnnUtils::DataLayoutIndexed dataLayout = DataLayout::NCHW,
- ResizeMethod resizeMethod = ResizeMethod::NearestNeighbor);
+ ResizeMethod resizeMethod = ResizeMethod::NearestNeighbor,
+ bool alignConers = false);
} // namespace armnn