class ov::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