From 318009f8d55122e14251db97746a7f6bd42f3214 Mon Sep 17 00:00:00 2001 From: Edward Shogulin Date: Thu, 17 Aug 2023 17:07:51 +0100 Subject: [PATCH] [LPT] MoveFakeQuantize: Q/DQ pattern identification generalization (#18945) * [LPT] MoveFakeQuantize Q/D pattern dequantization generalization * [LPT] MoveFakeQuantize Q/D pattern dequantization generalization: quantize op convert --- .../src/move_fake_quantize.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/common/low_precision_transformations/src/move_fake_quantize.cpp b/src/common/low_precision_transformations/src/move_fake_quantize.cpp index 0abf142bbcb..6c35c2d116e 100644 --- a/src/common/low_precision_transformations/src/move_fake_quantize.cpp +++ b/src/common/low_precision_transformations/src/move_fake_quantize.cpp @@ -107,7 +107,8 @@ bool MoveFakeQuantize::transform(TransformationContext& context, ngraph::pattern return false; } - const bool q_dq = is_type(convert_q); + const auto& dequantization = NetworkHelper::getDequantizationBelow(convert_q, true); + std::vector> newNodes; for (size_t i = 0; i < concat->get_input_size(); ++i) { ov::Output parent_output; @@ -133,7 +134,7 @@ bool MoveFakeQuantize::transform(TransformationContext& context, ngraph::pattern ngraph::copy_runtime_info(fq, new_fq); new_fq->set_friendly_name(fq_original_name + "_" + std::to_string(i + 1)); - if (q_dq) { + if (!dequantization.empty()) { auto new_convert_q = convert_q->clone_with_new_inputs({new_fq}); ngraph::copy_runtime_info(convert_q, new_convert_q); new_convert_q->set_friendly_name(convert_q->get_friendly_name() + "_" + std::to_string(i + 1)); @@ -146,9 +147,8 @@ bool MoveFakeQuantize::transform(TransformationContext& context, ngraph::pattern auto newConcat = concat->clone_with_new_inputs(ngraph::OutputVector(newNodes.begin(), newNodes.end())); newConcat->set_friendly_name(concat->get_friendly_name()); NetworkHelper::copyInfo(concat, newConcat); - if (q_dq) { - auto dq = NetworkHelper::getDequantizationBelow(convert_q); - moveDequantizationBefore(context, newConcat, dq, false); + if (!dequantization.empty()) { + moveDequantizationBefore(context, newConcat, dequantization, false); return true; } replace_node(fq, newConcat);