Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -385,5 +385,11 @@
'low': -1.0,
'high': 1.0
},
# centernet_hg104
{
'model_name': 'centernet_hg104',
'input': {'input_tensor': generate_data([224, 224, 3]),},
'output': ['Identity'],
},
]

Original file line number Diff line number Diff line change
Expand Up @@ -101,6 +101,9 @@ function set_args {
NeuMF
PRNet
DIEN_Deep-Interest-Evolution-Network
EfficientDet-D2-768x768
EfficientDet-D4-1024x1024
centernet_hg104
--------
)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -83,6 +83,7 @@ function set_args {
DIEN_Deep-Interest-Evolution-Network
EfficientDet-D2-768x768
EfficientDet-D4-1024x1024
centernet_hg104
--------
)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,7 @@ def do_transformation(self):
target_nodes = cur_graph.query_fusion_pattern_nodes(
[["Pad"], ["Conv2D", "Conv3D", "DepthwiseConv2dNative"], ('BiasAdd', 'Add', 'AddV2')])

padding_tensor_dict = {}
for node_combination in target_nodes:
conv_name = node_combination[1]

Expand All @@ -70,21 +71,26 @@ def do_transformation(self):
continue

padding_tensor = None
pad_node = graph_info[node_combination[0]].node
if graph_info[pad_node.input[1]].node.op != 'Const':
input_node = graph_info[pad_node.input[1]].node
if input_node.op == 'DataFormatVecPermute':
parent_input_node = graph_info[input_node.input[0]].node
if parent_input_node.op == 'Const':
padding_tensor = tensor_util.MakeNdarray( \
parent_input_node.attr["value"].tensor).flatten()
pad_node = None
if node_combination[0] not in padding_tensor_dict:
pad_node = graph_info[node_combination[0]].node
if graph_info[pad_node.input[1]].node.op != 'Const':
input_node = graph_info[pad_node.input[1]].node
if input_node.op == 'DataFormatVecPermute':
parent_input_node = graph_info[input_node.input[0]].node
if parent_input_node.op == 'Const':
padding_tensor = tensor_util.MakeNdarray( \
parent_input_node.attr["value"].tensor).flatten()
else:
continue
else:
continue
else:
continue
padding_tensor = tensor_util.MakeNdarray(
graph_info[pad_node.input[1]].node.attr["value"].tensor).flatten()
padding_tensor_dict[node_combination[0]] = padding_tensor
else:
padding_tensor = tensor_util.MakeNdarray(
graph_info[pad_node.input[1]].node.attr["value"].tensor).flatten()
padding_tensor = padding_tensor_dict[node_combination[0]]

