aboutsummaryrefslogtreecommitdiff
path: root/src/backends/reference/workloads/RefDetectionPostProcessFloat32Workload.cpp
diff options
context:
space:
mode:
authorNarumol Prangnawarat <narumol.prangnawarat@arm.com>2019-01-31 15:31:54 +0000
committerNarumol Prangnawarat <narumol.prangnawarat@arm.com>2019-02-04 10:57:48 +0000
commitbc67cef3e3dc9e7fe9c4331495009eda48c89527 (patch)
tree6a15af84fbc5989d25213790554acbb46cda5165 /src/backends/reference/workloads/RefDetectionPostProcessFloat32Workload.cpp
parentc981df3bb24df1f98c233d885e73a2ea5c6d3449 (diff)
downloadarmnn-bc67cef3e3dc9e7fe9c4331495009eda48c89527.tar.gz
IVGCVSW-2557 Ref Workload Implementation for Detection PostProcess
* implementation of DetectionPostProcessQueueDescriptor validate * add Uint8ToFloat32Workload * add implementation of Detection PostProcess functionalities * add ref workload implemenentation for float and uint8 * add layer support for Detection PostProcess in ref * unit tests Change-Id: I650461f49edbb3c533d68ef8700377af51bc3592
Diffstat (limited to 'src/backends/reference/workloads/RefDetectionPostProcessFloat32Workload.cpp')
-rw-r--r--src/backends/reference/workloads/RefDetectionPostProcessFloat32Workload.cpp48
1 files changed, 48 insertions, 0 deletions
diff --git a/src/backends/reference/workloads/RefDetectionPostProcessFloat32Workload.cpp b/src/backends/reference/workloads/RefDetectionPostProcessFloat32Workload.cpp
new file mode 100644
index 0000000000..ddab046f9c
--- /dev/null
+++ b/src/backends/reference/workloads/RefDetectionPostProcessFloat32Workload.cpp
@@ -0,0 +1,48 @@
+//
+// 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