#ifndef __DETECTOR_YOLOX_H__ #define __DETECTOR_YOLOX_H__ #include #include namespace migraphxSamples { typedef struct _YOLOXParameter { int numberOfClasses; float confidenceThreshold; float nmsThreshold; float objectThreshold; }YOLOXParameter; struct Object { cv::Rect_ rect; int label; float prob; }; struct GridAndStride { int grid0; int grid1; int stride; }; class DetectorYOLOX { public: DetectorYOLOX(); ~DetectorYOLOX(); ErrorCode Initialize(InitializationParameterOfDetector initializationParameterOfDetector, bool dynamic); void decode_outputs(float* prob, std::vector& objects, float scalew, float scaleh, const int img_w, const int img_h); void generate_grids_and_stride(std::vector& strides, std::vector& grid_strides); void generate_yolox_proposals(std::vector grid_strides, float* feat_blob, float prob_threshold, std::vector& objects); void qsort_descent_inplace(std::vector& faceobjects, int left, int right); void qsort_descent_inplace(std::vector& objects); void nms_sorted_bboxes(const std::vector& faceobjects, std::vector& picked, float nms_threshold); inline float intersection_area(const Object& a, const Object& b); ErrorCode Detect(const cv::Mat &srcImage, std::vector &relInputShape, std::vector &resultsOfDetection, bool dynamic); private: cv::FileStorage configurationFile; migraphx::program net; cv::Size inputSize; std::string inputName; std::string modelPath; migraphx::shape inputShape; bool useFP16; std::vector classNames; YOLOXParameter yoloxParameter; }; } #endif