From 02a66563e1ac23be2d69957f0a2a44d3ee788ee0 Mon Sep 17 00:00:00 2001 From: Tadas Baltrusaitis Date: Tue, 15 Aug 2017 08:55:37 +0100 Subject: [PATCH] Fixing max-pooling for different stride sizes. --- .../LandmarkDetector/src/FaceDetectorMTCNN.cpp | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/lib/local/LandmarkDetector/src/FaceDetectorMTCNN.cpp b/lib/local/LandmarkDetector/src/FaceDetectorMTCNN.cpp index cb01fc9e..0b7f6ea5 100644 --- a/lib/local/LandmarkDetector/src/FaceDetectorMTCNN.cpp +++ b/lib/local/LandmarkDetector/src/FaceDetectorMTCNN.cpp @@ -245,9 +245,18 @@ std::vector> CNN::Inference(const cv::Mat& input_img) for (int x = 0; x < input_maps[in].cols; x += stride_x) { int max_x = cv::min(input_maps[in].cols, x + kernel_size_x); + int x_in_out = floor(x / stride_x); + + if (x_in_out >= out_x) + continue; for (int y = 0; y < input_maps[in].rows; y += stride_y) { + int y_in_out = floor(y / stride_y); + + if (y_in_out >= out_y) + continue; + int max_y = cv::min(input_maps[in].rows, y + kernel_size_y); float curr_max = -FLT_MAX; @@ -263,8 +272,6 @@ std::vector> CNN::Inference(const cv::Mat& input_img) } } } - int x_in_out = floor(x / stride_x); - int y_in_out = floor(y / stride_y); sub_out.at(y_in_out, x_in_out) = curr_max; } } @@ -798,6 +805,9 @@ bool FaceDetectorMTCNN::DetectFaces(vector >& o_regions, const prop_img = (prop_img - 127.5) * 0.0078125; proposal_imgs.push_back(prop_img); + + // Perform RNet on the proposal image + std::vector > rnet_out = RNet.Inference(prop_img); } return true;