mirror of
https://github.com/opencv/opencv.git
synced 2025-06-16 14:50:52 +08:00
Merge pull request #19716 from l-bat:lb/fix_resize
This commit is contained in:
commit
6da5c7c1d0
@ -394,7 +394,15 @@ public:
|
|||||||
const std::vector<Ptr<BackendNode> >& nodes) CV_OVERRIDE
|
const std::vector<Ptr<BackendNode> >& nodes) CV_OVERRIDE
|
||||||
{
|
{
|
||||||
auto& ieInpNode = nodes[0].dynamicCast<InfEngineNgraphNode>()->node;
|
auto& ieInpNode = nodes[0].dynamicCast<InfEngineNgraphNode>()->node;
|
||||||
|
#if INF_ENGINE_VER_MAJOR_LE(INF_ENGINE_RELEASE_2021_2)
|
||||||
auto mvn = std::make_shared<ngraph::op::MVN>(ieInpNode, acrossChannels, normVariance, eps);
|
auto mvn = std::make_shared<ngraph::op::MVN>(ieInpNode, acrossChannels, normVariance, eps);
|
||||||
|
#else
|
||||||
|
int64_t start_axis = acrossChannels ? 1 : 2;
|
||||||
|
std::vector<int64_t> axes_v(ieInpNode->get_shape().size() - start_axis);
|
||||||
|
std::iota(axes_v.begin(), axes_v.end(), start_axis);
|
||||||
|
auto axes = std::make_shared<ngraph::op::Constant>(ngraph::element::i64, ngraph::Shape{axes_v.size()}, axes_v.data());
|
||||||
|
auto mvn = std::make_shared<ngraph::op::v6::MVN>(ieInpNode, axes, normVariance, eps, ngraph::op::MVNEpsMode::INSIDE_SQRT);
|
||||||
|
#endif
|
||||||
return Ptr<BackendNode>(new InfEngineNgraphNode(mvn));
|
return Ptr<BackendNode>(new InfEngineNgraphNode(mvn));
|
||||||
}
|
}
|
||||||
#endif // HAVE_DNN_NGRAPH
|
#endif // HAVE_DNN_NGRAPH
|
||||||
|
@ -257,6 +257,7 @@ public:
|
|||||||
{
|
{
|
||||||
auto& ieInpNode = nodes[0].dynamicCast<InfEngineNgraphNode>()->node;
|
auto& ieInpNode = nodes[0].dynamicCast<InfEngineNgraphNode>()->node;
|
||||||
|
|
||||||
|
#if INF_ENGINE_VER_MAJOR_LE(INF_ENGINE_RELEASE_2021_2)
|
||||||
ngraph::op::InterpolateAttrs attrs;
|
ngraph::op::InterpolateAttrs attrs;
|
||||||
attrs.pads_begin.push_back(0);
|
attrs.pads_begin.push_back(0);
|
||||||
attrs.pads_end.push_back(0);
|
attrs.pads_end.push_back(0);
|
||||||
@ -275,6 +276,37 @@ public:
|
|||||||
std::vector<int64_t> shape = {outHeight, outWidth};
|
std::vector<int64_t> shape = {outHeight, outWidth};
|
||||||
auto out_shape = std::make_shared<ngraph::op::Constant>(ngraph::element::i64, ngraph::Shape{2}, shape.data());
|
auto out_shape = std::make_shared<ngraph::op::Constant>(ngraph::element::i64, ngraph::Shape{2}, shape.data());
|
||||||
auto interp = std::make_shared<ngraph::op::Interpolate>(ieInpNode, out_shape, attrs);
|
auto interp = std::make_shared<ngraph::op::Interpolate>(ieInpNode, out_shape, attrs);
|
||||||
|
#else
|
||||||
|
ngraph::op::v4::Interpolate::InterpolateAttrs attrs;
|
||||||
|
|
||||||
|
if (interpolation == "nearest") {
|
||||||
|
attrs.mode = ngraph::op::v4::Interpolate::InterpolateMode::nearest;
|
||||||
|
attrs.coordinate_transformation_mode = ngraph::op::v4::Interpolate::CoordinateTransformMode::half_pixel;
|
||||||
|
} else if (interpolation == "bilinear") {
|
||||||
|
attrs.mode = ngraph::op::v4::Interpolate::InterpolateMode::linear_onnx;
|
||||||
|
attrs.coordinate_transformation_mode = ngraph::op::v4::Interpolate::CoordinateTransformMode::asymmetric;
|
||||||
|
} else {
|
||||||
|
CV_Error(Error::StsNotImplemented, format("Unsupported interpolation: %s", interpolation.c_str()));
|
||||||
|
}
|
||||||
|
attrs.shape_calculation_mode = ngraph::op::v4::Interpolate::ShapeCalcMode::sizes;
|
||||||
|
|
||||||
|
if (alignCorners) {
|
||||||
|
attrs.coordinate_transformation_mode = ngraph::op::v4::Interpolate::CoordinateTransformMode::align_corners;
|
||||||
|
}
|
||||||
|
|
||||||
|
attrs.nearest_mode = ngraph::op::v4::Interpolate::NearestMode::round_prefer_floor;
|
||||||
|
|
||||||
|
std::vector<int64_t> shape = {outHeight, outWidth};
|
||||||
|
auto out_shape = std::make_shared<ngraph::op::Constant>(ngraph::element::i64, ngraph::Shape{2}, shape.data());
|
||||||
|
|
||||||
|
auto& input_shape = ieInpNode->get_shape();
|
||||||
|
CV_Assert_N(input_shape[2] != 0, input_shape[3] != 0);
|
||||||
|
std::vector<float> scales = {static_cast<float>(outHeight) / input_shape[2], static_cast<float>(outWidth) / input_shape[3]};
|
||||||
|
auto scales_shape = std::make_shared<ngraph::op::Constant>(ngraph::element::f32, ngraph::Shape{2}, scales.data());
|
||||||
|
|
||||||
|
auto axes = std::make_shared<ngraph::op::Constant>(ngraph::element::i64, ngraph::Shape{2}, std::vector<int64_t>{2, 3});
|
||||||
|
auto interp = std::make_shared<ngraph::op::v4::Interpolate>(ieInpNode, out_shape, scales_shape, axes, attrs);
|
||||||
|
#endif
|
||||||
return Ptr<BackendNode>(new InfEngineNgraphNode(interp));
|
return Ptr<BackendNode>(new InfEngineNgraphNode(interp));
|
||||||
}
|
}
|
||||||
#endif // HAVE_DNN_NGRAPH
|
#endif // HAVE_DNN_NGRAPH
|
||||||
|
Loading…
Reference in New Issue
Block a user