blob: fc23994f5830f865d48c8fc3dcc230b74b7d6148 [file] [log] [blame]
//
// Copyright © 2020 Arm Ltd. All rights reserved.
// SPDX-License-Identifier: MIT
//
#pragma once
#include <ostream>
#include <vector>
namespace yolov3 {
/** Non Maxima Suprresion configuration meta-data */
struct NMSConfig {
unsigned int num_classes{0}; /**< Number of classes in the detected boxes */
unsigned int num_boxes{0}; /**< Number of detected boxes */
float confidence_threshold{0.8f}; /**< Inclusion confidence threshold for a box */
float iou_threshold{0.8f}; /**< Inclusion threshold for Intersection-Over-Union */
};
/** Box representation structure */
struct Box {
float xmin; /**< X-pos position of the low left coordinate */
float xmax; /**< X-pos position of the top right coordinate */
float ymin; /**< Y-pos position of the low left coordinate */
float ymax; /**< Y-pos position of the top right coordinate */
};
/** Detection structure */
struct Detection {
Box box; /**< Detection box */
float confidence; /**< Confidence of detection */
std::vector<float> classes; /**< Probability of classes */
};
/** Print identified yolo detections
*
* @param[in, out] os Output stream to print to
* @param[in] detections Detections to print
*/
void print_detection(std::ostream& os,
const std::vector<Detection>& detections);
/** Perform Non-Maxima Supression on a list of given detections
*
* @param[in] config Configuration metadata for NMS
* @param[in] detected_boxes Detected boxes
*
* @return A vector with the final detections
*/
std::vector<Detection> nms(const NMSConfig& config,
const std::vector<float>& detected_boxes);
} // namespace yolov3