blob: 5f01db3280fcbe3bad5ef2242a38f55345e53fdd [file] [log] [blame]
Aron Virginas-Tar6331f912019-06-03 17:10:02 +01001//
2// Copyright © 2017 Arm Ltd. All rights reserved.
3// SPDX-License-Identifier: MIT
4//
5
6#include "RefDetectionPostProcessWorkload.hpp"
7
8#include "Decoders.hpp"
9#include "DetectionPostProcess.hpp"
10#include "Profiling.hpp"
11#include "RefWorkloadUtils.hpp"
12
13namespace armnn
14{
15
16RefDetectionPostProcessWorkload::RefDetectionPostProcessWorkload(
17 const DetectionPostProcessQueueDescriptor& descriptor, const WorkloadInfo& info)
Finn Williams73c547d2022-02-15 20:47:34 +000018 : RefBaseWorkload<DetectionPostProcessQueueDescriptor>(descriptor, info),
James Conroy1f58f032021-04-27 17:13:27 +010019 m_Anchors(std::make_unique<ScopedTensorHandle>(*(descriptor.m_Anchors))) {}
Aron Virginas-Tar6331f912019-06-03 17:10:02 +010020
21void RefDetectionPostProcessWorkload::Execute() const
22{
Finn Williamsb8181f72021-04-07 10:23:21 +010023 Execute(m_Data.m_Inputs, m_Data.m_Outputs);
24}
25
26void RefDetectionPostProcessWorkload::ExecuteAsync(WorkingMemDescriptor &workingMemDescriptor)
27{
28 Execute(workingMemDescriptor.m_Inputs, workingMemDescriptor.m_Outputs);
29}
30
31void RefDetectionPostProcessWorkload::Execute(std::vector<ITensorHandle*> inputs,
32 std::vector<ITensorHandle*> outputs) const
33{
Aron Virginas-Tar6331f912019-06-03 17:10:02 +010034 ARMNN_SCOPED_PROFILING_EVENT(Compute::CpuRef, "RefDetectionPostProcessWorkload_Execute");
35
Finn Williamsb8181f72021-04-07 10:23:21 +010036 const TensorInfo& boxEncodingsInfo = GetTensorInfo(inputs[0]);
37 const TensorInfo& scoresInfo = GetTensorInfo(inputs[1]);
Matthew Bentham4cefc412019-06-18 16:14:34 +010038 const TensorInfo& anchorsInfo = m_Anchors->GetTensorInfo();
Aron Virginas-Tar6331f912019-06-03 17:10:02 +010039
Finn Williamsb8181f72021-04-07 10:23:21 +010040 const TensorInfo& detectionBoxesInfo = GetTensorInfo(outputs[0]);
41 const TensorInfo& detectionClassesInfo = GetTensorInfo(outputs[1]);
42 const TensorInfo& detectionScoresInfo = GetTensorInfo(outputs[2]);
43 const TensorInfo& numDetectionsInfo = GetTensorInfo(outputs[3]);
Aron Virginas-Tar6331f912019-06-03 17:10:02 +010044
Finn Williamsb8181f72021-04-07 10:23:21 +010045 auto boxEncodings = MakeDecoder<float>(boxEncodingsInfo, inputs[0]->Map());
46 auto scores = MakeDecoder<float>(scoresInfo, inputs[1]->Map());
Aron Virginas-Tar6331f912019-06-03 17:10:02 +010047 auto anchors = MakeDecoder<float>(anchorsInfo, m_Anchors->Map(false));
48
Sadik Armagana04a9d72021-04-27 10:02:10 +010049 float* detectionBoxes = reinterpret_cast<float*>(outputs[0]->Map());
50 float* detectionClasses = reinterpret_cast<float*>(outputs[1]->Map());
51 float* detectionScores = reinterpret_cast<float*>(outputs[2]->Map());
52 float* numDetections = reinterpret_cast<float*>(outputs[3]->Map());
Aron Virginas-Tar6331f912019-06-03 17:10:02 +010053
54 DetectionPostProcess(boxEncodingsInfo, scoresInfo, anchorsInfo,
55 detectionBoxesInfo, detectionClassesInfo,
56 detectionScoresInfo, numDetectionsInfo, m_Data.m_Parameters,
57 *boxEncodings, *scores, *anchors, detectionBoxes,
58 detectionClasses, detectionScores, numDetections);
59}
60
61} //namespace armnn