aboutsummaryrefslogtreecommitdiff
path: root/arm_compute
diff options
context:
space:
mode:
authorPablo Tello <pablo.tello@arm.com>2018-12-21 16:47:23 +0000
committerGeorgios Pinitas <georgios.pinitas@arm.com>2019-01-21 16:44:00 +0000
commita0a0e29f635de08092c2325f8f049ffb286aabaf (patch)
tree26e33498f278c0b54e7b47cd376e63be5ad526c5 /arm_compute
parent3ddb9ae7c0b9e351179387e530922252315900ad (diff)
downloadComputeLibrary-a0a0e29f635de08092c2325f8f049ffb286aabaf.tar.gz
COMPMID-1766: Implemented CPP Non Max Suppression
Change-Id: I1dcd5fb3d9ad6c6c750415bf8074698b800dfbc1 Reviewed-on: https://review.mlplatform.org/494 Tested-by: Arm Jenkins <bsgcomp@arm.com> Reviewed-by: Giuseppe Rossini <giuseppe.rossini@arm.com> Reviewed-by: Georgios Pinitas <georgios.pinitas@arm.com>
Diffstat (limited to 'arm_compute')
-rw-r--r--arm_compute/runtime/CPP/functions/CPPDetectionOutputLayer.h52
1 files changed, 51 insertions, 1 deletions
diff --git a/arm_compute/runtime/CPP/functions/CPPDetectionOutputLayer.h b/arm_compute/runtime/CPP/functions/CPPDetectionOutputLayer.h
index 7f80948c81..8c610f3ec2 100644
--- a/arm_compute/runtime/CPP/functions/CPPDetectionOutputLayer.h
+++ b/arm_compute/runtime/CPP/functions/CPPDetectionOutputLayer.h
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2018 ARM Limited.
+ * Copyright (c) 2018-2019 ARM Limited.
*
* SPDX-License-Identifier: MIT
*
@@ -39,6 +39,56 @@ using NormalizedBBox = std::array<float, 4>;
// LabelBBox used for map label and bounding box
using LabelBBox = std::map<int, std::vector<NormalizedBBox>>;
+/** CPP Function to perform non maximum suppression on the bounding boxes and scores
+ *
+ */
+class CPPNonMaximumSuppression : public IFunction
+{
+public:
+ /** Default constructor */
+ CPPNonMaximumSuppression();
+ /** Configure the function to perform non maximal suppression
+ *
+ * @param[in] bboxes The input bounding boxes. Data types supported: F32.
+ * @param[in] scores The corresponding input confidence. Same as @p scores.
+ * @param[out] indices The kept indices of bboxes after nms. Data types supported: S32.
+ * @param[in] max_output_size An integer tensor representing the maximum number of boxes to be selected by non max suppression.
+ * @param[in] score_threshold The threshold used to filter detection results.
+ * @param[in] nms_threshold The threshold used in non maximum suppression.
+ *
+ */
+ void configure(const ITensor *bboxes, const ITensor *scores, ITensor *indices, unsigned int max_output_size, const float score_threshold, const float nms_threshold);
+
+ /** Static function to check if given arguments will lead to a valid configuration of @ref CPPNonMaximumSuppression
+ *
+ * @param[in] bboxes The input bounding boxes. Data types supported: F32.
+ * @param[in] scores The corresponding input confidence. Same as @p scores.
+ * @param[out] indices The kept indices of bboxes after nms. Data types supported: S32.
+ * @param[in] max_output_size An integer tensor representing the maximum number of boxes to be selected by non max suppression.
+ * @param[in] score_threshold The threshold used to filter detection results.
+ * @param[in] nms_threshold The threshold used in non maximum suppression.
+ *
+ */
+ static Status validate(const ITensorInfo *bboxes, const ITensorInfo *scores, const ITensorInfo *indices, unsigned int max_output_size,
+ const float score_threshold, const float nms_threshold);
+
+ // Inherited methods overridden:
+ void run() override;
+ /** Prevent instances of this class from being copied (As this class contains pointers) */
+ CPPNonMaximumSuppression(const CPPNonMaximumSuppression &) = delete;
+ /** Prevent instances of this class from being copied (As this class contains pointers) */
+ CPPNonMaximumSuppression &operator=(const CPPNonMaximumSuppression &) = delete;
+
+private:
+ const ITensor *_bboxes;
+ const ITensor *_scores;
+ ITensor *_indices;
+ unsigned int _max_output_size;
+
+ float _score_threshold;
+ float _nms_threshold;
+};
+
/** CPP Function to generate the detection output based on location and confidence
* predictions by doing non maximum suppression.
*