Enable SmartReshape in offline transformations (#13510)

Ticket: 79534
This commit is contained in:
Mateusz Tabaka authored and GitHub committed 2022-11-16 07:37:15 +01:00
1 parent 58f8f1a70e
commit 985bdc1138
10 files changed
+137 -14

No files matched your search

@@ -36,7 +36,7 @@ def apply_user_transformations(func: object, transforms: list):
def apply_moc_transformations(func: object):
from openvino._offline_transformations import apply_moc_transformations # pylint: disable=import-error,no-name-in-module
apply_moc_transformations(func, False)
apply_moc_transformations(func, cf=False, smart_reshape=True)
def apply_moc_legacy_transformations(func: object, params_with_custom_types: List[str]):
@@ -44,8 +44,6 @@ class StridedSlice(Op):
@staticmethod
def infer(node: Node):
StridedSlice.align_mask_with_slice_rank(node, node.in_port(1).data.get_shape()[0])
data_shape = node.in_port(0).data.get_shape()
data_value = node.in_port(0).data.get_value()
slices = StridedSlice.get_slices(node, data_shape)
@@ -77,9 +75,9 @@ class StridedSlice(Op):
slices = [[]] * slice_rank
in_idx = 0 # index along input tensor shapes, note that input_rank not necessary is equal to slice_rank
for i in range(slice_rank):
if node.new_axis_mask[i]:
if i < len(node.new_axis_mask) and node.new_axis_mask[i]:
slices[i] = np.newaxis
elif node.shrink_axis_mask[i]:
elif i < len(node.shrink_axis_mask) and node.shrink_axis_mask[i]:
if begin is not None and begin[i] is not dynamic_dimension:
slices[i] = int(begin[i])
# the normalization is needed for the ConvertGroupedStridedSlice transformation
@@ -87,20 +85,20 @@ class StridedSlice(Op):
slices[i] += int(data_shape[in_idx])
else:
slices[i] = dynamic_dimension_value
elif node.ellipsis_mask[i]:
elif i < len(node.ellipsis_mask) and node.ellipsis_mask[i]:
slices[i] = ...
in_idx += input_rank - slice_rank + np.count_nonzero(node.new_axis_mask)
else:
if begin is not None and end is not None and strides is not None:
start, stop = begin[i], end[i]
if not node.begin_mask[i]: # if begin, and end are not specified take the whole range
if i < len(node.begin_mask) and not node.begin_mask[i]: # if begin, and end are not specified take the whole range
start = None
if not node.end_mask[i]:
if i < len(node.end_mask) and not node.end_mask[i]:
stop = None
slices[i] = slice(start, stop, strides[i])
else:
slices[i] = dynamic_dimension_value
in_idx += 1 if not node.new_axis_mask[i] else 0
in_idx += 1 if i < len(node.new_axis_mask) and not node.new_axis_mask[i] else 0
return slices
@staticmethod
@@ -20,7 +20,7 @@ class StridedSlice_extender(Extender):
else:
assert attr not in ['begin_mask', 'end_mask'],\
'{} is not defined for the node {}'.format(attr, op.soft_get('name', op.id))
op[attr] = int64_array([0])
op[attr] = int64_array([])
op.begin_mask = int64_array([1 - i for i in op.begin_mask])
op.end_mask = int64_array([1 - i for i in op.end_mask])