| @@ -82,10 +82,13 @@ int ROIPooling::forward(const std::vector<Mat>& bottom_blobs, std::vector<Mat>& | |||||
| // For each ROI R = [x y w h]: max pool over R | // For each ROI R = [x y w h]: max pool over R | ||||
| const float* roi_ptr = roi_blob; | const float* roi_ptr = roi_blob; | ||||
| int roi_x = round(roi_ptr[0] * spatial_scale); | |||||
| int roi_y = round(roi_ptr[1] * spatial_scale); | |||||
| int roi_w = round(roi_ptr[2] * spatial_scale); | |||||
| int roi_h = round(roi_ptr[3] * spatial_scale); | |||||
| int roi_x1 = round(roi_ptr[0] * spatial_scale); | |||||
| int roi_y1 = round(roi_ptr[1] * spatial_scale); | |||||
| int roi_x2 = round(roi_ptr[2] * spatial_scale); | |||||
| int roi_y2 = round(roi_ptr[3] * spatial_scale); | |||||
| int roi_w = std::max(roi_x2 - roi_x1 + 1, 1); | |||||
| int roi_h = std::max(roi_y2 - roi_y1 + 1, 1); | |||||
| float bin_size_w = (float)roi_w / (float)pooled_width; | float bin_size_w = (float)roi_w / (float)pooled_width; | ||||
| float bin_size_h = (float)roi_h / (float)pooled_height; | float bin_size_h = (float)roi_h / (float)pooled_height; | ||||
| @@ -103,10 +106,10 @@ int ROIPooling::forward(const std::vector<Mat>& bottom_blobs, std::vector<Mat>& | |||||
| // Compute pooling region for this output unit: | // Compute pooling region for this output unit: | ||||
| // start (included) = floor(ph * roi_height / pooled_height) | // start (included) = floor(ph * roi_height / pooled_height) | ||||
| // end (excluded) = ceil((ph + 1) * roi_height / pooled_height) | // end (excluded) = ceil((ph + 1) * roi_height / pooled_height) | ||||
| int hstart = roi_y + floor((float)(ph) * bin_size_h); | |||||
| int wstart = roi_x + floor((float)(pw) * bin_size_w); | |||||
| int hend = roi_y + ceil((float)(ph + 1) * bin_size_h); | |||||
| int wend = roi_x + ceil((float)(pw + 1) * bin_size_w); | |||||
| int hstart = roi_y1 + floor((float)(ph) * bin_size_h); | |||||
| int wstart = roi_x1 + floor((float)(pw) * bin_size_w); | |||||
| int hend = roi_y1 + ceil((float)(ph + 1) * bin_size_h); | |||||
| int wend = roi_x1 + ceil((float)(pw + 1) * bin_size_w); | |||||
| hstart = std::min(std::max(hstart, 0), h); | hstart = std::min(std::max(hstart, 0), h); | ||||
| wstart = std::min(std::max(wstart, 0), w); | wstart = std::min(std::max(wstart, 0), w); | ||||
| @@ -133,7 +136,6 @@ int ROIPooling::forward(const std::vector<Mat>& bottom_blobs, std::vector<Mat>& | |||||
| } | } | ||||
| } | } | ||||
| return 0; | return 0; | ||||
| } | } | ||||