class ngraph::pass::low_precision::AddTransformation

Overview

AddTransformation propagates dequantization subtraction from one input branch to another and propagates dequantization multiplication from the same branch through Add operation. More…

#include <add.hpp>

class AddTransformation: public ngraph::pass::low_precision::EltwiseBaseTransformation
{
public:
    // construction

    AddTransformation(const Params& params = Params());

    // methods

    virtual bool transform(
        TransformationContext& context,
        ngraph::pattern::Matcher& m
        );

    virtual bool canBeTransformed(
        const TransformationContext& context,
        std::shared_ptr<Node> layer
        ) const;
};

Inherited Members

public:
    // typedefs

    typedef DiscreteTypeInfo type_info_t;

    // classes

    class Params;
    class PrecisionDetails;

    // methods

    bool get_property(const PassPropertyMask& prop_mask) const;
    void set_name(const std::string& name);
    std::string get_name() const;
    void set_callback(const param_callback& callback);
    virtual void set_pass_config(const std::shared_ptr<PassConfig>& pass_config);
    std::shared_ptr<PassConfig> get_pass_config();
    bool m_transformation_callback(const std::shared_ptr<const Node>& node);
    bool transformation_callback(const std::shared_ptr<const Node>& node);
    virtual const type_info_t& get_type_info() const = 0;
    OPENVINO_RTTI("ov::pass::MatcherPass");
    MatcherPass& operator = (const MatcherPass&);
    bool apply(std::shared_ptr<ov::Node> node);

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

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

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

    virtual bool transform(
        TransformationContext& context,
        ngraph::pattern::Matcher& m
        ) = 0;

    void setContext(TransformationContext \* context);
    void setUpdatePrecisions(const bool updatePrecisions);
    void setDefaultPrecisions(const std::vector<ngraph::element::Type>& defaultPrecisions);

    virtual bool canBeTransformed(
        const TransformationContext& context,
        std::shared_ptr<Node> layer
        ) const;

    bool canSubtractBeHandled(
        const std::shared_ptr<Node>& op,
        const FakeQuantizeDequantization& dequantization
        ) const;

    virtual bool isQuantized(
        const std::shared_ptr<const Node>& layer,
        const std::vector<ngraph::element::Type>& defaultPrecisions
        ) const;

    virtual bool isPrecisionPreserved(std::shared_ptr<Node> layer) const = 0;

    static bool canBeTransformedStatic(
        const std::shared_ptr<Node>& layer,
        const std::vector<ngraph::element::Type>& defaultPrecisions = precision_set::int8_support
        );

    static PrecisionDetails getPrecisionDetails(
        const size_t quantizationLevels,
        const std::vector<float>& outputLowValues,
        const std::vector<float>& outputHighValues
        );

    static PrecisionDetails getPrecisionDetails(const QuantizationDetails& quantizationDetails);

    static bool isAsymmetricQuantization(
        const std::shared_ptr<const Node>& node,
        const std::vector<ngraph::element::Type>& defaultPrecisions = precision_set::int8_support
        );

    static DataPrecision getDataPrecision(
        const std::shared_ptr<Node>& layer,
        const QuantizationDetails& quantizationDetails,
        const std::vector<element::Type>& requiredPrecisions
        );

    virtual bool canBeTransformed(
        const TransformationContext& context,
        std::shared_ptr<Node> layer
        ) const;

    virtual bool isPrecisionPreserved(std::shared_ptr<Node> layer) const;
    static bool isBroadcasted(const PartialShape& shape);

Detailed Documentation

AddTransformation propagates dequantization subtraction from one input branch to another and propagates dequantization multiplication from the same branch through Add operation.

For more details about the transformation, refer to AddTransformation page in the Inference Engine Developer Guide.