[IE][VPU]: Add interpolate nearest 2x upscale optimization (#3315)

This commit is contained in:
Andrey Sokolov 2020-12-03 18:19:50 +03:00 committed by GitHub
parent e1c9d91ece
commit 58aee75914
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 57 additions and 3 deletions

View File

@ -15,14 +15,14 @@ include(dependency_solver)
set(VPU_SUPPORTED_FIRMWARES usb-ma2x8x pcie-ma2x8x) set(VPU_SUPPORTED_FIRMWARES usb-ma2x8x pcie-ma2x8x)
set(VPU_SUPPORTED_FIRMWARES_HASH set(VPU_SUPPORTED_FIRMWARES_HASH
"becaeea32805cc59a59fced0ed08235255a43a3c8535a36fa376351607b24ad6" "2980b6d0726107888ec7ba02c43a245a699c19a0f1e25b54f0bb928c91bfa045"
"fa0303c0c073c68076190cb71ce8bf1cc04ade74ca9a7b5a538ceb99d24d3289") "c4692a7c3f44e6cdf6743c21d99570946d81ece9370fcd07725da95ad8fcd657")
# #
# Default packages # Default packages
# #
set(FIRMWARE_PACKAGE_VERSION 1521) set(FIRMWARE_PACKAGE_VERSION 1532)
set(VPU_CLC_MA2X8X_VERSION "movi-cltools-20.09.2") set(VPU_CLC_MA2X8X_VERSION "movi-cltools-20.09.2")
# #

View File

@ -61,6 +61,14 @@ void FrontEnd::parseInterpolate(const Model& model, const ie::CNNLayerPtr& _laye
if (cmp(coordinateTransformation, "asymmetric")) { if (cmp(coordinateTransformation, "asymmetric")) {
coordinateTransformationMode = InterpolateCoordTransMode::Asymmetric; coordinateTransformationMode = InterpolateCoordTransMode::Asymmetric;
} else if (cmp(coordinateTransformation, "half_pixel")) {
coordinateTransformationMode = InterpolateCoordTransMode::HalfPixel;
} else if (cmp(coordinateTransformation, "pytorch_half_pixel")) {
coordinateTransformationMode = InterpolateCoordTransMode::PytorchHalfPixel;
} else if (cmp(coordinateTransformation, "tf_half_pixel_for_nn")) {
coordinateTransformationMode = InterpolateCoordTransMode::TfHalfPixelForNn;
} else if (cmp(coordinateTransformation, "align_corners")) {
coordinateTransformationMode = InterpolateCoordTransMode::AlignCorners;
} }
if (cmp(nearest, "round_prefer_floor")) { if (cmp(nearest, "round_prefer_floor")) {
@ -69,7 +77,12 @@ void FrontEnd::parseInterpolate(const Model& model, const ie::CNNLayerPtr& _laye
nearestMode = InterpolateNearestMode::RoundPreferCeil; nearestMode = InterpolateNearestMode::RoundPreferCeil;
} else if (cmp(nearest, "floor")) { } else if (cmp(nearest, "floor")) {
nearestMode = InterpolateNearestMode::Floor; nearestMode = InterpolateNearestMode::Floor;
} else if (cmp(nearest, "ceil")) {
nearestMode = InterpolateNearestMode::Ceil;
} else if (cmp(nearest, "simple")) {
nearestMode = InterpolateNearestMode::Simple;
} }
_stageBuilder->addResampleNearestStage(model, _stageBuilder->addResampleNearestStage(model,
_layer->name, _layer->name,
_layer, _layer,

View File

@ -28,6 +28,15 @@ const std::vector<std::vector<size_t>> targetShapes = {
{1, 8, 46, 46}, // * 1.3 {1, 8, 46, 46}, // * 1.3
}; };
const std::vector<std::vector<size_t>> inShapes2x = {
{1, 19, 37, 37},
};
const std::vector<std::vector<size_t>> targetShapes2x = {
{1, 19, 37 * 2, 37 * 2},
};
const std::vector<ngraph::op::v4::Interpolate::InterpolateMode> modesWithoutNearest = { const std::vector<ngraph::op::v4::Interpolate::InterpolateMode> modesWithoutNearest = {
ngraph::op::v4::Interpolate::InterpolateMode::linear, ngraph::op::v4::Interpolate::InterpolateMode::linear,
}; };
@ -40,6 +49,13 @@ const std::vector<ngraph::op::v4::Interpolate::CoordinateTransformMode> coordina
ngraph::op::v4::Interpolate::CoordinateTransformMode::half_pixel, ngraph::op::v4::Interpolate::CoordinateTransformMode::half_pixel,
}; };
const std::vector<ngraph::op::v4::Interpolate::CoordinateTransformMode> coordinateTransformModesNearest2x = {
ngraph::op::v4::Interpolate::CoordinateTransformMode::half_pixel,
ngraph::op::v4::Interpolate::CoordinateTransformMode::pytorch_half_pixel,
ngraph::op::v4::Interpolate::CoordinateTransformMode::asymmetric,
ngraph::op::v4::Interpolate::CoordinateTransformMode::tf_half_pixel_for_nn,
};
const std::vector<ngraph::op::v4::Interpolate::CoordinateTransformMode> coordinateTransformModesNearestMore = { const std::vector<ngraph::op::v4::Interpolate::CoordinateTransformMode> coordinateTransformModesNearestMore = {
ngraph::op::v4::Interpolate::CoordinateTransformMode::asymmetric, ngraph::op::v4::Interpolate::CoordinateTransformMode::asymmetric,
}; };
@ -90,6 +106,19 @@ const std::vector<ngraph::op::v4::Interpolate::ShapeCalcMode> shapeCalculationMo
ngraph::op::v4::Interpolate::ShapeCalcMode::scales, ngraph::op::v4::Interpolate::ShapeCalcMode::scales,
}; };
const auto interpolateCasesNearestMode2x = ::testing::Combine(
::testing::ValuesIn(nearestMode),
::testing::ValuesIn(shapeCalculationMode),
::testing::ValuesIn(coordinateTransformModesNearest2x),
::testing::ValuesIn(nearestModes),
::testing::ValuesIn(antialias),
::testing::ValuesIn(pads),
::testing::ValuesIn(pads),
::testing::ValuesIn(cubeCoefs),
::testing::ValuesIn(defaultAxes),
::testing::ValuesIn(defaultScales));
const auto interpolateCasesNearestMode = ::testing::Combine( const auto interpolateCasesNearestMode = ::testing::Combine(
::testing::ValuesIn(nearestMode), ::testing::ValuesIn(nearestMode),
::testing::ValuesIn(shapeCalculationMode), ::testing::ValuesIn(shapeCalculationMode),
@ -126,6 +155,18 @@ const auto interpolateCasesWithoutNearestMode = ::testing::Combine(
::testing::ValuesIn(defaultAxes), ::testing::ValuesIn(defaultAxes),
::testing::ValuesIn(defaultScales)); ::testing::ValuesIn(defaultScales));
INSTANTIATE_TEST_CASE_P(smoke_Interpolate_nearest_mode_2x, InterpolateLayerTest, ::testing::Combine(
interpolateCasesNearestMode2x,
::testing::ValuesIn(netPrecisions),
::testing::Values(InferenceEngine::Precision::UNSPECIFIED),
::testing::Values(InferenceEngine::Precision::UNSPECIFIED),
::testing::Values(InferenceEngine::Layout::ANY),
::testing::Values(InferenceEngine::Layout::ANY),
::testing::ValuesIn(inShapes2x),
::testing::ValuesIn(targetShapes2x),
::testing::Values(CommonTestUtils::DEVICE_MYRIAD)),
InterpolateLayerTest::getTestCaseName);
INSTANTIATE_TEST_CASE_P(smoke_Interpolate_nearest_mode, InterpolateLayerTest, ::testing::Combine( INSTANTIATE_TEST_CASE_P(smoke_Interpolate_nearest_mode, InterpolateLayerTest, ::testing::Combine(
interpolateCasesNearestMode, interpolateCasesNearestMode,
::testing::ValuesIn(netPrecisions), ::testing::ValuesIn(netPrecisions),