From e96e4f0e49a3571f823927913dde173513baee72 Mon Sep 17 00:00:00 2001 From: Pablo Tello Date: Fri, 21 Dec 2018 16:47:23 +0000 Subject: COMPMID-1766: Implemented CPP Non Max Suppression Change-Id: I2d2b684d464f7b3bb1f91cfd29952f612d65f11f Signed-off-by: Pablo Tello Reviewed-on: https://review.mlplatform.org/708 Reviewed-by: VidhyaSudhan Loganathan Tested-by: Arm Jenkins --- .../CPP/functions/CPPDetectionOutputLayer.h | 52 +++++++++++++++++++++- 1 file changed, 51 insertions(+), 1 deletion(-) (limited to 'arm_compute') 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; // LabelBBox used for map label and bounding box using LabelBBox = std::map>; +/** 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. * -- cgit v1.2.1