Transformation - QONNX
Transformation (QONNX)
finn.transformation.qonnx.convert_qonnx_to_finn
- class finn.transformation.qonnx.convert_qonnx_to_finn.ConvertQONNXtoFINN(filter_function=<function default_filter_function_generator.<locals>.filter_function>)
Bases:
TransformationConverts QONNX dialect to FINN ONNX dialect. First the weights are converted using the FoldQuantWeights transformation, then the ConvertQuantActToMultiThreshold transformation is used to convert the activations. If incompatibilities are found a ValueError or RuntimeError is raised.
The optional keyword argument filter_function presents a way to control which Quant and BipolarQuant nodes in the activation path are converted to MultiThreshold nodes. A warning will be emitted when a Quant node is not converted to a MultiThreshold node.
- Parameters:
filter_function – Each candidate Quant and BinaryQant node is first evaluated by this function. If the function returns False, then the node is not converted to a MultiTrheshold node. The function is given the model and candidate node as parameters. Per default a filter function is inserted, which disables the conversion of Quant nodes, which have a bit width of larger than 8. Defaults to: default_filter_function_generator(max_multithreshold_bit_width=8)
- apply(model)
finn.transformation.qonnx.fold_quant_weights
- class finn.transformation.qonnx.fold_quant_weights.FoldQuantWeights
Bases:
TransformationMerges Quant nodes, which are used as weights into the initializer of the weight tensor.
- apply(model)
finn.transformation.qonnx.infer_quant_avg_pool_2d
- class finn.transformation.qonnx.infer_quant_avg_pool_2d.AvgPoolAndTruncToQuantAvgPool
Bases:
TransformationConvert a section of nodes of the pattern: AveragePool -> Mul (scalar) -> Trunc To the FINN op: QuantAvgPool2d
- apply(model)
- class finn.transformation.qonnx.infer_quant_avg_pool_2d.AvgPoolAndTruncv1ToQuantAvgPool
Bases:
TransformationConvert a section of nodes of the pattern: AveragePool -> Mul (scalar) -> Trunc (v1) To the FINN op: Div -> QuantAvgPool2d -> Mul
- apply(model)
- class finn.transformation.qonnx.infer_quant_avg_pool_2d.AvgPoolAndTruncv2ToQuantAvgPool
Bases:
TransformationConvert a section of nodes of the pattern: AveragePool -> Trunc (v2) To the FINN op: Div -> QuantAvgPool2d -> Mul
- apply(model)
finn.transformation.qonnx.qonnx_activation_handlers
- class finn.transformation.qonnx.qonnx_activation_handlers.QuantActBaseHandler(model: ModelWrapper, quant_node, quant_node_index: int)
Bases:
ABCBase class for converting quantized activation expressed in the QONNX dialect to the FINN ONNX dialect. :param model: The model on which this handler should operate. :type model: class: qonnx.core.modelwrapper.ModelWrapper :param quant_node: The Quant node which a given handler should replace. :param quant_node_index: The index of the Quant node in the given model. :type quant_node_index: int
- calculate_node_parameters()
Calculate all parameters required for replacing the QONNX style activation with a FINN style one.
- replace_quant_node()
Replace the given QONNX style activation with a FINN style one.
- classmethod valid_predecessor_op_types()
Defines which op types the preceding node is allowed to have for this type of activation.
- class finn.transformation.qonnx.qonnx_activation_handlers.QuantIdentityHandler(model: ModelWrapper, quant_node, quant_node_index: int)
Bases:
QuantActBaseHandlerClass for converting a quantized identity operation expressed in the QONNX dialect to the FINN ONNX dialect. This handler also takes care of quantized HardTanh activations, because these are equivalent to quantized identity activations.
- classmethod valid_predecessor_op_types()
Defines which op types the preceding node is allowed to have for this type of activation.
- class finn.transformation.qonnx.qonnx_activation_handlers.QuantReluHandler(model: ModelWrapper, quant_node, quant_node_index: int)
Bases:
QuantActBaseHandlerClass for converting a quantized relu operation expressed in the QONNX dialect to the FINN ONNX dialect.
- classmethod valid_predecessor_op_types()
Defines which op types the preceding node is allowed to have for this type of activation.
finn.transformation.qonnx.quant_act_to_multithreshold
- class finn.transformation.qonnx.quant_act_to_multithreshold.ConvertQuantActToMultiThreshold(filter_function=<function default_filter_function_generator.<locals>.filter_function>)
Bases:
TransformationConverts Quant nodes in the activation path to MultiThreshold nodes.
The optional keyword argument filter_function presents a way to control which Quant and BipolarQuant nodes in the activation path are converted to MultiThreshold nodes. A warning will be emitted when a Quant node is not converted to a MultiThreshold node.
- Parameters:
filter_function – Each candidate Quant and BinaryQant node is first evaluated by this function. If the function returns False, then the node is not converted to a MultiTrheshold node. The function is given the model and candidate node as parameters. Per default a filter function is inserted, which disables the conversion of Quant nodes, which have a bit width of larger than 8. Defaults to: default_filter_function_generator(max_multithreshold_bit_width=8)
- apply(model)
- finn.transformation.qonnx.quant_act_to_multithreshold.default_filter_function_generator(max_multithreshold_bit_width=8)
This function generates the default filter function for the ConvertQuantActToMultiThreshold transformation. Per default the returned function disables the conversion of Quant nodes which have a bit width above 8 bit.
This function generator can be used as a template to write custom filter functions.