#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); ErrorCode Detect(const cv::Mat &srcImage, const std::vector &relInputShape, std::vector &resultsOfDetection); private: void decode_outputs(float *prob, std::vector &objects, float scalew, float scaleh, const int img_w, const int img_h, cv::Size inputSize); void generate_grids_and_stride(std::vector &strides, std::vector &grid_strides, cv::Size inputSize); 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); 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; }; } // namespace migraphxSamples #endif