ArmNN
 20.02
RefDetectionPostProcessWorkload.cpp
Go to the documentation of this file.
1 //
2 // Copyright © 2017 Arm Ltd. All rights reserved.
3 // SPDX-License-Identifier: MIT
4 //
5 
7 
8 #include "Decoders.hpp"
10 #include "Profiling.hpp"
11 #include "RefWorkloadUtils.hpp"
12 
13 namespace armnn
14 {
15 
17  const DetectionPostProcessQueueDescriptor& descriptor, const WorkloadInfo& info)
19  m_Anchors(std::make_unique<ScopedCpuTensorHandle>(*(descriptor.m_Anchors))) {}
20 
22 {
23  ARMNN_SCOPED_PROFILING_EVENT(Compute::CpuRef, "RefDetectionPostProcessWorkload_Execute");
24 
25  const TensorInfo& boxEncodingsInfo = GetTensorInfo(m_Data.m_Inputs[0]);
27  const TensorInfo& anchorsInfo = m_Anchors->GetTensorInfo();
28 
29  const TensorInfo& detectionBoxesInfo = GetTensorInfo(m_Data.m_Outputs[0]);
30  const TensorInfo& detectionClassesInfo = GetTensorInfo(m_Data.m_Outputs[1]);
31  const TensorInfo& detectionScoresInfo = GetTensorInfo(m_Data.m_Outputs[2]);
32  const TensorInfo& numDetectionsInfo = GetTensorInfo(m_Data.m_Outputs[3]);
33 
34  auto boxEncodings = MakeDecoder<float>(boxEncodingsInfo, m_Data.m_Inputs[0]->Map());
35  auto scores = MakeDecoder<float>(scoresInfo, m_Data.m_Inputs[1]->Map());
36  auto anchors = MakeDecoder<float>(anchorsInfo, m_Anchors->Map(false));
37 
38  float* detectionBoxes = GetOutputTensorData<float>(0, m_Data);
39  float* detectionClasses = GetOutputTensorData<float>(1, m_Data);
40  float* detectionScores = GetOutputTensorData<float>(2, m_Data);
41  float* numDetections = GetOutputTensorData<float>(3, m_Data);
42 
43  DetectionPostProcess(boxEncodingsInfo, scoresInfo, anchorsInfo,
44  detectionBoxesInfo, detectionClassesInfo,
45  detectionScoresInfo, numDetectionsInfo, m_Data.m_Parameters,
46  *boxEncodings, *scores, *anchors, detectionBoxes,
47  detectionClasses, detectionScores, numDetections);
48 }
49 
50 } //namespace armnn
CPU Execution: Reference C++ kernels.
virtual void Execute() const override
const DetectionPostProcessQueueDescriptor m_Data
Definition: Workload.hpp:46
armnn::TensorInfo anchorsInfo({ 6, 4 }, armnn::DataType::Float32)
const TensorInfo & GetTensorInfo(const ITensorHandle *tensorHandle)
float32 helpers
std::vector< float > boxEncodings({ 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, -1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f })
Copyright (c) 2020 ARM Limited.
RefDetectionPostProcessWorkload(const DetectionPostProcessQueueDescriptor &descriptor, const WorkloadInfo &info)
#define ARMNN_SCOPED_PROFILING_EVENT(backendId, name)
Definition: Profiling.hpp:169
std::vector< float > scores({ 0.0f, 0.9f, 0.8f, 0.0f, 0.75f, 0.72f, 0.0f, 0.6f, 0.5f, 0.0f, 0.93f, 0.95f, 0.0f, 0.5f, 0.4f, 0.0f, 0.3f, 0.2f })
std::vector< ITensorHandle * > m_Outputs
armnn::TensorInfo scoresInfo({ 1, 6, 3 }, armnn::DataType::Float32)
Contains information about inputs and outputs to a layer.
std::vector< ITensorHandle * > m_Inputs
std::vector< float > anchors({ 0.5f, 0.5f, 1.0f, 1.0f, 0.5f, 0.5f, 1.0f, 1.0f, 0.5f, 0.5f, 1.0f, 1.0f, 0.5f, 10.5f, 1.0f, 1.0f, 0.5f, 10.5f, 1.0f, 1.0f, 0.5f, 100.5f, 1.0f, 1.0f })