blob: b971b5f0c9f9c577eab74a69b57b6f02b43b75ef [file] [log] [blame]
Aron Virginas-Tar6331f912019-06-03 17:10:02 +01001//
Mike Kelly7cbe7812023-07-25 17:37:33 +01002// Copyright © 2019,2021-2023 Arm Ltd and Contributors. All rights reserved.
Aron Virginas-Tar6331f912019-06-03 17:10:02 +01003// 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
Matthew Sloyan2d213a72022-06-30 17:13:04 +010026void RefDetectionPostProcessWorkload::ExecuteAsync(ExecutionData& executionData)
Finn Williamsb8181f72021-04-07 10:23:21 +010027{
Matthew Sloyan2d213a72022-06-30 17:13:04 +010028 WorkingMemDescriptor* workingMemDescriptor = static_cast<WorkingMemDescriptor*>(executionData.m_Data);
29 Execute(workingMemDescriptor->m_Inputs, workingMemDescriptor->m_Outputs);
Finn Williamsb8181f72021-04-07 10:23:21 +010030}
31
32void RefDetectionPostProcessWorkload::Execute(std::vector<ITensorHandle*> inputs,
33 std::vector<ITensorHandle*> outputs) const
34{
Mike Kelly7cbe7812023-07-25 17:37:33 +010035 ARMNN_SCOPED_PROFILING_EVENT_REF_NAME_GUID("RefDetectionPostProcessWorkload_Execute");
Aron Virginas-Tar6331f912019-06-03 17:10:02 +010036
Finn Williamsb8181f72021-04-07 10:23:21 +010037 const TensorInfo& boxEncodingsInfo = GetTensorInfo(inputs[0]);
38 const TensorInfo& scoresInfo = GetTensorInfo(inputs[1]);
Matthew Bentham4cefc412019-06-18 16:14:34 +010039 const TensorInfo& anchorsInfo = m_Anchors->GetTensorInfo();
Aron Virginas-Tar6331f912019-06-03 17:10:02 +010040
Finn Williamsb8181f72021-04-07 10:23:21 +010041 const TensorInfo& detectionBoxesInfo = GetTensorInfo(outputs[0]);
42 const TensorInfo& detectionClassesInfo = GetTensorInfo(outputs[1]);
43 const TensorInfo& detectionScoresInfo = GetTensorInfo(outputs[2]);
44 const TensorInfo& numDetectionsInfo = GetTensorInfo(outputs[3]);
Aron Virginas-Tar6331f912019-06-03 17:10:02 +010045
Finn Williamsb8181f72021-04-07 10:23:21 +010046 auto boxEncodings = MakeDecoder<float>(boxEncodingsInfo, inputs[0]->Map());
47 auto scores = MakeDecoder<float>(scoresInfo, inputs[1]->Map());
Aron Virginas-Tar6331f912019-06-03 17:10:02 +010048 auto anchors = MakeDecoder<float>(anchorsInfo, m_Anchors->Map(false));
49
Sadik Armagana04a9d72021-04-27 10:02:10 +010050 float* detectionBoxes = reinterpret_cast<float*>(outputs[0]->Map());
51 float* detectionClasses = reinterpret_cast<float*>(outputs[1]->Map());
52 float* detectionScores = reinterpret_cast<float*>(outputs[2]->Map());
53 float* numDetections = reinterpret_cast<float*>(outputs[3]->Map());
Aron Virginas-Tar6331f912019-06-03 17:10:02 +010054
55 DetectionPostProcess(boxEncodingsInfo, scoresInfo, anchorsInfo,
56 detectionBoxesInfo, detectionClassesInfo,
57 detectionScoresInfo, numDetectionsInfo, m_Data.m_Parameters,
58 *boxEncodings, *scores, *anchors, detectionBoxes,
59 detectionClasses, detectionScores, numDetections);
60}
61
62} //namespace armnn