[CPU] DO optimization (#6360)

This commit is contained in:
Chenhu Wang authored and GitHub committed 2021-09-13 11:12:03 +03:00
1 parent 92445d4b80
commit 2093af4f8a
2 files changed
+789 -485

No files matched your search

File diff suppressed because it is too large. Load diff
@@ -6,6 +6,7 @@
#include <ie_common.h>
#include <mkldnn_node.h>
#include "common/permute_kernel.h"
namespace MKLDNNPlugin {
@@ -22,63 +23,84 @@ public:
static bool isSupportedOperation(const std::shared_ptr<const ngraph::Node>& op, std::string& errorMessage) noexcept;
private:
const int idx_location = 0;
const int idx_confidence = 1;
const int idx_priors = 2;
const int idx_arm_confidence = 3;
const int idx_arm_location = 4;
static const int ID_LOC = 0;
static const int ID_CONF = 1;
static const int ID_PRIOR = 2;
static const int ID_ARM_CONF = 3;
static const int ID_ARM_LOC = 4;
int _num_classes = 0;
int _background_label_id = 0;
int _top_k = 0;
int _variance_encoded_in_target = 0;
int _keep_top_k = 0;
int _code_type = 0;
int imgNum = 0;
int priorsNum = 0;
int classesNum = 0;
int priorSize = 4;
bool isPriorsPerImg = false;
bool isShareLoc = false;
int locNumForClasses = 0;
bool withAddBoxPred = false;
float objScore = 0.0f;
bool _share_location = false;
bool _clip_before_nms = false; // clip bounding boxes before nms step
bool _clip_after_nms = false; // clip bounding boxes after nms step
bool _decrease_label_id = false;
float confidenceThreshold = 0.0f;
float sparsityThreshold = 0.03f;
int topK = 0;
float NMSThreshold = 0.0f;
bool clipBeforeNMS = false;
bool clipAfterNMS = false;
int backgroundClassId = 0;
bool decreaseClassId = false;
int keepTopK = 0;
bool with_add_box_pred = false;
int _image_width = 0;
int _image_height = 0;
int _prior_size = 4;
bool _normalized = true;
int _offset = 0;
float _nms_threshold = 0.0f;
float _confidence_threshold = 0.0f;
float _objectness_score = 0.0f;
int _num = 0;
int _num_loc_classes = 0;
int _num_priors = 0;
bool _priors_batches = false;
bool varianceEncodedInTarget = false;
bool normalized = false;
int codeType = 1;
int imgWidth = 0;
int imgHeight = 0;
int coordOffset = 0;
enum CodeType {
CORNER = 1,
CENTER_SIZE = 2,
};
void decodeBBoxes(const float *prior_data, const float *loc_data, const float *variance_data,
float *decoded_bboxes, float *decoded_bbox_sizes, int* num_priors_actual, int n, const int& offs, const int& pr_size,
bool decodeType = true); // after ARM = false
int confInfoLen = 0;
bool isSparsityWorthwhile = false;
void nms_cf(const float *conf_data, const float *bboxes, const float *sizes,
int *buffer, int *indices, int &detections, int num_priors_actual);
inline void getActualPriorNum(const float* priorData, int* numPriorsActual, int n);
void nms_mx(const float *conf_data, const float *bboxes, const float *sizes,
int *buffer, int *indices, int *detections, int num_priors_actual);
inline void confReorderDense(const float* confData, const float* ARMConfData, float* reorderedConfData);
std::vector<float> _decoded_bboxes;
std::vector<int> _buffer;
std::vector<int> _indices;
std::vector<int> _detections_count;
std::vector<float> _reordered_conf;
std::vector<float> _bbox_sizes;
std::vector<int> _num_priors_actual;
inline void confFilterCF(float* reorderedConfData, int* indicesData, int* indicesBufData, int* detectionsData);
inline void confFilterMX(const float* confData, const float* ARMConfData, float* reorderedConfData,
int* indicesData, int* indicesBufData, int* detectionsData);
inline void confReorderAndFilterSparsityCF(const float* confData, const float* ARMConfData, float* reorderedConfData,
int* indicesData, int* indicesBufData, int* detectionsData);
inline void confReorderAndFilterSparsityMX(const float* confData, const float* ARMConfData, float* reorderedConfData,
int* indicesData, int* indicesBufData, int* detectionsData);
inline void decodeBBoxes(const float* prior_data, const float* loc_data, const float* variance_data,
float* decoded_bboxes, float* decoded_bbox_sizes, int* num_priors_actual, int n, const int& offs, const int& pr_size,
bool decodeType = true, const int* conf_info_h = nullptr, const int* conf_info_v = nullptr); // decodeType is false after ARM
inline void NMSCF(int* indicesIn, int& detections, int* indicesOut,
const float* bboxes, const float* boxSizes);
inline void NMSMX(int* indicesIn, int* detections, int* indicesOut,
const float* bboxes, const float* sizes);
inline void topk(const int* indicesIn, int* indicesOut, const float* conf, int n, int k);
inline void generateOutput(float* reorderedConfData, int* indicesData, int* detectionsData, float* decodedBboxesData, float* dstData);
std::vector<float> decodedBboxes;
std::vector<int> indicesBuffer;
std::vector<int> indices;
std::vector<int> detectionsCount;
std::vector<float> reorderedConf;
std::vector<float> bboxSizes;
std::vector<int> numPriorsActual;
std::vector<int> confInfoForPrior;
std::string errorPrefix;
};