in tinynn/converter/operators/torch/quantized.py [0:0]
def parse_common(self, graph_converter, fusedActivation=tfl_schema.ActivationFunctionType.NONE, transpose=False):
input_tensor = self.find_or_create_input(0, graph_converter)
params, _ = self.unpack_params(self.input_tensors[1])
weight, bias = params['weight'], params['bias']
if transpose and bias is not None:
if not any((torch.is_nonzero(b) for b in bias)):
bias = None
weight_dim = weight.dim()
output_padding = [0] * (weight_dim - 2)
if len(self.input_tensors) > 4:
stride, padding, dilation, groups = self.input_tensors[2:6]
else:
stride = params['stride']
padding = params['padding']
dilation = params['dilation']
groups = params['groups']
output_padding = params.get('output_padding', output_padding)
weight_tensor = self.create_attr_tensor(weight)
outputs = self.to_tfl_tensors(self.output_names, self.output_tensors)
output_tensor = outputs[0]
per_tensor = weight_tensor.quantization.dim is None
if per_tensor:
self.rescale_weight_scale_for_qnnpack(input_tensor, weight_tensor, output_tensor)
# Bias handling
if per_tensor:
bias_scale = input_tensor.quantization.scale * weight_tensor.quantization.scale
bias_zero_point = 0
bias_dim = None
else:
bias_scale = [input_tensor.quantization.scale * s for s in weight_tensor.quantization.scale]
bias_zero_point = [0] * len(bias_scale)
bias_dim = weight_tensor.quantization.dim
inputs = [input_tensor, weight_tensor]
if bias is not None:
if transpose and not self.enable_mtk_ops and not self.conv_transpose_with_bias:
if self.q_type == np.uint8:
bias = self.quantize(bias, bias_scale, bias_zero_point, dtype=torch.uint8)
elif self.q_type == np.int8:
bias = self.quantize(bias, bias_scale, bias_zero_point, dtype=torch.int8)
elif self.q_type == np.int16:
bias = self.quantize(bias, bias_scale, bias_zero_point, dtype=torch.int16)
else:
if self.q_type == np.int16:
bias = self.quantize(bias, bias_scale, bias_zero_point, dtype=torch.int64, dim=bias_dim)
else:
bias = self.quantize(bias, bias_scale, bias_zero_point, dtype=torch.int32, dim=bias_dim)
bias_tensor = self.create_attr_tensor(bias)
inputs.append(bias_tensor)
if transpose:
assert fusedActivation == tfl_schema.ActivationFunctionType.NONE
graph_converter.add_operator(
tfl.GenericTransposeConvOperator(
inputs,
outputs,
stride,
padding,
dilation,
output_padding,
groups,
self.enable_mtk_ops,
self.conv_transpose_with_bias,
)
)
else:
graph_converter.add_operator(
tfl.GenericConvOperator(
inputs, outputs, stride, padding, dilation, output_padding, groups, fusedActivation
)
)