- CV_Assert(layer.input_size() == 1);
- layerParams.set("across_spatial", false);
- layerParams.set("channel_shared", false);
+ // input: "reduction_indices" (axis)
+ CV_Assert(layer.input_size() == 2);
+ Mat reductionIndices = getTensorContent(getConstBlob(layer, value_id, 1));
+ CV_Assert(reductionIndices.type() == CV_32SC1);
+
+ const int numAxes = reductionIndices.total();
+ if (data_layouts[name] == DATA_LAYOUT_NHWC)
+ for (int i = 0; i < numAxes; ++i)
+ reductionIndices.at<int>(i) = toNCHW(reductionIndices.at<int>(i));
+
+ cv::sort(reductionIndices, reductionIndices, SORT_ASCENDING);
+ for (int i = 1; i < numAxes; ++i)
+ {
+ CV_Assert(reductionIndices.at<int>(i) == reductionIndices.at<int>(i - 1) + 1);
+ // Axes have the same sign.
+ CV_Assert(reductionIndices.at<int>(i) * reductionIndices.at<int>(i - 1) >= 0);
+ }
+ layerParams.set("start_axis", reductionIndices.at<int>(0));
+ layerParams.set("end_axis", reductionIndices.at<int>(numAxes - 1));
+