class ngraph::pass::ConvToBinaryConv

Overview

This transformation converts Convolution to BinaryConvolution under following conditions: More…

#include <conv_to_binary_conv.hpp>

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

    OPENVINO_RTTI("ConvToBinaryConv", "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 Convolution to BinaryConvolution under following conditions:

  • first input to Convolution is a FakeQuantize with levels==2 with output low,high being either (0, 1) or (-1, 1)

  • second input (weights) is a constant with values -1 or 1 The transformation also converts weights to binary Constant (with ‘u1’ type) For example, when output_low is equal to 0 and output_high is equal to 1, following graph

    .... ....  out_low   out_high
      |    |      |         |
     +--------------------------+           +-------------------------------------+
     | FakeQuantize (levels==2) |           |               Constant              |
     |     (on activations)     |           | (weights containing -1 or 1 values) |
     +--------------------------+           +-------------------------------------+
                   |                                      |
                   |                                      |
                   -----------------    -------------------
                                   |    |
                                   v    v
                              +-------------+
                              | Convolution |
                              +-------------+
                                     |
                                     v
    

    is transformed to:

    .... ....  out_low   out_high
      |    |      |         |
     +--------------------------+           +---------------------------------+
     | FakeQuantize (levels==2) |           |     Constant (with u1 type)     |
     |     (on activations)     |           | (with u1 type - binary weights) |
     +--------------------------+           +---------------------------------+
                   |                                      |
                   |                                      |
                   -----------------    -------------------
                                   |    |
                                   v    v
                           +-------------------+
                           | BinaryConvolution |
                           +-------------------+
                                     |
                                     v
                              +------------+     +----------------------------------------------------+
                              |            |     |                   Constant                         |
                              |     Add    | <---|          (weights from original graph,             |
                              |            |     |  sum-reduced over [1,..., len(weights.shape)] axes |
                              +------------+     +----------------------------------------------------+
                                     |
                                     v
                              +------------+     +-----+
                              |  Multiply  | <---| 0.5 |
                              +------------+     +-----+
                                     |
                                     v