class ngraph::pass::BinarizeWeights

Overview

This transformation converts weights to -1/+1 form and applies normalization factors to output low/high and after Convolution. For example, following graph. More…

#include <binarize_weights.hpp>

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

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

Inherited Members

public:
    // typedefs

    typedef DiscreteTypeInfo type_info_t;

    // 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);

    std::shared_ptr<ov::Node> register_new_node_(const std::shared_ptr<ov::Node>& 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

This transformation converts weights to -1/+1 form and applies normalization factors to output low/high and after Convolution. For example, following graph.

.... ....  out_low  out_high           weights ..    ..  out_low out_high
  |    |      |        |                  |     |    |      |     |
 +--------------------------+           +--------------------------+
 | FakeQuantize (levels==2) |           | FakeQuantize (levels==2) |
 |     (on activations)     |           |       (on weights)       |
 +--------------------------+           +--------------------------+
               |                                      |
               |                                      |
               -----------------    -------------------
                               |    |
                               v    v
                          +-------------+
                          | Convolution |
                          +-------------+
                                 |
                                 v

is transformed to:

         normalized normalized
.... ....  out_low   out_high
  |    |      |         |
 +--------------------------+           +--------------------------+
 | FakeQuantize (levels==2) |           |         Constant         |
 |     (on activations)     |           | (with converted weights) |
 +--------------------------+           +--------------------------+
               |                                      |
               |                                      |
               -----------------    -------------------
                               |    |
                               v    v
                          +-------------+
                          | Convolution |
                          +-------------+
                                 |
                                 v
                          +------------+     +---------------------------------------------------------------+
                          |  Multiply  | <---| Constant (normalization factor coming from FQ on activations) |
                          +------------+     +---------------------------------------------------------------+
                                 |
                                 v
                          +------------+     +-----------------------------------------------------------+
                          |  Multiply  | <---| Constant (normalization factor coming from FQ on weights) |
                          +------------+     +------------------------------------------------------------
                                 |
                                 v

Normalization factors are chosen based output_high value. If it’s zero - norm factor is equal to output_low and output_high otherwise