aboutsummaryrefslogtreecommitdiff
path: root/src/backends/reference/workloads
diff options
context:
space:
mode:
authorAron Virginas-Tar <Aron.Virginas-Tar@arm.com>2019-06-03 17:10:02 +0100
committerÁron Virginás-Tar <aron.virginas-tar@arm.com>2019-06-05 15:06:39 +0000
commit6331f91a4a1cb1ad16c569d98bb9ddf704788464 (patch)
tree338cce081966bfb42f635b6febd68642d492b9f8 /src/backends/reference/workloads
parent18f2d1ccf9e743e61ed3733ae5a38f796a759db8 (diff)
downloadarmnn-6331f91a4a1cb1ad16c569d98bb9ddf704788464.tar.gz
IVGCVSW-2971 Support QSymm16 for DetectionPostProcess workloads
Signed-off-by: Aron Virginas-Tar <Aron.Virginas-Tar@arm.com> Change-Id: I8af45afe851a9ccbf8bce54727147fcd52ac9a1f
Diffstat (limited to 'src/backends/reference/workloads')
-rw-r--r--src/backends/reference/workloads/CMakeLists.txt6
-rw-r--r--src/backends/reference/workloads/DetectionPostProcess.cpp111
-rw-r--r--src/backends/reference/workloads/DetectionPostProcess.hpp24
-rw-r--r--src/backends/reference/workloads/RefDetectionPostProcessFloat32Workload.cpp48
-rw-r--r--src/backends/reference/workloads/RefDetectionPostProcessUint8Workload.cpp52
-rw-r--r--src/backends/reference/workloads/RefDetectionPostProcessUint8Workload.hpp25
-rw-r--r--src/backends/reference/workloads/RefDetectionPostProcessWorkload.cpp50
-rw-r--r--src/backends/reference/workloads/RefDetectionPostProcessWorkload.hpp (renamed from src/backends/reference/workloads/RefDetectionPostProcessFloat32Workload.hpp)6
-rw-r--r--src/backends/reference/workloads/RefWorkloads.hpp3
9 files changed, 161 insertions, 164 deletions
diff --git a/src/backends/reference/workloads/CMakeLists.txt b/src/backends/reference/workloads/CMakeLists.txt
index cdca22da31..25d4b28366 100644
--- a/src/backends/reference/workloads/CMakeLists.txt
+++ b/src/backends/reference/workloads/CMakeLists.txt
@@ -60,10 +60,8 @@ list(APPEND armnnRefBackendWorkloads_sources
RefDepthwiseConvolution2dWorkload.hpp
RefDequantizeWorkload.cpp
RefDequantizeWorkload.hpp
- RefDetectionPostProcessUint8Workload.cpp
- RefDetectionPostProcessUint8Workload.hpp
- RefDetectionPostProcessFloat32Workload.cpp
- RefDetectionPostProcessFloat32Workload.hpp
+ RefDetectionPostProcessWorkload.cpp
+ RefDetectionPostProcessWorkload.hpp
RefFakeQuantizationFloat32Workload.cpp
RefFakeQuantizationFloat32Workload.hpp
RefFloorWorkload.cpp
diff --git a/src/backends/reference/workloads/DetectionPostProcess.cpp b/src/backends/reference/workloads/DetectionPostProcess.cpp
index d3790f22ab..d475dd8ac0 100644
--- a/src/backends/reference/workloads/DetectionPostProcess.cpp
+++ b/src/backends/reference/workloads/DetectionPostProcess.cpp
@@ -13,7 +13,7 @@
#include <algorithm>
#include <numeric>
-namespace
+namespace armnn
{
std::vector<unsigned int> GenerateRangeK(unsigned int k)
@@ -48,9 +48,12 @@ float IntersectionOverUnion(const float* boxI, const float* boxJ)
return areaIntersection / areaUnion;
}
-std::vector<unsigned int> NonMaxSuppression(unsigned int numBoxes, const std::vector<float>& boxCorners,
- const std::vector<float>& scores, float nmsScoreThreshold,
- unsigned int maxDetection, float nmsIouThreshold)
+std::vector<unsigned int> NonMaxSuppression(unsigned int numBoxes,
+ const std::vector<float>& boxCorners,
+ const std::vector<float>& scores,
+ float nmsScoreThreshold,
+ unsigned int maxDetection,
+ float nmsIouThreshold)
{
// Select boxes that have scores above a given threshold.
std::vector<float> scoresAboveThreshold;
@@ -67,7 +70,7 @@ std::vector<unsigned int> NonMaxSuppression(unsigned int numBoxes, const std::ve
// Sort the indices based on scores.
unsigned int numAboveThreshold = boost::numeric_cast<unsigned int>(scoresAboveThreshold.size());
std::vector<unsigned int> sortedIndices = GenerateRangeK(numAboveThreshold);
- TopKSort(numAboveThreshold,sortedIndices.data(), scoresAboveThreshold.data(), numAboveThreshold);
+ TopKSort(numAboveThreshold, sortedIndices.data(), scoresAboveThreshold.data(), numAboveThreshold);
// Number of output cannot be more than max detections specified in the option.
unsigned int numOutput = std::min(maxDetection, numAboveThreshold);
@@ -98,10 +101,17 @@ std::vector<unsigned int> NonMaxSuppression(unsigned int numBoxes, const std::ve
return outputIndices;
}
-void AllocateOutputData(unsigned int numOutput, unsigned int numSelected, const std::vector<float>& boxCorners,
- const std::vector<unsigned int>& outputIndices, const std::vector<unsigned int>& selectedBoxes,
- const std::vector<unsigned int>& selectedClasses, const std::vector<float>& selectedScores,
- float* detectionBoxes, float* detectionScores, float* detectionClasses, float* numDetections)
+void AllocateOutputData(unsigned int numOutput,
+ unsigned int numSelected,
+ const std::vector<float>& boxCorners,
+ const std::vector<unsigned int>& outputIndices,
+ const std::vector<unsigned int>& selectedBoxes,
+ const std::vector<unsigned int>& selectedClasses,
+ const std::vector<float>& selectedScores,
+ float* detectionBoxes,
+ float* detectionScores,
+ float* detectionClasses,
+ float* numDetections)
{
for (unsigned int i = 0; i < numOutput; ++i)
{
@@ -129,11 +139,6 @@ void AllocateOutputData(unsigned int numOutput, unsigned int numSelected, const
numDetections[0] = boost::numeric_cast<float>(numSelected);
}
-} // anonymous namespace
-
-namespace armnn
-{
-
void DetectionPostProcess(const TensorInfo& boxEncodingsInfo,
const TensorInfo& scoresInfo,
const TensorInfo& anchorsInfo,
@@ -142,9 +147,9 @@ void DetectionPostProcess(const TensorInfo& boxEncodingsInfo,
const TensorInfo& detectionScoresInfo,
const TensorInfo& numDetectionsInfo,
const DetectionPostProcessDescriptor& desc,
- const float* boxEncodings,
- const float* scores,
- const float* anchors,
+ Decoder<float>& boxEncodings,
+ Decoder<float>& scores,
+ Decoder<float>& anchors,
float* detectionBoxes,
float* detectionClasses,
float* detectionScores,
@@ -153,17 +158,51 @@ void DetectionPostProcess(const TensorInfo& boxEncodingsInfo,
// Transform center-size format which is (ycenter, xcenter, height, width) to box-corner format,
// which represents the lower left corner and the upper right corner (ymin, xmin, ymax, xmax)
std::vector<float> boxCorners(boxEncodingsInfo.GetNumElements());
- unsigned int numBoxes = boxEncodingsInfo.GetShape()[1];
+
+ const unsigned int numBoxes = boxEncodingsInfo.GetShape()[1];
+ const unsigned int numScores = scoresInfo.GetNumElements();
+
for (unsigned int i = 0; i < numBoxes; ++i)
{
+ // Y
+ float boxEncodingY = boxEncodings.Get();
+ float anchorY = anchors.Get();
+
+ ++boxEncodings;
+ ++anchors;
+
+ // X
+ float boxEncodingX = boxEncodings.Get();
+ float anchorX = anchors.Get();
+
+ ++boxEncodings;
+ ++anchors;
+
+ // H
+ float boxEncodingH = boxEncodings.Get();
+ float anchorH = anchors.Get();
+
+ ++boxEncodings;
+ ++anchors;
+
+ // W
+ float boxEncodingW = boxEncodings.Get();
+ float anchorW = anchors.Get();
+
+ ++boxEncodings;
+ ++anchors;
+
+ float yCentre = boxEncodingY / desc.m_ScaleY * anchorH + anchorY;
+ float xCentre = boxEncodingX / desc.m_ScaleX * anchorW + anchorX;
+
+ float halfH = 0.5f * expf(boxEncodingH / desc.m_ScaleH) * anchorH;
+ float halfW = 0.5f * expf(boxEncodingW / desc.m_ScaleW) * anchorW;
+
unsigned int indexY = i * 4;
unsigned int indexX = indexY + 1;
unsigned int indexH = indexX + 1;
unsigned int indexW = indexH + 1;
- float yCentre = boxEncodings[indexY] / desc.m_ScaleY * anchors[indexH] + anchors[indexY];
- float xCentre = boxEncodings[indexX] / desc.m_ScaleX * anchors[indexW] + anchors[indexX];
- float halfH = 0.5f * expf(boxEncodings[indexH] / desc.m_ScaleH) * anchors[indexH];
- float halfW = 0.5f * expf(boxEncodings[indexW] / desc.m_ScaleW) * anchors[indexW];
+
// ymin
boxCorners[indexY] = yCentre - halfH;
// xmin
@@ -179,14 +218,29 @@ void DetectionPostProcess(const TensorInfo& boxEncodingsInfo,
unsigned int numClassesWithBg = desc.m_NumClasses + 1;
+ // Decode scores
+ std::vector<float> decodedScores;
+ decodedScores.reserve(numScores);
+
+ for (unsigned int i = 0u; i < numScores; ++i)
+ {
+ decodedScores.emplace_back(scores.Get());
+ ++scores;
+ }
+
// Perform Non Max Suppression.
if (desc.m_UseRegularNms)
{
// Perform Regular NMS.
// For each class, perform NMS and select max detection numbers of the highest score across all classes.
std::vector<float> classScores(numBoxes);
- std::vector<unsigned int>selectedBoxesAfterNms;
+
+ std::vector<unsigned int> selectedBoxesAfterNms;
+ selectedBoxesAfterNms.reserve(numBoxes);
+
std::vector<float> selectedScoresAfterNms;
+ selectedBoxesAfterNms.reserve(numScores);
+
std::vector<unsigned int> selectedClasses;
for (unsigned int c = 0; c < desc.m_NumClasses; ++c)
@@ -194,9 +248,11 @@ void DetectionPostProcess(const TensorInfo& boxEncodingsInfo,
// For each boxes, get scores of the boxes for the class c.
for (unsigned int i = 0; i < numBoxes; ++i)
{
- classScores[i] = scores[i * numClassesWithBg + c + 1];
+ classScores[i] = decodedScores[i * numClassesWithBg + c + 1];
}
- std::vector<unsigned int> selectedIndices = NonMaxSuppression(numBoxes, boxCorners, classScores,
+ std::vector<unsigned int> selectedIndices = NonMaxSuppression(numBoxes,
+ boxCorners,
+ classScores,
desc.m_NmsScoreThreshold,
desc.m_DetectionsPerClass,
desc.m_NmsIouThreshold);
@@ -237,11 +293,12 @@ void DetectionPostProcess(const TensorInfo& boxEncodingsInfo,
// Get the max scores of the box.
std::vector<unsigned int> maxScoreIndices = GenerateRangeK(desc.m_NumClasses);
- TopKSort(numClassesPerBox, maxScoreIndices.data(), scores + scoreIndex, desc.m_NumClasses);
+ TopKSort(numClassesPerBox, maxScoreIndices.data(),
+ decodedScores.data() + scoreIndex, desc.m_NumClasses);
for (unsigned int i = 0; i < numClassesPerBox; ++i)
{
- maxScores.push_back(scores[scoreIndex + maxScoreIndices[i]]);
+ maxScores.push_back(decodedScores[scoreIndex + maxScoreIndices[i]]);
maxScoreClasses.push_back(maxScoreIndices[i]);
boxIndices.push_back(box);
}
diff --git a/src/backends/reference/workloads/DetectionPostProcess.hpp b/src/backends/reference/workloads/DetectionPostProcess.hpp
index 06e9e15781..8700a53317 100644
--- a/src/backends/reference/workloads/DetectionPostProcess.hpp
+++ b/src/backends/reference/workloads/DetectionPostProcess.hpp
@@ -7,6 +7,10 @@
#include "armnn/Tensor.hpp"
#include "armnn/Descriptors.hpp"
+#include "Decoders.hpp"
+
+#include <vector>
+
namespace armnn
{
@@ -18,12 +22,26 @@ void DetectionPostProcess(const TensorInfo& boxEncodingsInfo,
const TensorInfo& detectionScoresInfo,
const TensorInfo& numDetectionsInfo,
const DetectionPostProcessDescriptor& desc,
- const float* boxEncodings,
- const float* scores,
- const float* anchors,
+ Decoder<float>& boxEncodings,
+ Decoder<float>& scores,
+ Decoder<float>& anchors,
float* detectionBoxes,
float* detectionClasses,
float* detectionScores,
float* numDetections);
+void TopKSort(unsigned int k,
+ unsigned int* indices,
+ const float* values,
+ unsigned int numElement);
+
+float IntersectionOverUnion(const float* boxI, const float* boxJ);
+
+std::vector<unsigned int> NonMaxSuppression(unsigned int numBoxes,
+ const std::vector<float>& boxCorners,
+ const std::vector<float>& scores,
+ float nmsScoreThreshold,
+ unsigned int maxDetection,
+ float nmsIouThreshold);
+
} // namespace armnn
diff --git a/src/backends/reference/workloads/RefDetectionPostProcessFloat32Workload.cpp b/src/backends/reference/workloads/RefDetectionPostProcessFloat32Workload.cpp
deleted file mode 100644
index ddab046f9c..0000000000
--- a/src/backends/reference/workloads/RefDetectionPostProcessFloat32Workload.cpp
+++ /dev/null
@@ -1,48 +0,0 @@
-//
-// Copyright © 2017 Arm Ltd. All rights reserved.
-// SPDX-License-Identifier: MIT
-//
-
-#include "RefDetectionPostProcessFloat32Workload.hpp"
-
-#include "DetectionPostProcess.hpp"
-#include "Profiling.hpp"
-#include "RefWorkloadUtils.hpp"
-
-namespace armnn
-{
-
-RefDetectionPostProcessFloat32Workload::RefDetectionPostProcessFloat32Workload(
- const DetectionPostProcessQueueDescriptor& descriptor, const WorkloadInfo& info)
- : Float32Workload<DetectionPostProcessQueueDescriptor>(descriptor, info),
- m_Anchors(std::make_unique<ScopedCpuTensorHandle>(*(descriptor.m_Anchors))) {}
-
-void RefDetectionPostProcessFloat32Workload::Execute() const
-{
- ARMNN_SCOPED_PROFILING_EVENT(Compute::CpuRef, "RefDetectionPostProcessUint8Workload_Execute");
-
- const TensorInfo& boxEncodingsInfo = GetTensorInfo(m_Data.m_Inputs[0]);
- const TensorInfo& scoresInfo = GetTensorInfo(m_Data.m_Inputs[1]);
- const TensorInfo& anchorsInfo = GetTensorInfo(m_Anchors.get());
- const TensorInfo& detectionBoxesInfo = GetTensorInfo(m_Data.m_Outputs[0]);
- const TensorInfo& detectionClassesInfo = GetTensorInfo(m_Data.m_Outputs[1]);
- const TensorInfo& detectionScoresInfo = GetTensorInfo(m_Data.m_Outputs[2]);
- const TensorInfo& numDetectionsInfo = GetTensorInfo(m_Data.m_Outputs[3]);
-
- const float* boxEncodings = GetInputTensorDataFloat(0, m_Data);
- const float* scores = GetInputTensorDataFloat(1, m_Data);
- const float* anchors = m_Anchors->GetConstTensor<float>();
-
- float* detectionBoxes = GetOutputTensorData<float>(0, m_Data);
- float* detectionClasses = GetOutputTensorData<float>(1, m_Data);
- float* detectionScores = GetOutputTensorData<float>(2, m_Data);
- float* numDetections = GetOutputTensorData<float>(3, m_Data);
-
- DetectionPostProcess(boxEncodingsInfo, scoresInfo, anchorsInfo,
- detectionBoxesInfo, detectionClassesInfo,
- detectionScoresInfo, numDetectionsInfo, m_Data.m_Parameters,
- boxEncodings, scores, anchors, detectionBoxes,
- detectionClasses, detectionScores, numDetections);
-}
-
-} //namespace armnn
diff --git a/src/backends/reference/workloads/RefDetectionPostProcessUint8Workload.cpp b/src/backends/reference/workloads/RefDetectionPostProcessUint8Workload.cpp
deleted file mode 100644
index ccdaf87c9a..0000000000
--- a/src/backends/reference/workloads/RefDetectionPostProcessUint8Workload.cpp
+++ /dev/null
@@ -1,52 +0,0 @@
-//
-// Copyright © 2017 Arm Ltd. All rights reserved.
-// SPDX-License-Identifier: MIT
-//
-
-#include "RefDetectionPostProcessUint8Workload.hpp"
-
-#include "DetectionPostProcess.hpp"
-#include "Profiling.hpp"
-#include "RefWorkloadUtils.hpp"
-
-namespace armnn
-{
-
-RefDetectionPostProcessUint8Workload::RefDetectionPostProcessUint8Workload(
- const DetectionPostProcessQueueDescriptor& descriptor, const WorkloadInfo& info)
- : Uint8ToFloat32Workload<DetectionPostProcessQueueDescriptor>(descriptor, info),
- m_Anchors(std::make_unique<ScopedCpuTensorHandle>(*(descriptor.m_Anchors))) {}
-
-void RefDetectionPostProcessUint8Workload::Execute() const
-{
- ARMNN_SCOPED_PROFILING_EVENT(Compute::CpuRef, "RefDetectionPostProcessUint8Workload_Execute");
-
- const TensorInfo& boxEncodingsInfo = GetTensorInfo(m_Data.m_Inputs[0]);
- const TensorInfo& scoresInfo = GetTensorInfo(m_Data.m_Inputs[1]);
- const TensorInfo& anchorsInfo = GetTensorInfo(m_Anchors.get());
- const TensorInfo& detectionBoxesInfo = GetTensorInfo(m_Data.m_Outputs[0]);
- const TensorInfo& detectionClassesInfo = GetTensorInfo(m_Data.m_Outputs[1]);
- const TensorInfo& detectionScoresInfo = GetTensorInfo(m_Data.m_Outputs[2]);
- const TensorInfo& numDetectionsInfo = GetTensorInfo(m_Data.m_Outputs[3]);
-
- const uint8_t* boxEncodingsData = GetInputTensorDataU8(0, m_Data);
- const uint8_t* scoresData = GetInputTensorDataU8(1, m_Data);
- const uint8_t* anchorsData = m_Anchors->GetConstTensor<uint8_t>();
-
- auto boxEncodings = Dequantize(boxEncodingsData, boxEncodingsInfo);
- auto scores = Dequantize(scoresData, scoresInfo);
- auto anchors = Dequantize(anchorsData, anchorsInfo);
-
- float* detectionBoxes = GetOutputTensorData<float>(0, m_Data);
- float* detectionClasses = GetOutputTensorData<float>(1, m_Data);
- float* detectionScores = GetOutputTensorData<float>(2, m_Data);
- float* numDetections = GetOutputTensorData<float>(3, m_Data);
-
- DetectionPostProcess(boxEncodingsInfo, scoresInfo, anchorsInfo,
- detectionBoxesInfo, detectionClassesInfo,
- detectionScoresInfo, numDetectionsInfo, m_Data.m_Parameters,
- boxEncodings.data(), scores.data(), anchors.data(),
- detectionBoxes, detectionClasses, detectionScores, numDetections);
-}
-
-} //namespace armnn
diff --git a/src/backends/reference/workloads/RefDetectionPostProcessUint8Workload.hpp b/src/backends/reference/workloads/RefDetectionPostProcessUint8Workload.hpp
deleted file mode 100644
index 91590f57bd..0000000000
--- a/src/backends/reference/workloads/RefDetectionPostProcessUint8Workload.hpp
+++ /dev/null
@@ -1,25 +0,0 @@
-//
-// Copyright © 2017 Arm Ltd. All rights reserved.
-// SPDX-License-Identifier: MIT
-//
-
-#pragma once
-
-#include <backendsCommon/Workload.hpp>
-#include <backendsCommon/WorkloadData.hpp>
-
-namespace armnn
-{
-
-class RefDetectionPostProcessUint8Workload : public Uint8ToFloat32Workload<DetectionPostProcessQueueDescriptor>
-{
-public:
- explicit RefDetectionPostProcessUint8Workload(const DetectionPostProcessQueueDescriptor& descriptor,
- const WorkloadInfo& info);
- virtual void Execute() const override;
-
-private:
- std::unique_ptr<ScopedCpuTensorHandle> m_Anchors;
-};
-
-} //namespace armnn
diff --git a/src/backends/reference/workloads/RefDetectionPostProcessWorkload.cpp b/src/backends/reference/workloads/RefDetectionPostProcessWorkload.cpp
new file mode 100644
index 0000000000..db24cc53e4
--- /dev/null
+++ b/src/backends/reference/workloads/RefDetectionPostProcessWorkload.cpp
@@ -0,0 +1,50 @@
+//
+// Copyright © 2017 Arm Ltd. All rights reserved.
+// SPDX-License-Identifier: MIT
+//
+
+#include "RefDetectionPostProcessWorkload.hpp"
+
+#include "Decoders.hpp"
+#include "DetectionPostProcess.hpp"
+#include "Profiling.hpp"
+#include "RefWorkloadUtils.hpp"
+
+namespace armnn
+{
+
+RefDetectionPostProcessWorkload::RefDetectionPostProcessWorkload(
+ const DetectionPostProcessQueueDescriptor& descriptor, const WorkloadInfo& info)
+ : BaseWorkload<DetectionPostProcessQueueDescriptor>(descriptor, info),
+ m_Anchors(std::make_unique<ScopedCpuTensorHandle>(*(descriptor.m_Anchors))) {}
+
+void RefDetectionPostProcessWorkload::Execute() const
+{
+ ARMNN_SCOPED_PROFILING_EVENT(Compute::CpuRef, "RefDetectionPostProcessWorkload_Execute");
+
+ const TensorInfo& boxEncodingsInfo = GetTensorInfo(m_Data.m_Inputs[0]);
+ const TensorInfo& scoresInfo = GetTensorInfo(m_Data.m_Inputs[1]);
+ const TensorInfo& anchorsInfo = GetTensorInfo(m_Anchors.get());
+
+ const TensorInfo& detectionBoxesInfo = GetTensorInfo(m_Data.m_Outputs[0]);
+ const TensorInfo& detectionClassesInfo = GetTensorInfo(m_Data.m_Outputs[1]);
+ const TensorInfo& detectionScoresInfo = GetTensorInfo(m_Data.m_Outputs[2]);
+ const TensorInfo& numDetectionsInfo = GetTensorInfo(m_Data.m_Outputs[3]);
+
+ auto boxEncodings = MakeDecoder<float>(boxEncodingsInfo, m_Data.m_Inputs[0]->Map());
+ auto scores = MakeDecoder<float>(scoresInfo, m_Data.m_Inputs[1]->Map());
+ auto anchors = MakeDecoder<float>(anchorsInfo, m_Anchors->Map(false));
+
+ float* detectionBoxes = GetOutputTensorData<float>(0, m_Data);
+ float* detectionClasses = GetOutputTensorData<float>(1, m_Data);
+ float* detectionScores = GetOutputTensorData<float>(2, m_Data);
+ float* numDetections = GetOutputTensorData<float>(3, m_Data);
+
+ DetectionPostProcess(boxEncodingsInfo, scoresInfo, anchorsInfo,
+ detectionBoxesInfo, detectionClassesInfo,
+ detectionScoresInfo, numDetectionsInfo, m_Data.m_Parameters,
+ *boxEncodings, *scores, *anchors, detectionBoxes,
+ detectionClasses, detectionScores, numDetections);
+}
+
+} //namespace armnn
diff --git a/src/backends/reference/workloads/RefDetectionPostProcessFloat32Workload.hpp b/src/backends/reference/workloads/RefDetectionPostProcessWorkload.hpp
index 9f2a697ada..799d0c6219 100644
--- a/src/backends/reference/workloads/RefDetectionPostProcessFloat32Workload.hpp
+++ b/src/backends/reference/workloads/RefDetectionPostProcessWorkload.hpp
@@ -11,11 +11,11 @@
namespace armnn
{
-class RefDetectionPostProcessFloat32Workload : public Float32Workload<DetectionPostProcessQueueDescriptor>
+class RefDetectionPostProcessWorkload : public BaseWorkload<DetectionPostProcessQueueDescriptor>
{
public:
- explicit RefDetectionPostProcessFloat32Workload(const DetectionPostProcessQueueDescriptor& descriptor,
- const WorkloadInfo& info);
+ explicit RefDetectionPostProcessWorkload(const DetectionPostProcessQueueDescriptor& descriptor,
+ const WorkloadInfo& info);
virtual void Execute() const override;
private:
diff --git a/src/backends/reference/workloads/RefWorkloads.hpp b/src/backends/reference/workloads/RefWorkloads.hpp
index 7ccd4efc54..8d99b69685 100644
--- a/src/backends/reference/workloads/RefWorkloads.hpp
+++ b/src/backends/reference/workloads/RefWorkloads.hpp
@@ -31,8 +31,7 @@
#include "RefResizeBilinearFloat32Workload.hpp"
#include "ResizeBilinear.hpp"
#include "RefNormalizationFloat32Workload.hpp"
-#include "RefDetectionPostProcessFloat32Workload.hpp"
-#include "RefDetectionPostProcessUint8Workload.hpp"
+#include "RefDetectionPostProcessWorkload.hpp"
#include "RefPooling2dUint8Workload.hpp"
#include "BatchNormImpl.hpp"
#include "Activation.hpp"