if self.itex_qdq_mode:
enabled_pad_conv2d = bool(tf.version.VERSION == '1.15.0-up3' or \
Expand All @@ -95,12 +101,13 @@ def do_transformation(self):
if any(padding_tensor) and not enabled_pad_conv2d: # pragma: no cover
continue

if graph_info[pad_node.input[1]].node.op != 'Const':
cur_graph.node_name_details[pad_node.name].node.input.remove(pad_node.input[1])
cur_graph.remove_node_with_single_input_output(pad_node.name)
else:
cur_graph.remove_node_with_single_input_output(pad_node.name)
cur_graph.remove_node(pad_node.input[1])
if pad_node:
if graph_info[pad_node.input[1]].node.op != 'Const':
cur_graph.node_name_details[pad_node.name].node.input.remove(pad_node.input[1])
cur_graph.remove_node_with_single_input_output(pad_node.name)
else:
cur_graph.remove_node_with_single_input_output(pad_node.name)
cur_graph.remove_node(pad_node.input[1])
conv_node = graph_info[node_combination[1]].node
if self.itex_qdq_mode:
if any(padding_tensor) and enabled_pad_conv2d: # pragma: no cover
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,7 @@ def do_transformation(self):
target_nodes = cur_graph.query_fusion_pattern_nodes(
[["Pad"], ["Conv2D", "DepthwiseConv2dNative"], ('BiasAdd', 'Add', 'AddV2')])

padding_tensor_dict = {}
for node_combination in target_nodes:
conv_name = node_combination[1]

Expand All @@ -71,21 +72,26 @@ def do_transformation(self):
continue

padding_tensor = None
pad_node = graph_info[node_combination[0]].node
if graph_info[pad_node.input[1]].node.op != 'Const':
input_node = graph_info[pad_node.input[1]].node
if input_node.op == 'DataFormatVecPermute':
parent_input_node = graph_info[input_node.input[0]].node
if parent_input_node.op == 'Const':
padding_tensor = tensor_util.MakeNdarray( \
parent_input_node.attr["value"].tensor).flatten()
pad_node = None
if node_combination[0] not in padding_tensor_dict:
pad_node = graph_info[node_combination[0]].node
if graph_info[pad_node.input[1]].node.op != 'Const':
input_node = graph_info[pad_node.input[1]].node
if input_node.op == 'DataFormatVecPermute':
parent_input_node = graph_info[input_node.input[0]].node
if parent_input_node.op == 'Const':
padding_tensor = tensor_util.MakeNdarray( \
parent_input_node.attr["value"].tensor).flatten()
else:
continue
else:
continue
else:
continue
padding_tensor = tensor_util.MakeNdarray(
graph_info[pad_node.input[1]].node.attr["value"].tensor).flatten()
padding_tensor_dict[node_combination[0]] = padding_tensor
else:
padding_tensor = tensor_util.MakeNdarray(
graph_info[pad_node.input[1]].node.attr["value"].tensor).flatten()
padding_tensor = padding_tensor_dict[node_combination[0]]

if self.itex_qdq_mode:
enabled_pad_conv2d = bool(tf.version.VERSION == '1.15.0-up3' or \
Expand All @@ -95,12 +101,14 @@ def do_transformation(self):

if any(padding_tensor) and not enabled_pad_conv2d: # pragma: no cover
continue
if graph_info[pad_node.input[1]].node.op != 'Const':
cur_graph.node_name_details[pad_node.name].node.input.remove(pad_node.input[1])
cur_graph.remove_node_with_single_input_output(pad_node.name)
else:
cur_graph.remove_node_with_single_input_output(pad_node.name)
cur_graph.remove_node(pad_node.input[1])

if pad_node:
if graph_info[pad_node.input[1]].node.op != 'Const':
cur_graph.node_name_details[pad_node.name].node.input.remove(pad_node.input[1])
cur_graph.remove_node_with_single_input_output(pad_node.name)
else:
cur_graph.remove_node_with_single_input_output(pad_node.name)
cur_graph.remove_node(pad_node.input[1])
conv_node = graph_info[node_combination[1]].node
# Helper.set_attr_int_list(conv_node, "padding_list", padding_tensor)
# only when padding attr is explicit, the explicit_paddings is not empty
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -182,7 +182,7 @@ def _check_op_list(self, node_type):
"MaxPool", "MaxPool3D", "FusedBatchNormV3", "Requantize", "RequantizePerChannel", "AvgPool", "Pad",
"CropAndResize", "Dequantize", "Mean", "MatMul", "BatchMatMul", "BatchMatMulV2",
"FakeQuantWithMinMaxVars", "_MklFusedInstanceNorm",
"Conv2DBackpropInput", "Conv3DBackpropInputV2")
"Conv2DBackpropInput", "Conv3DBackpropInputV2", "Sigmoid", "BiasAdd")
return any([node_type.find(i) != -1 for i in op_list])

def _find_relu_node(self, node):
Expand All @@ -198,7 +198,7 @@ def _find_relu_node(self, node):
or len(self.node_name_mapping \
[Helper.node_name_from_input(node.input[0])].output) > 1):
return True
elif 'T' in node.attr and node.attr['T'].type in (dtypes.quint8, dtypes.uint8):
elif 'T' in node.attr and dtypes.DType(node.attr['T'].type) in (dtypes.quint8, dtypes.uint8):
return True
elif (node.op.find("QuantizedConv") != -1
or node.op.find("QuantizedDepthwiseConv") != -1 or
Expand Down
4 changes: 3 additions & 1 deletion neural_compressor/adaptor/tf_utils/graph_util.py
Original file line number Diff line number Diff line change
Expand Up @@ -918,11 +918,13 @@ def gen_per_iter(data):
if i.startswith(first_line):
iterations += 1

step = len(valid_data) / iterations
step = int(len(valid_data) / iterations)
final_res = []

for i in range(iterations):
final_res.extend(gen_per_iter(valid_data[int(i*step): int(step*( i+ 1))]))
if i + 1 == iterations and int(step*( i+ 1)) < len(valid_data):
final_res.extend(gen_per_iter(valid_data[int(step*( i+ 1)): len(valid_data)]))

return final_res

Expand Down