提交 719059f6 编写于 作者: M Maxim Pashchenkov 提交者: Alexander Alekhin

G-API: Removing ParseSSD overload.

* Removed specialization.

* Removed united

original commit: 651967b9
上级 4eb82c2e
...@@ -69,7 +69,8 @@ GAPI_EXPORTS_W std::tuple<GArray<Rect>, GArray<int>> parseSSD(const GMat& in, ...@@ -69,7 +69,8 @@ GAPI_EXPORTS_W std::tuple<GArray<Rect>, GArray<int>> parseSSD(const GMat& in,
const float confidenceThreshold = 0.5f, const float confidenceThreshold = 0.5f,
const int filterLabel = -1); const int filterLabel = -1);
/** @overload /** @brief Parses output of SSD network.
Extracts detection information (box, confidence) from SSD output and Extracts detection information (box, confidence) from SSD output and
filters it by given confidence and by going out of bounds. filters it by given confidence and by going out of bounds.
...@@ -87,9 +88,9 @@ the larger side of the rectangle. ...@@ -87,9 +88,9 @@ the larger side of the rectangle.
*/ */
GAPI_EXPORTS_W GArray<Rect> parseSSD(const GMat& in, GAPI_EXPORTS_W GArray<Rect> parseSSD(const GMat& in,
const GOpaque<Size>& inSz, const GOpaque<Size>& inSz,
const float confidenceThreshold = 0.5f, const float confidenceThreshold,
const bool alignmentToSquare = false, const bool alignmentToSquare,
const bool filterOutOfBounds = false); const bool filterOutOfBounds);
/** @brief Parses output of Yolo network. /** @brief Parses output of Yolo network.
......
...@@ -652,7 +652,12 @@ GAPI_OCV_KERNEL(GCPUParseSSDBL, cv::gapi::nn::parsers::GParseSSDBL) ...@@ -652,7 +652,12 @@ GAPI_OCV_KERNEL(GCPUParseSSDBL, cv::gapi::nn::parsers::GParseSSDBL)
std::vector<cv::Rect>& out_boxes, std::vector<cv::Rect>& out_boxes,
std::vector<int>& out_labels) std::vector<int>& out_labels)
{ {
cv::parseSSDBL(in_ssd_result, in_size, confidence_threshold, filter_label, out_boxes, out_labels); cv::ParseSSD(in_ssd_result, in_size,
confidence_threshold,
filter_label,
false,
false,
out_boxes, out_labels);
} }
}; };
...@@ -665,7 +670,13 @@ GAPI_OCV_KERNEL(GOCVParseSSD, cv::gapi::nn::parsers::GParseSSD) ...@@ -665,7 +670,13 @@ GAPI_OCV_KERNEL(GOCVParseSSD, cv::gapi::nn::parsers::GParseSSD)
const bool filter_out_of_bounds, const bool filter_out_of_bounds,
std::vector<cv::Rect>& out_boxes) std::vector<cv::Rect>& out_boxes)
{ {
cv::parseSSD(in_ssd_result, in_size, confidence_threshold, alignment_to_square, filter_out_of_bounds, out_boxes); std::vector<int> unused_labels;
cv::ParseSSD(in_ssd_result, in_size,
confidence_threshold,
-1,
alignment_to_square,
filter_out_of_bounds,
out_boxes, unused_labels);
} }
}; };
......
...@@ -170,48 +170,18 @@ private: ...@@ -170,48 +170,18 @@ private:
} // namespace nn } // namespace nn
} // namespace gapi } // namespace gapi
void parseSSDBL(const cv::Mat& in_ssd_result, void ParseSSD(const cv::Mat& in_ssd_result,
const cv::Size& in_size,
const float confidence_threshold,
const int filter_label,
std::vector<cv::Rect>& out_boxes,
std::vector<int>& out_labels)
{
cv::gapi::nn::SSDParser parser(in_ssd_result.size, in_size, in_ssd_result.ptr<float>());
out_boxes.clear();
out_labels.clear();
cv::Rect rc;
float image_id, confidence;
int label;
const size_t range = parser.getMaxProposals();
for (size_t i = 0; i < range; ++i)
{
std::tie(rc, image_id, confidence, label) = parser.extract(i);
if (image_id < 0.f)
{
break; // marks end-of-detections
}
if (confidence < confidence_threshold ||
(filter_label != -1 && label != filter_label))
{
continue; // filter out object classes if filter is specified
} // and skip objects with low confidence
out_boxes.emplace_back(rc & parser.getSurface());
out_labels.emplace_back(label);
}
}
void parseSSD(const cv::Mat& in_ssd_result,
const cv::Size& in_size, const cv::Size& in_size,
const float confidence_threshold, const float confidence_threshold,
const int filter_label,
const bool alignment_to_square, const bool alignment_to_square,
const bool filter_out_of_bounds, const bool filter_out_of_bounds,
std::vector<cv::Rect>& out_boxes) std::vector<cv::Rect>& out_boxes,
std::vector<int>& out_labels)
{ {
cv::gapi::nn::SSDParser parser(in_ssd_result.size, in_size, in_ssd_result.ptr<float>()); cv::gapi::nn::SSDParser parser(in_ssd_result.size, in_size, in_ssd_result.ptr<float>());
out_boxes.clear(); out_boxes.clear();
out_labels.clear();
cv::Rect rc; cv::Rect rc;
float image_id, confidence; float image_id, confidence;
int label; int label;
...@@ -228,12 +198,14 @@ void parseSSD(const cv::Mat& in_ssd_result, ...@@ -228,12 +198,14 @@ void parseSSD(const cv::Mat& in_ssd_result,
{ {
continue; // skip objects with low confidence continue; // skip objects with low confidence
} }
if((filter_label != -1) && (label != filter_label))
{
continue; // filter out object classes if filter is specified
}
if (alignment_to_square) if (alignment_to_square)
{ {
parser.adjustBoundingBox(rc); parser.adjustBoundingBox(rc);
} }
const auto clipped_rc = rc & parser.getSurface(); const auto clipped_rc = rc & parser.getSurface();
if (filter_out_of_bounds) if (filter_out_of_bounds)
{ {
...@@ -243,6 +215,7 @@ void parseSSD(const cv::Mat& in_ssd_result, ...@@ -243,6 +215,7 @@ void parseSSD(const cv::Mat& in_ssd_result,
} }
} }
out_boxes.emplace_back(clipped_rc); out_boxes.emplace_back(clipped_rc);
out_labels.emplace_back(label);
} }
} }
......
...@@ -11,19 +11,14 @@ ...@@ -11,19 +11,14 @@
namespace cv namespace cv
{ {
void parseSSDBL(const cv::Mat& in_ssd_result, void ParseSSD(const cv::Mat& in_ssd_result,
const cv::Size& in_size,
const float confidence_threshold,
const int filter_label,
std::vector<cv::Rect>& out_boxes,
std::vector<int>& out_labels);
void parseSSD(const cv::Mat& in_ssd_result,
const cv::Size& in_size, const cv::Size& in_size,
const float confidence_threshold, const float confidence_threshold,
const int filter_label,
const bool alignment_to_square, const bool alignment_to_square,
const bool filter_out_of_bounds, const bool filter_out_of_bounds,
std::vector<cv::Rect>& out_boxes); std::vector<cv::Rect>& out_boxes,
std::vector<int>& out_labels);
void parseYolo(const cv::Mat& in_yolo_result, void parseYolo(const cv::Mat& in_yolo_result,
const cv::Size& in_size, const cv::Size& in_size,
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册