[CPU] BF16 Deconvolution support (#4048)
* disable and cleanup interp and resample that is covered by interpolate * [BF16] Deconvolution was enabled * Deconvolution tests were added * Copyright year was fixed * Friendly name usage for tests * Test inherited from CPUTestsBase * Fusing tests were added * oneDNN was updated * Gemm and 1x1 were added with tests * Number of channels not aligned on vector length was done for blocked cases * DW deconvolution case was added with tests * oneDNN changes for BF16 deconvolutions were squashed Co-authored-by: chenhuwa <chenhu.wang@intel.com>
This commit is contained in:
1 parent
937c332978
commit
1bd7b37419
8 files changed
+761
-9
No files matched your search
@@ -14,7 +14,8 @@ namespace MKLDNNPlugin {
|
||||
|
||||
class BF16Transformer {
|
||||
const InferenceEngine::details::caseless_set<std::string> _initbf16 =
|
||||
{ "convolution", "fullyconnected", "innerproduct", "gemm", "RegionYolo", "Interpolate", "PSROIPooling" };
|
||||
{ "convolution", "fullyconnected", "innerproduct", "gemm", "RegionYolo", "Interpolate", "PSROIPooling", "Deconvolution" };
|
||||
|
||||
const InferenceEngine::details::caseless_set<std::string> _complementbf16 =
|
||||
{ "relu", "tanh", "elu", "square", "abs", "sqrt", "linear", "bounded_relu", "soft_relu", "normalize",
|
||||
"sigmoid", "ReLU6", "not", "activation", "HSwish", "mish", "logistic", "mod", "resample",
|
||||
|
||||
@@ -26,9 +26,6 @@ public:
|
||||
if (layer->insData.size() != 1)
|
||||
THROW_IE_EXCEPTION << layer->name << " Incorrect number of input edges!";
|
||||
|
||||
if (layer->insData[0].lock()->getTensorDesc().getPrecision() != Precision::FP32)
|
||||
THROW_IE_EXCEPTION << layer->name << " Incorrect input data tensor precision. Only FP32 is supported!";
|
||||
|
||||
SizeVector dims = layer->insData[0].lock()->getTensorDesc().getDims();
|
||||
if (!dims.size())
|
||||
dims = SizeVector(1, 1);
|
||||
|
||||
@@ -29,13 +29,15 @@ void MKLDNNDeconvolutionNode::getSupportedDescriptors() {
|
||||
return;
|
||||
|
||||
InferenceEngine::Precision precision = getCnnLayer()->insData[0].lock()->getPrecision();
|
||||
if (precision != InferenceEngine::Precision::FP32)
|
||||
if (precision != InferenceEngine::Precision::FP32 && precision != InferenceEngine::Precision::BF16)
|
||||
precision = InferenceEngine::Precision::FP32;
|
||||
auto inputDataType = MKLDNNExtensionUtils::IEPrecisionToDataType(precision);
|
||||
precision = getCnnLayer()->outData[0]->getPrecision();
|
||||
if (precision != InferenceEngine::Precision::FP32)
|
||||
if (precision != InferenceEngine::Precision::FP32 && precision != InferenceEngine::Precision::BF16)
|
||||
precision = InferenceEngine::Precision::FP32;
|
||||
auto outputDataType = MKLDNNExtensionUtils::IEPrecisionToDataType(precision);
|
||||
if (inputDataType == memory::data_type::bf16 || outputDataType == memory::data_type::bf16)
|
||||
inputDataType = outputDataType = memory::data_type::bf16;
|
||||
|
||||
if (getParentEdges().empty() || getParentEdges().size() > 3)
|
||||
THROW_IE_EXCEPTION << "Incorrect number of input edges for layer " << getName();
|
||||
|
||||
Executable
+352
@@ -0,0 +1,352 @@
|
||||
// Copyright (C) 2021 Intel Corporation
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
//
|
||||
|
||||
#include "test_utils/cpu_test_utils.hpp"
|
||||
#include "test_utils/fusing_test_utils.hpp"
|
||||
#include "shared_test_classes/base/layer_test_utils.hpp"
|
||||
#include "ngraph_functions/utils/ngraph_helpers.hpp"
|
||||
#include "ngraph_functions/builders.hpp"
|
||||
#include <shared_test_classes/single_layer/convolution_backprop_data.hpp>
|
||||
|
||||
|
||||
using namespace InferenceEngine;
|
||||
using namespace CPUTestUtils;
|
||||
|
||||
namespace CPULayerTestsDefinitions {
|
||||
using LayerTestsDefinitions::convBackpropDataSpecificParams;
|
||||
using LayerTestsDefinitions::convBackpropDataLayerTestParamsSet;
|
||||
|
||||
typedef std::tuple<
|
||||
convBackpropDataLayerTestParamsSet,
|
||||
CPUSpecificParams,
|
||||
fusingSpecificParams,
|
||||
std::map<std::string, std::string> > deconvLayerCPUTestParamsSet;
|
||||
|
||||
class DeconvolutionLayerCPUTest : public testing::WithParamInterface<deconvLayerCPUTestParamsSet>,
|
||||
virtual public LayerTestsUtils::LayerTestsCommon, public CpuTestWithFusing {
|
||||
public:
|
||||
static std::string getTestCaseName(testing::TestParamInfo<deconvLayerCPUTestParamsSet> obj) {
|
||||
convBackpropDataLayerTestParamsSet basicParamsSet;
|
||||
CPUSpecificParams cpuParams;
|
||||
fusingSpecificParams fusingParams;
|
||||
std::map<std::string, std::string> additionalConfig;
|
||||
std::tie(basicParamsSet, cpuParams, fusingParams, additionalConfig) = obj.param;
|
||||
|
||||
std::ostringstream result;
|
||||
result << LayerTestsDefinitions::ConvolutionBackpropDataLayerTest::getTestCaseName(testing::TestParamInfo<convBackpropDataLayerTestParamsSet>(
|
||||
basicParamsSet, 0));
|
||||
|
||||
result << CPUTestsBase::getTestCaseName(cpuParams);
|
||||
result << CpuTestWithFusing::getTestCaseName(fusingParams);
|
||||
|
||||
if (!additionalConfig.empty()) {
|
||||
result << "_PluginConf";
|
||||
for (auto& item : additionalConfig) {
|
||||
result << "_" << item.first << "=" << item.second;
|
||||
}
|
||||
}
|
||||
|
||||
return result.str();
|
||||
}
|
||||
protected:
|
||||
void SetUp() override {
|
||||
convBackpropDataLayerTestParamsSet basicParamsSet;
|
||||
CPUSpecificParams cpuParams;
|
||||
fusingSpecificParams fusingParams;
|
||||
std::map<std::string, std::string> additionalConfig;
|
||||
std::tie(basicParamsSet, cpuParams, fusingParams, additionalConfig) = this->GetParam();
|
||||
|
||||
configuration.insert(additionalConfig.begin(), additionalConfig.end());
|
||||
|
||||
std::tie(inFmts, outFmts, priority, selectedType) = cpuParams;
|
||||
std::tie(postOpMgrPtr, fusedOps) = fusingParams;
|
||||
|
||||
convBackpropDataSpecificParams convParams;
|
||||
std::vector<size_t> inputShape;
|
||||
auto netPrecision = InferenceEngine::Precision::UNSPECIFIED;
|
||||
std::tie(convParams, netPrecision, inPrc, outPrc, inLayout, outLayout, inputShape, targetDevice) = basicParamsSet;
|
||||
|
||||
if (inPrc == Precision::UNSPECIFIED) {
|
||||
selectedType += std::string("_") + Precision(Precision::FP32).name();
|
||||
} else {
|
||||
selectedType += std::string("_") + inPrc.name();
|
||||
}
|
||||
|
||||
ngraph::op::PadType padType;
|
||||
InferenceEngine::SizeVector kernel, stride, dilation;
|
||||
std::vector<ptrdiff_t> padBegin, padEnd;
|
||||
size_t convOutChannels;
|
||||
std::tie(kernel, stride, padBegin, padEnd, dilation, convOutChannels, padType) = convParams;
|
||||
auto ngPrc = FuncTestUtils::PrecisionUtils::convertIE2nGraphPrc(netPrecision);
|
||||
|
||||
auto inputParams = ngraph::builder::makeParams(ngraph::element::f32, { inputShape });
|
||||
auto paramOuts = ngraph::helpers::convert2OutputVector(ngraph::helpers::castOps2Nodes<ngraph::op::Parameter>(inputParams));
|
||||
|
||||
auto deconvolutionNode = ngraph::builder::makeConvolutionBackpropData(paramOuts.front(), ngPrc, kernel, stride, padBegin,
|
||||
padEnd, dilation, padType, convOutChannels);
|
||||
|
||||
function = makeNgraphFunction(ngPrc, inputParams, deconvolutionNode, "convolutionBackpropData");
|
||||
}
|
||||
};
|
||||
|
||||
TEST_P(DeconvolutionLayerCPUTest, CompareWithRefs) {
|
||||
SKIP_IF_CURRENT_TEST_IS_DISABLED()
|
||||
|
||||
Run();
|
||||
CheckPluginRelatedResults(executableNetwork, "Deconvolution");
|
||||
}
|
||||
|
||||
namespace {
|
||||
|
||||
/* COMMON PARAMS */
|
||||
const std::vector<fusingSpecificParams> fusingParamsSet{
|
||||
emptyFusingSpec,
|
||||
fusingScaleShift
|
||||
};
|
||||
|
||||
const std::map<std::string, std::string> cpuEmptyPluginConfig;
|
||||
const std::map<std::string, std::string> cpuBF16PluginConfig = { { PluginConfigParams::KEY_ENFORCE_BF16, PluginConfigParams::YES } };
|
||||
|
||||
/* ============= Deconvolution params (planar layout) ============= */
|
||||
const SizeVector numOutChannels_Planar = { 6 };
|
||||
|
||||
/* ============= Deconvolution params (blocked layout) ============= */
|
||||
const SizeVector numOutChannels_Blocked = { 64 };
|
||||
|
||||
/* ============= Deconvolution params (2D) ============= */
|
||||
const std::vector<SizeVector> kernels2d = { {3, 3}, {1, 1} };
|
||||
const std::vector<SizeVector> strides2d = { {1, 1}, {2, 2} };
|
||||
const std::vector<std::vector<ptrdiff_t>> padBegins2d = { {0, 0} };
|
||||
const std::vector<std::vector<ptrdiff_t>> padEnds2d = { {0, 0} };
|
||||
const std::vector<SizeVector> dilations2d = { {1, 1} };
|
||||
|
||||
/* ============= Deconvolution params (3D) ============= */
|
||||
const std::vector<SizeVector> kernels3d = { {3, 3, 3}, {1, 1, 1} };
|
||||
const std::vector<SizeVector> strides3d = { {1, 1, 1}, {2, 2, 2} };
|
||||
const std::vector<std::vector<ptrdiff_t>> padBegins3d = { {0, 0, 0} };
|
||||
const std::vector<std::vector<ptrdiff_t>> padEnds3d = { {0, 0, 0} };
|
||||
const std::vector<SizeVector> dilations3d = { {1, 1, 1} };
|
||||
/* ============= */
|
||||
|
||||
/* INSTANCES */
|
||||
/* ============= Deconvolution (Planar 2D) ============= */
|
||||
const auto convParams_ExplicitPadding_Planar_2D = ::testing::Combine(
|
||||
::testing::ValuesIn(kernels2d),
|
||||
::testing::ValuesIn(strides2d),
|
||||
::testing::ValuesIn(padBegins2d),
|
||||
::testing::ValuesIn(padEnds2d),
|
||||
::testing::ValuesIn(dilations2d),
|
||||
::testing::ValuesIn(numOutChannels_Planar),
|
||||
::testing::Values(ngraph::op::PadType::EXPLICIT)
|
||||
);
|
||||
|
||||
INSTANTIATE_TEST_CASE_P(smoke_Deconv_2D_Planar_FP32, DeconvolutionLayerCPUTest,
|
||||
::testing::Combine(
|
||||
::testing::Combine(
|
||||
convParams_ExplicitPadding_Planar_2D,
|
||||
::testing::Values(Precision::FP32),
|
||||
::testing::Values(Precision::UNSPECIFIED),
|
||||
::testing::Values(Precision::UNSPECIFIED),
|
||||
::testing::Values(Layout::ANY),
|
||||
::testing::Values(Layout::ANY),
|
||||
::testing::Values(std::vector<size_t >({ 2, 12, 7, 7 })),
|
||||
::testing::Values(CommonTestUtils::DEVICE_CPU)),
|
||||
::testing::ValuesIn(filterCPUInfoForDevice({conv_gemm_2D})),
|
||||
::testing::ValuesIn(fusingParamsSet),
|
||||
::testing::Values(cpuEmptyPluginConfig)),
|
||||
DeconvolutionLayerCPUTest::getTestCaseName);
|
||||
|
||||
INSTANTIATE_TEST_CASE_P(smoke_Deconv_2D_Planar_BF16, DeconvolutionLayerCPUTest,
|
||||
::testing::Combine(
|
||||
::testing::Combine(
|
||||
convParams_ExplicitPadding_Planar_2D,
|
||||
::testing::Values(Precision::FP32),
|
||||
::testing::Values(Precision::BF16),
|
||||
::testing::Values(Precision::BF16),
|
||||
::testing::Values(Layout::ANY),
|
||||
::testing::Values(Layout::ANY),
|
||||
::testing::Values(std::vector<size_t >({ 2, 12, 7, 7 })),
|
||||
::testing::Values(CommonTestUtils::DEVICE_CPU)),
|
||||
::testing::ValuesIn(filterCPUInfoForDevice({conv_gemm_2D})),
|
||||
::testing::ValuesIn(fusingParamsSet),
|
||||
::testing::Values(cpuBF16PluginConfig)),
|
||||
DeconvolutionLayerCPUTest::getTestCaseName);
|
||||
|
||||
/* ============= GroupDeconvolution (Planar 3D) ============= */
|
||||
const auto convParams_ExplicitPadding_Planar_3D = ::testing::Combine(
|
||||
::testing::ValuesIn(kernels3d),
|
||||
::testing::ValuesIn(strides3d),
|
||||
::testing::ValuesIn(padBegins3d),
|
||||
::testing::ValuesIn(padEnds3d),
|
||||
::testing::ValuesIn(dilations3d),
|
||||
::testing::ValuesIn(numOutChannels_Planar),
|
||||
::testing::Values(ngraph::op::PadType::EXPLICIT)
|
||||
);
|
||||
|
||||
INSTANTIATE_TEST_CASE_P(smoke_Deconv_3D_Planar_FP32, DeconvolutionLayerCPUTest,
|
||||
::testing::Combine(
|
||||
::testing::Combine(
|
||||
convParams_ExplicitPadding_Planar_3D,
|
||||
::testing::Values(Precision::FP32),
|
||||
::testing::Values(Precision::UNSPECIFIED),
|
||||
::testing::Values(Precision::UNSPECIFIED),
|
||||
::testing::Values(Layout::ANY),
|
||||
::testing::Values(Layout::ANY),
|
||||
::testing::Values(std::vector<size_t >({ 2, 12, 7, 7, 7 })),
|
||||
::testing::Values(CommonTestUtils::DEVICE_CPU)),
|
||||
::testing::ValuesIn(filterCPUInfoForDevice({conv_gemm_3D})),
|
||||
::testing::ValuesIn(fusingParamsSet),
|
||||
::testing::Values(cpuEmptyPluginConfig)),
|
||||
DeconvolutionLayerCPUTest::getTestCaseName);
|
||||
|
||||
INSTANTIATE_TEST_CASE_P(smoke_Deconv_3D_Planar_BF16, DeconvolutionLayerCPUTest,
|
||||
::testing::Combine(
|
||||
::testing::Combine(
|
||||
convParams_ExplicitPadding_Planar_3D,
|
||||
::testing::Values(Precision::FP32),
|
||||
::testing::Values(Precision::BF16),
|
||||
::testing::Values(Precision::BF16),
|
||||
::testing::Values(Layout::ANY),
|
||||
::testing::Values(Layout::ANY),
|
||||
::testing::Values(std::vector<size_t >({ 2, 12, 7, 7, 7 })),
|
||||
::testing::Values(CommonTestUtils::DEVICE_CPU)),
|
||||
::testing::ValuesIn(filterCPUInfoForDevice({conv_gemm_3D})),
|
||||
::testing::ValuesIn(fusingParamsSet),
|
||||
::testing::Values(cpuBF16PluginConfig)),
|
||||
DeconvolutionLayerCPUTest::getTestCaseName);
|
||||
|
||||
/* ============= GroupDeconvolution (Blocked 2D) ============= */
|
||||
const auto convParams_ExplicitPadding_Blocked_2D = ::testing::Combine(
|
||||
::testing::ValuesIn(kernels2d),
|
||||
::testing::ValuesIn(strides2d),
|
||||
::testing::ValuesIn(padBegins2d),
|
||||
::testing::ValuesIn(padEnds2d),
|
||||
::testing::ValuesIn(dilations2d),
|
||||
::testing::ValuesIn(numOutChannels_Blocked),
|
||||
::testing::Values(ngraph::op::PadType::EXPLICIT)
|
||||
);
|
||||
|
||||
INSTANTIATE_TEST_CASE_P(smoke_Deconv_2D_Blocked_FP32, DeconvolutionLayerCPUTest,
|
||||
::testing::Combine(
|
||||
::testing::Combine(
|
||||
convParams_ExplicitPadding_Blocked_2D,
|
||||
::testing::Values(Precision::FP32),
|
||||
::testing::Values(Precision::UNSPECIFIED),
|
||||
::testing::Values(Precision::UNSPECIFIED),
|
||||
::testing::Values(Layout::ANY),
|
||||
::testing::Values(Layout::ANY),
|
||||
::testing::Values(std::vector<size_t >({ 2, 67, 7, 7 })),
|
||||
::testing::Values(CommonTestUtils::DEVICE_CPU)),
|
||||
::testing::ValuesIn(filterCPUInfoForDevice({conv_avx512_2D})),
|
||||
::testing::ValuesIn(fusingParamsSet),
|
||||
::testing::Values(cpuEmptyPluginConfig)),
|
||||
DeconvolutionLayerCPUTest::getTestCaseName);
|
||||
|
||||
INSTANTIATE_TEST_CASE_P(smoke_Deconv_2D_Blocked_BF16, DeconvolutionLayerCPUTest,
|
||||
::testing::Combine(
|
||||
::testing::Combine(
|
||||
convParams_ExplicitPadding_Blocked_2D,
|
||||
::testing::Values(Precision::FP32),
|
||||
::testing::Values(Precision::BF16),
|
||||
::testing::Values(Precision::BF16),
|
||||
::testing::Values(Layout::ANY),
|
||||
::testing::Values(Layout::ANY),
|
||||
::testing::Values(std::vector<size_t >({ 2, 67, 7, 7 })),
|
||||
::testing::Values(CommonTestUtils::DEVICE_CPU)),
|
||||
::testing::ValuesIn(filterCPUInfoForDevice({conv_avx512_2D})),
|
||||
::testing::ValuesIn(fusingParamsSet),
|
||||
::testing::Values(cpuBF16PluginConfig)),
|
||||
DeconvolutionLayerCPUTest::getTestCaseName);
|
||||
|
||||
/* ============= GroupDeconvolution (Blocked 3D) ============= */
|
||||
const auto convParams_ExplicitPadding_Blocked_3D = ::testing::Combine(
|
||||
::testing::ValuesIn(kernels3d),
|
||||
::testing::ValuesIn(strides3d),
|
||||
::testing::ValuesIn(padBegins3d),
|
||||
::testing::ValuesIn(padEnds3d),
|
||||
::testing::ValuesIn(dilations3d),
|
||||
::testing::ValuesIn(numOutChannels_Blocked),
|
||||
::testing::Values(ngraph::op::PadType::EXPLICIT)
|
||||
);
|
||||
|
||||
INSTANTIATE_TEST_CASE_P(smoke_Deconv_3D_Blocked_FP32, DeconvolutionLayerCPUTest,
|
||||
::testing::Combine(
|
||||
::testing::Combine(
|
||||
convParams_ExplicitPadding_Blocked_3D,
|
||||
::testing::Values(Precision::FP32),
|
||||
::testing::Values(Precision::UNSPECIFIED),
|
||||
::testing::Values(Precision::UNSPECIFIED),
|
||||
::testing::Values(Layout::ANY),
|
||||
::testing::Values(Layout::ANY),
|
||||
::testing::Values(std::vector<size_t >({ 2, 67, 7, 7, 7 })),
|
||||
::testing::Values(CommonTestUtils::DEVICE_CPU)),
|
||||
::testing::ValuesIn(filterCPUInfoForDevice({conv_avx512_3D})),
|
||||
::testing::ValuesIn(fusingParamsSet),
|
||||
::testing::Values(cpuEmptyPluginConfig)),
|
||||
DeconvolutionLayerCPUTest::getTestCaseName);
|
||||
|
||||
INSTANTIATE_TEST_CASE_P(smoke_Deconv_3D_Blocked_BF16, DeconvolutionLayerCPUTest,
|
||||
::testing::Combine(
|
||||
::testing::Combine(
|
||||
convParams_ExplicitPadding_Blocked_3D,
|
||||
::testing::Values(Precision::FP32),
|
||||
::testing::Values(Precision::BF16),
|
||||
::testing::Values(Precision::BF16),
|
||||
::testing::Values(Layout::ANY),
|
||||
::testing::Values(Layout::ANY),
|
||||
::testing::Values(std::vector<size_t >({ 2, 67, 7, 7, 7 })),
|
||||
::testing::Values(CommonTestUtils::DEVICE_CPU)),
|
||||
::testing::ValuesIn(filterCPUInfoForDevice({conv_avx512_3D})),
|
||||
::testing::ValuesIn(fusingParamsSet),
|
||||
::testing::Values(cpuBF16PluginConfig)),
|
||||
DeconvolutionLayerCPUTest::getTestCaseName);
|
||||
|
||||
/* ============= Kernel_1x1 (2D) ============= */
|
||||
|
||||
const auto convParams_ExplicitPadding_1x1_2D = ::testing::Combine(
|
||||
::testing::Values(SizeVector({1, 1})),
|
||||
::testing::Values(SizeVector({1, 1})),
|
||||
::testing::Values(std::vector<ptrdiff_t>({0, 0})),
|
||||
::testing::Values(std::vector<ptrdiff_t>({0, 0})),
|
||||
::testing::Values(SizeVector({1, 1})),
|
||||
::testing::ValuesIn(numOutChannels_Blocked),
|
||||
::testing::Values(ngraph::op::PadType::EXPLICIT)
|
||||
);
|
||||
|
||||
INSTANTIATE_TEST_CASE_P(smoke_Deconv_2D_1x1_FP32, DeconvolutionLayerCPUTest,
|
||||
::testing::Combine(
|
||||
::testing::Combine(
|
||||
convParams_ExplicitPadding_1x1_2D,
|
||||
::testing::Values(Precision::FP32),
|
||||
::testing::Values(Precision::UNSPECIFIED),
|
||||
::testing::Values(Precision::UNSPECIFIED),
|
||||
::testing::Values(Layout::ANY),
|
||||
::testing::Values(Layout::ANY),
|
||||
::testing::Values(std::vector<size_t >({ 2, 67, 7, 7 })),
|
||||
::testing::Values(CommonTestUtils::DEVICE_CPU)),
|
||||
::testing::ValuesIn(filterCPUInfoForDevice({conv_avx512_2D_1x1})),
|
||||
::testing::ValuesIn(fusingParamsSet),
|
||||
::testing::Values(cpuEmptyPluginConfig)),
|
||||
DeconvolutionLayerCPUTest::getTestCaseName);
|
||||
|
||||
INSTANTIATE_TEST_CASE_P(smoke_Deconv_2D_1x1_BF16, DeconvolutionLayerCPUTest,
|
||||
::testing::Combine(
|
||||
::testing::Combine(
|
||||
convParams_ExplicitPadding_1x1_2D,
|
||||
::testing::Values(Precision::FP32),
|
||||
::testing::Values(Precision::BF16),
|
||||
::testing::Values(Precision::BF16),
|
||||
::testing::Values(Layout::ANY),
|
||||
::testing::Values(Layout::ANY),
|
||||
::testing::Values(std::vector<size_t >({ 2, 67, 7, 7 })),
|
||||
::testing::Values(CommonTestUtils::DEVICE_CPU)),
|
||||
::testing::ValuesIn(filterCPUInfoForDevice({conv_avx512_2D_1x1})),
|
||||
::testing::ValuesIn(fusingParamsSet),
|
||||
::testing::Values(cpuBF16PluginConfig)),
|
||||
DeconvolutionLayerCPUTest::getTestCaseName);
|
||||
|
||||
/* ========= */
|
||||
|
||||
} // namespace
|
||||
} // namespace CPULayerTestsDefinitions
|
||||
Executable
+380
@@ -0,0 +1,380 @@
|
||||
// Copyright (C) 2020 Intel Corporation
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
//
|
||||
|
||||
#include <shared_test_classes/single_layer/group_convolution_backprop_data.hpp>
|
||||
#include "test_utils/cpu_test_utils.hpp"
|
||||
#include "test_utils/fusing_test_utils.hpp"
|
||||
|
||||
using namespace InferenceEngine;
|
||||
using namespace CPUTestUtils;
|
||||
|
||||
namespace CPULayerTestsDefinitions {
|
||||
|
||||
using groupConvBackpropDataLayerTestParamsSet = LayerTestsDefinitions::groupConvBackpropDataLayerTestParamsSet;
|
||||
using groupConvBackpropDataSpecificParams = LayerTestsDefinitions::groupConvBackpropDataSpecificParams;
|
||||
|
||||
typedef std::tuple<
|
||||
groupConvBackpropDataLayerTestParamsSet,
|
||||
CPUSpecificParams,
|
||||
fusingSpecificParams,
|
||||
std::map<std::string, std::string>> groupDeconvLayerCPUTestParamsSet;
|
||||
|
||||
class GroupDeconvolutionLayerCPUTest : public testing::WithParamInterface<groupDeconvLayerCPUTestParamsSet>,
|
||||
virtual public LayerTestsUtils::LayerTestsCommon, public CpuTestWithFusing {
|
||||
public:
|
||||
static std::string getTestCaseName(testing::TestParamInfo<groupDeconvLayerCPUTestParamsSet> obj) {
|
||||
groupConvBackpropDataLayerTestParamsSet basicParamsSet;
|
||||
CPUSpecificParams cpuParams;
|
||||
fusingSpecificParams fusingParams;
|
||||
std::map<std::string, std::string> additionalConfig;
|
||||
std::tie(basicParamsSet, cpuParams, fusingParams, additionalConfig) = obj.param;
|
||||
|
||||
std::ostringstream result;
|
||||
result << LayerTestsDefinitions::GroupConvBackpropDataLayerTest::getTestCaseName(testing::TestParamInfo<groupConvBackpropDataLayerTestParamsSet>(
|
||||
basicParamsSet, 0));
|
||||
|
||||
result << CPUTestsBase::getTestCaseName(cpuParams);
|
||||
result << CpuTestWithFusing::getTestCaseName(fusingParams);
|
||||
|
||||
if (!additionalConfig.empty()) {
|
||||
result << "_PluginConf";
|
||||
for (auto& item : additionalConfig) {
|
||||
result << "_" << item.first << "=" << item.second;
|
||||
}
|
||||
}
|
||||
|
||||
return result.str();
|
||||
}
|
||||
|
||||
protected:
|
||||
void SetUp() {
|
||||
groupConvBackpropDataLayerTestParamsSet basicParamsSet;
|
||||
CPUSpecificParams cpuParams;
|
||||
fusingSpecificParams fusingParams;
|
||||
std::map<std::string, std::string> additionalConfig;
|
||||
std::tie(basicParamsSet, cpuParams, fusingParams, additionalConfig) = this->GetParam();
|
||||
|
||||
configuration.insert(additionalConfig.begin(), additionalConfig.end());
|
||||
|
||||
std::tie(inFmts, outFmts, priority, selectedType) = cpuParams;
|
||||
std::tie(postOpMgrPtr, fusedOps) = fusingParams;
|
||||
|
||||
groupConvBackpropDataSpecificParams groupConvParams;
|
||||
std::vector<size_t> inputShape;
|
||||
auto netPrecision = InferenceEngine::Precision::UNSPECIFIED;
|
||||
std::tie(groupConvParams, netPrecision, inPrc, outPrc, inLayout, outLayout, inputShape, targetDevice) = basicParamsSet;
|
||||
|
||||
if (inPrc == Precision::UNSPECIFIED) {
|
||||
selectedType += std::string("_") + Precision(Precision::FP32).name();
|
||||
} else {
|
||||
selectedType += std::string("_") + inPrc.name();
|
||||
}
|
||||
|
||||
ngraph::op::PadType padType;
|
||||
InferenceEngine::SizeVector kernel, stride, dilation;
|
||||
std::vector<ptrdiff_t> padBegin, padEnd;
|
||||
size_t convOutChannels, numGroups;
|
||||
std::tie(kernel, stride, padBegin, padEnd, dilation, convOutChannels, numGroups, padType) = groupConvParams;
|
||||
|
||||
auto ngPrc = FuncTestUtils::PrecisionUtils::convertIE2nGraphPrc(netPrecision);
|
||||
auto params = ngraph::builder::makeParams(ngPrc, {inputShape});
|
||||
auto paramOuts = ngraph::helpers::convert2OutputVector(
|
||||
ngraph::helpers::castOps2Nodes<ngraph::op::Parameter>(params));
|
||||
auto groupConv = std::dynamic_pointer_cast<ngraph::opset1::GroupConvolutionBackpropData>(
|
||||
ngraph::builder::makeGroupConvolutionBackpropData(paramOuts[0], ngPrc, kernel, stride, padBegin,
|
||||
padEnd, dilation, padType, convOutChannels, numGroups));
|
||||
function = makeNgraphFunction(ngPrc, params, groupConv, "groupConvolutionBackpropData");
|
||||
}
|
||||
};
|
||||
|
||||
TEST_P(GroupDeconvolutionLayerCPUTest, CompareWithRefs) {
|
||||
SKIP_IF_CURRENT_TEST_IS_DISABLED()
|
||||
|
||||
Run();
|
||||
CheckPluginRelatedResults(executableNetwork, "Deconvolution");
|
||||
}
|
||||
|
||||
namespace {
|
||||
|
||||
/* GROUP CONV TEST UTILS */
|
||||
std::vector<groupDeconvLayerCPUTestParamsSet> filterParamsSetForDevice(std::vector<groupDeconvLayerCPUTestParamsSet> paramsSet) {
|
||||
std::vector<groupDeconvLayerCPUTestParamsSet> resParamsSet;
|
||||
const int cpuParamsIndex = 1;
|
||||
const int selectedTypeIndex = 3;
|
||||
|
||||
for (auto param : paramsSet) {
|
||||
auto cpuParams = std::get<cpuParamsIndex>(param);
|
||||
auto selectedTypeStr = std::get<selectedTypeIndex>(cpuParams);
|
||||
|
||||
if (selectedTypeStr.find("jit") != std::string::npos && !with_cpu_x86_sse42())
|
||||
continue;
|
||||
if (selectedTypeStr.find("avx512") != std::string::npos && !with_cpu_x86_avx512f())
|
||||
continue;
|
||||
|
||||
resParamsSet.push_back(param);
|
||||
}
|
||||
|
||||
return resParamsSet;
|
||||
}
|
||||
/* ===================== */
|
||||
|
||||
/* COMMON PARAMS */
|
||||
std::vector<fusingSpecificParams> fusingParamsSet {
|
||||
emptyFusingSpec,
|
||||
fusingScaleShift,
|
||||
};
|
||||
const std::map<std::string, std::string> cpuEmptyPluginConfig;
|
||||
const std::map<std::string, std::string> cpuBF16PluginConfig = { { PluginConfigParams::KEY_ENFORCE_BF16, PluginConfigParams::YES } };
|
||||
|
||||
/* ============= GroupConvolution params (planar layout) ============= */
|
||||
const SizeVector numOutChannels_Planar = {6};
|
||||
const SizeVector numGroups_Planar = {2, 3};
|
||||
|
||||
/* ============= GroupConvolution params (blocked layout) ============= */
|
||||
const SizeVector numOutChannels_Blocked = {64};
|
||||
const SizeVector numGroups_Blocked = {2, 4};
|
||||
|
||||
/* ============= GroupConvolution params (DW) ============= */
|
||||
const SizeVector numOutChannels_DW = {32};
|
||||
const SizeVector numGroups_DW = {32};
|
||||
|
||||
/* ============= GroupConvolution params (2D) ============= */
|
||||
const std::vector<SizeVector> kernels2d = {{3, 3}, {1, 1}};
|
||||
const std::vector<SizeVector> strides2d = {{1, 1}, {2, 2}};
|
||||
const std::vector<std::vector<ptrdiff_t>> padBegins2d = {{0, 0}};
|
||||
const std::vector<std::vector<ptrdiff_t>> padEnds2d = {{0, 0}};
|
||||
const std::vector<SizeVector> dilations2d = {{1, 1}};
|
||||
|
||||
/* ============= GroupConvolution params (3D) ============= */
|
||||
const std::vector<SizeVector> kernels3d = {{3, 3, 3}, {1, 1, 1}};
|
||||
const std::vector<SizeVector> strides3d = {{1, 1, 1}, {2, 2, 2}};
|
||||
const std::vector<std::vector<ptrdiff_t>> padBegins3d = {{0, 0, 0}};
|
||||
const std::vector<std::vector<ptrdiff_t>> padEnds3d = {{0, 0, 0}};
|
||||
const std::vector<SizeVector> dilations3d = {{1, 1, 1}};
|
||||
/* ============= */
|
||||
|
||||
|
||||
/* INSTANCES */
|
||||
/* ============= GroupConvolution (Planar 2D) ============= */
|
||||
const auto groupConvParams_ExplicitPadding_Planar_2D = ::testing::Combine(
|
||||
::testing::ValuesIn(kernels2d),
|
||||
::testing::ValuesIn(strides2d),
|
||||
::testing::ValuesIn(padBegins2d),
|
||||
::testing::ValuesIn(padEnds2d),
|
||||
::testing::ValuesIn(dilations2d),
|
||||
::testing::ValuesIn(numOutChannels_Planar),
|
||||
::testing::ValuesIn(numGroups_Planar),
|
||||
::testing::Values(ngraph::op::PadType::EXPLICIT)
|
||||
);
|
||||
|
||||
INSTANTIATE_TEST_CASE_P(smoke_GroupDeconv_2D_Planar_FP32, GroupDeconvolutionLayerCPUTest,
|
||||
::testing::Combine(
|
||||
::testing::Combine(
|
||||
groupConvParams_ExplicitPadding_Planar_2D,
|
||||
::testing::Values(Precision::FP32),
|
||||
::testing::Values(InferenceEngine::Precision::UNSPECIFIED),
|
||||
::testing::Values(InferenceEngine::Precision::UNSPECIFIED),
|
||||
::testing::Values(InferenceEngine::Layout::ANY),
|
||||
::testing::Values(InferenceEngine::Layout::ANY),
|
||||
::testing::Values(std::vector<size_t >({ 2, 12, 7, 7 })),
|
||||
::testing::Values(CommonTestUtils::DEVICE_CPU)),
|
||||
::testing::ValuesIn(filterCPUInfoForDevice({conv_gemm_2D})),
|
||||
::testing::ValuesIn(fusingParamsSet),
|
||||
::testing::Values(cpuEmptyPluginConfig)),
|
||||
GroupDeconvolutionLayerCPUTest::getTestCaseName);
|
||||
|
||||
INSTANTIATE_TEST_CASE_P(smoke_GroupDeconv_2D_Planar_BF16, GroupDeconvolutionLayerCPUTest,
|
||||
::testing::Combine(
|
||||
::testing::Combine(
|
||||
groupConvParams_ExplicitPadding_Planar_2D,
|
||||
::testing::Values(Precision::FP32),
|
||||
::testing::Values(InferenceEngine::Precision::BF16),
|
||||
::testing::Values(InferenceEngine::Precision::BF16),
|
||||
::testing::Values(InferenceEngine::Layout::ANY),
|
||||
::testing::Values(InferenceEngine::Layout::ANY),
|
||||
::testing::Values(std::vector<size_t >({ 2, 12, 7, 7 })),
|
||||
::testing::Values(CommonTestUtils::DEVICE_CPU)),
|
||||
::testing::ValuesIn(filterCPUInfoForDevice({conv_gemm_2D})),
|
||||
::testing::ValuesIn(fusingParamsSet),
|
||||
::testing::Values(cpuBF16PluginConfig)),
|
||||
GroupDeconvolutionLayerCPUTest::getTestCaseName);
|
||||
|
||||
/* ============= GroupConvolution (Planar 3D) ============= */
|
||||
const auto groupConvParams_ExplicitPadding_Planar_3D = ::testing::Combine(
|
||||
::testing::ValuesIn(kernels3d),
|
||||
::testing::ValuesIn(strides3d),
|
||||
::testing::ValuesIn(padBegins3d),
|
||||
::testing::ValuesIn(padEnds3d),
|
||||
::testing::ValuesIn(dilations3d),
|
||||
::testing::ValuesIn(numOutChannels_Planar),
|
||||
::testing::ValuesIn(numGroups_Planar),
|
||||
::testing::Values(ngraph::op::PadType::EXPLICIT)
|
||||
);
|
||||
|
||||
INSTANTIATE_TEST_CASE_P(smoke_GroupDeconv_3D_Planar_FP32, GroupDeconvolutionLayerCPUTest,
|
||||
::testing::Combine(
|
||||
::testing::Combine(
|
||||
groupConvParams_ExplicitPadding_Planar_3D,
|
||||
::testing::Values(Precision::FP32),
|
||||
::testing::Values(InferenceEngine::Precision::UNSPECIFIED),
|
||||
::testing::Values(InferenceEngine::Precision::UNSPECIFIED),
|
||||
::testing::Values(InferenceEngine::Layout::ANY),
|
||||
::testing::Values(InferenceEngine::Layout::ANY),
|
||||
::testing::Values(std::vector<size_t >({ 2, 12, 7, 7, 7 })),
|
||||
::testing::Values(CommonTestUtils::DEVICE_CPU)),
|
||||
::testing::ValuesIn(filterCPUInfoForDevice({conv_gemm_3D})),
|
||||
::testing::ValuesIn(fusingParamsSet),
|
||||
::testing::Values(cpuEmptyPluginConfig)),
|
||||
GroupDeconvolutionLayerCPUTest::getTestCaseName);
|
||||
|
||||
INSTANTIATE_TEST_CASE_P(smoke_GroupDeconv_3D_Planar_BF16, GroupDeconvolutionLayerCPUTest,
|
||||
::testing::Combine(
|
||||
::testing::Combine(
|
||||
groupConvParams_ExplicitPadding_Planar_3D,
|
||||
::testing::Values(Precision::FP32),
|
||||
::testing::Values(InferenceEngine::Precision::BF16),
|
||||
::testing::Values(InferenceEngine::Precision::BF16),
|
||||
::testing::Values(InferenceEngine::Layout::ANY),
|
||||
::testing::Values(InferenceEngine::Layout::ANY),
|
||||
::testing::Values(std::vector<size_t >({ 2, 12, 7, 7, 7 })),
|
||||
::testing::Values(CommonTestUtils::DEVICE_CPU)),
|
||||
::testing::ValuesIn(filterCPUInfoForDevice({conv_gemm_3D})),
|
||||
::testing::ValuesIn(fusingParamsSet),
|
||||
::testing::Values(cpuBF16PluginConfig)),
|
||||
GroupDeconvolutionLayerCPUTest::getTestCaseName);
|
||||
|
||||
/* ============= GroupConvolution (Blocked 2D) ============= */
|
||||
const auto groupConvParams_ExplicitPadding_Blocked_2D = ::testing::Combine(
|
||||
::testing::ValuesIn(kernels2d),
|
||||
::testing::ValuesIn(strides2d),
|
||||
::testing::ValuesIn(padBegins2d),
|
||||
::testing::ValuesIn(padEnds2d),
|
||||
::testing::ValuesIn(dilations2d),
|
||||
::testing::ValuesIn(numOutChannels_Blocked),
|
||||
::testing::ValuesIn(numGroups_Blocked),
|
||||
::testing::Values(ngraph::op::PadType::EXPLICIT)
|
||||
);
|
||||
|
||||
INSTANTIATE_TEST_CASE_P(smoke_GroupDeconv_2D_Blocked_FP32, GroupDeconvolutionLayerCPUTest,
|
||||
::testing::Combine(
|
||||
::testing::Combine(
|
||||
groupConvParams_ExplicitPadding_Blocked_2D,
|
||||
::testing::Values(Precision::FP32),
|
||||
::testing::Values(InferenceEngine::Precision::UNSPECIFIED),
|
||||
::testing::Values(InferenceEngine::Precision::UNSPECIFIED),
|
||||
::testing::Values(InferenceEngine::Layout::ANY),
|
||||
::testing::Values(InferenceEngine::Layout::ANY),
|
||||
::testing::Values(std::vector<size_t >({ 2, 64, 7, 7 })),
|
||||
::testing::Values(CommonTestUtils::DEVICE_CPU)),
|
||||
::testing::ValuesIn(filterCPUInfoForDevice({conv_avx512_2D})),
|
||||
::testing::ValuesIn(fusingParamsSet),
|
||||
::testing::Values(cpuEmptyPluginConfig)),
|
||||
GroupDeconvolutionLayerCPUTest::getTestCaseName);
|
||||
|
||||
INSTANTIATE_TEST_CASE_P(smoke_GroupDeconv_2D_Blocked_BF16, GroupDeconvolutionLayerCPUTest,
|
||||
::testing::Combine(
|
||||
::testing::Combine(
|
||||
groupConvParams_ExplicitPadding_Blocked_2D,
|
||||
::testing::Values(Precision::FP32),
|
||||
::testing::Values(InferenceEngine::Precision::BF16),
|
||||
::testing::Values(InferenceEngine::Precision::BF16),
|
||||
::testing::Values(InferenceEngine::Layout::ANY),
|
||||
::testing::Values(InferenceEngine::Layout::ANY),
|
||||
::testing::Values(std::vector<size_t >({ 2, 64, 7, 7 })),
|
||||
::testing::Values(CommonTestUtils::DEVICE_CPU)),
|
||||
::testing::ValuesIn(filterCPUInfoForDevice({conv_avx512_2D})),
|
||||
::testing::ValuesIn(fusingParamsSet),
|
||||
::testing::Values(cpuBF16PluginConfig)),
|
||||
GroupDeconvolutionLayerCPUTest::getTestCaseName);
|
||||
|
||||
/* ============= GroupConvolution (Blocked 3D) ============= */
|
||||
const auto groupConvParams_ExplicitPadding_Blocked_3D = ::testing::Combine(
|
||||
::testing::ValuesIn(kernels3d),
|
||||
::testing::ValuesIn(strides3d),
|
||||
::testing::ValuesIn(padBegins3d),
|
||||
::testing::ValuesIn(padEnds3d),
|
||||
::testing::ValuesIn(dilations3d),
|
||||
::testing::ValuesIn(numOutChannels_Blocked),
|
||||
::testing::ValuesIn(numGroups_Blocked),
|
||||
::testing::Values(ngraph::op::PadType::EXPLICIT)
|
||||
);
|
||||
|
||||
INSTANTIATE_TEST_CASE_P(smoke_GroupDeconv_3D_Blocked_FP32, GroupDeconvolutionLayerCPUTest,
|
||||
::testing::Combine(
|
||||
::testing::Combine(
|
||||
groupConvParams_ExplicitPadding_Blocked_3D,
|
||||
::testing::Values(Precision::FP32),
|
||||
::testing::Values(InferenceEngine::Precision::UNSPECIFIED),
|
||||
::testing::Values(InferenceEngine::Precision::UNSPECIFIED),
|
||||
::testing::Values(InferenceEngine::Layout::ANY),
|
||||
::testing::Values(InferenceEngine::Layout::ANY),
|
||||
::testing::Values(std::vector<size_t >({ 2, 64, 7, 7, 7 })),
|
||||
::testing::Values(CommonTestUtils::DEVICE_CPU)),
|
||||
::testing::ValuesIn(filterCPUInfoForDevice({conv_avx512_3D})),
|
||||
::testing::ValuesIn(fusingParamsSet),
|
||||
::testing::Values(cpuEmptyPluginConfig)),
|
||||
GroupDeconvolutionLayerCPUTest::getTestCaseName);
|
||||
|
||||
INSTANTIATE_TEST_CASE_P(smoke_GroupDeconv_3D_Blocked_BF16, GroupDeconvolutionLayerCPUTest,
|
||||
::testing::Combine(
|
||||
::testing::Combine(
|
||||
groupConvParams_ExplicitPadding_Blocked_3D,
|
||||
::testing::Values(Precision::FP32),
|
||||
::testing::Values(InferenceEngine::Precision::BF16),
|
||||
::testing::Values(InferenceEngine::Precision::BF16),
|
||||
::testing::Values(InferenceEngine::Layout::ANY),
|
||||
::testing::Values(InferenceEngine::Layout::ANY),
|
||||
::testing::Values(std::vector<size_t >({ 2, 64, 7, 7, 7 })),
|
||||
::testing::Values(CommonTestUtils::DEVICE_CPU)),
|
||||
::testing::ValuesIn(filterCPUInfoForDevice({conv_avx512_3D})),
|
||||
::testing::ValuesIn(fusingParamsSet),
|
||||
::testing::Values(cpuBF16PluginConfig)),
|
||||
GroupDeconvolutionLayerCPUTest::getTestCaseName);
|
||||
|
||||
/* ============= GroupConvolution (DW 2D) ============= */
|
||||
const auto groupConvParams_ExplicitPadding_DW_2D = ::testing::Combine(
|
||||
::testing::ValuesIn(kernels2d),
|
||||
::testing::ValuesIn(strides2d),
|
||||
::testing::ValuesIn(padBegins2d),
|
||||
::testing::ValuesIn(padEnds2d),
|
||||
::testing::ValuesIn(dilations2d),
|
||||
::testing::ValuesIn(numOutChannels_DW),
|
||||
::testing::ValuesIn(numGroups_DW),
|
||||
::testing::Values(ngraph::op::PadType::EXPLICIT)
|
||||
);
|
||||
|
||||
INSTANTIATE_TEST_CASE_P(smoke_GroupDeconv_2D_DW_FP32, GroupDeconvolutionLayerCPUTest,
|
||||
::testing::Combine(
|
||||
::testing::Combine(
|
||||
groupConvParams_ExplicitPadding_DW_2D,
|
||||
::testing::Values(Precision::FP32),
|
||||
::testing::Values(InferenceEngine::Precision::UNSPECIFIED),
|
||||
::testing::Values(InferenceEngine::Precision::UNSPECIFIED),
|
||||
::testing::Values(InferenceEngine::Layout::ANY),
|
||||
::testing::Values(InferenceEngine::Layout::ANY),
|
||||
::testing::Values(std::vector<size_t >({ 2, 32, 7, 7 })),
|
||||
::testing::Values(CommonTestUtils::DEVICE_CPU)),
|
||||
::testing::ValuesIn(filterCPUInfoForDevice({conv_avx512_dw_2D})),
|
||||
::testing::ValuesIn(fusingParamsSet),
|
||||
::testing::Values(cpuEmptyPluginConfig)),
|
||||
GroupDeconvolutionLayerCPUTest::getTestCaseName);
|
||||
|
||||
INSTANTIATE_TEST_CASE_P(smoke_GroupDeconv_2D_DW_BF16, GroupDeconvolutionLayerCPUTest,
|
||||
::testing::Combine(
|
||||
::testing::Combine(
|
||||
groupConvParams_ExplicitPadding_DW_2D,
|
||||
::testing::Values(Precision::FP32),
|
||||
::testing::Values(InferenceEngine::Precision::BF16),
|
||||
::testing::Values(InferenceEngine::Precision::BF16),
|
||||
::testing::Values(InferenceEngine::Layout::ANY),
|
||||
::testing::Values(InferenceEngine::Layout::ANY),
|
||||
::testing::Values(std::vector<size_t >({ 2, 32, 7, 7 })),
|
||||
::testing::Values(CommonTestUtils::DEVICE_CPU)),
|
||||
::testing::ValuesIn(filterCPUInfoForDevice({conv_avx512_dw_2D})),
|
||||
::testing::ValuesIn(fusingParamsSet),
|
||||
::testing::Values(cpuBF16PluginConfig)),
|
||||
GroupDeconvolutionLayerCPUTest::getTestCaseName);
|
||||
} // namespace
|
||||
|
||||
} // namespace CPULayerTestsDefinitions
|
||||
@@ -56,8 +56,9 @@ void CpuTestWithFusing::CheckPluginRelatedResults(InferenceEngine::ExecutableNet
|
||||
auto layerType = getExecValue("layerType", rtInfo);
|
||||
if (layerType == nodeType) {
|
||||
auto originalLayersNames = getExecValue("originalLayersNames", rtInfo);
|
||||
auto pos = originalLayersNames.find(nodeType);
|
||||
ASSERT_TRUE(pos != std::string::npos) << "Node type " << nodeType << " has not been found!";
|
||||
std::string opFriendlyName = op->get_friendly_name();
|
||||
auto pos = originalLayersNames.find(opFriendlyName);
|
||||
ASSERT_TRUE(pos != std::string::npos) << "Operation name " << op->get_friendly_name() << " has not been found in originalLayersNames!";
|
||||
for (auto fusedOp : fusedOps) {
|
||||
pos = originalLayersNames.find(fusedOp, checkFusingPosition ? pos : 0);
|
||||
ASSERT_TRUE(pos != std::string::npos) << "Fused op " << fusedOp << " has not been found!";
|
||||
|
||||
@@ -127,6 +127,25 @@ const auto fusingReluScaleShift = fusingSpecificParams{std::make_shared<postNode
|
||||
auto constNode = ngraph::builder::makeConstant<float>(ngraph::element::f32, newShape, {}, true);
|
||||
return std::make_shared<ngraph::opset1::Add>(inpNode, constNode);
|
||||
}, "Add(PerChannel)"}}), {"Relu", "Add"}};
|
||||
const auto fusingScaleShift = fusingSpecificParams{ std::make_shared<postNodesMgr>(std::vector<postNodeBuilder>{
|
||||
{[](std::shared_ptr<ngraph::Node> inpNode, const ngraph::element::Type& ngPrc, ngraph::ParameterVector& params) {
|
||||
auto shape = inpNode->get_shape();
|
||||
if (shape.size() == 1)
|
||||
THROW_IE_EXCEPTION << "If shape.size() == 1 then Granularity can be PerTensor only";
|
||||
ngraph::Shape newShape(shape.size(), 1);
|
||||
newShape[1] = shape[1];
|
||||
auto constNode = ngraph::builder::makeConstant<float>(ngraph::element::f32, newShape, {}, true);
|
||||
return std::make_shared<ngraph::opset1::Multiply>(inpNode, constNode);
|
||||
}, "Multiply(PerChannel)"},
|
||||
{[](std::shared_ptr<ngraph::Node> inpNode, const ngraph::element::Type& ngPrc, ngraph::ParameterVector& params) {
|
||||
auto shape = inpNode->get_shape();
|
||||
if (shape.size() == 1)
|
||||
THROW_IE_EXCEPTION << "If shape.size() == 1 then Granularity can be PerTensor only";
|
||||
ngraph::Shape newShape(shape.size(), 1);
|
||||
newShape[1] = shape[1];
|
||||
auto constNode = ngraph::builder::makeConstant<float>(ngraph::element::f32, newShape, {}, true);
|
||||
return std::make_shared<ngraph::opset1::Add>(inpNode, constNode);
|
||||
}, "Add(PerChannel)"}}), {"Add"} };
|
||||
const auto fusingFakeQuantizePerChannelRelu = fusingSpecificParams{std::make_shared<postNodesMgr>(std::vector<postNodeBuilder>{
|
||||
{[](std::shared_ptr<ngraph::Node> inpNode, const ngraph::element::Type& ngPrc, ngraph::ParameterVector& params){
|
||||
auto localPrc = inpNode->get_element_type();
|
||||
|
||||
Vendored
+1
-1
Submodule inference-engine/thirdparty/mkl-dnn updated: 0d8def3338...5fda503793.
Reference in new issue
Block a user