class ov::pass::FakeQuantizeDecomposition

Overview

FakeQuantizeDecomposition transformation decomposes FakeQuantize layer. More…

#include <fq_decomposition.hpp>

class FakeQuantizeDecomposition: public ov::pass::MatcherPass
{
public:
    // methods

    "FakeQuantizeDecomposition""0" OPENVINO_RTTI(, );
};

Inherited Members

public:
    // typedefs

    typedef DiscreteTypeInfo type_info_t;

    // methods

    boolconst PassPropertyMask& get_property() const;
    voidconst std::string& set_name();
    std::string get_name() const;
    voidconst param_callback& set_callback();
    virtual voidconst std::shared_ptr<PassConfig>& set_pass_config();
    std::shared_ptr<PassConfig> get_pass_config();
    boolconst std::shared_ptr<const Node>& transformation_callback();
    virtual const type_info_t& get_type_info() const = 0;
    "ov::pass::MatcherPass" OPENVINO_RTTI();
    MatcherPass&const MatcherPass& operator = ();
    boolstd::shared_ptr<ov::Node> apply();

    template <, >
    std::shared_ptr<T>Args&&... register_new_node();

    template <>
    std::shared_ptr<T>const std::shared_ptr<T>& register_new_node();

    std::shared_ptr<ov::Node>const std::shared_ptr<ov::Node>& register_new_node_();
    const std::vector<std::shared_ptr<ov::Node>>& get_new_nodes();
    void clear_new_nodes();
    std::shared_ptr<pattern::Matcher> get_matcher();

Detailed Documentation

FakeQuantizeDecomposition transformation decomposes FakeQuantize layer.

Expression from specification: if x <= min(input_low, input_high): output = output_low elif x > max(input_low, input_high): output = output_high else: output = round((x - input_low) / (input_high - input_low) * (levels-1)) / (levels-1) * (output_high - output_low) + output_low

expand brackets into round: round(x * (levels-1) / (input_high - input_low) - input_low * (levels-1) / (input_high - input_low)) div on (levels-1) and mult on (output_high - output_low) => mult on (output_high - output_low) / (levels-1)

=> round(x * (levels-1) / (input_high - input_low) - input_low * (levels-1) / (input_high - input_low)) * (output_high - output_low) / (levels-1) + output_low

This transformation doesn’t support following cases:

  1. At least one ‘range’ input is not Constant

  2. At least one ‘input_low’ input value greater or equal than ‘input_high’ input value