Files
openvino/model-optimizer/extensions/middle/RemoveRedundantReshapeAfterCropAndResize.py
T
Alexey Suhov 6478f1742a Align copyright notice in python scripts (CVS-51320) (#4974)
* Align copyright notice in python scripts (CVS-51320)
2021-03-26 17:54:28 +03:00

57 lines
1.9 KiB
Python

# Copyright (C) 2018-2021 Intel Corporation
# SPDX-License-Identifier: Apache-2.0
import logging as log
import numpy as np
from extensions.middle.FuseReshapesSequence import FuseReshapesSequence
from mo.graph.graph import Graph
from mo.middle.replacement import MiddleReplacementPattern
class RemoveRedundantReshapeAfterCropAndResize(MiddleReplacementPattern):
enabled = True
force_clean_up = True
def run_after(self):
from extensions.middle.pass_separator import MiddleFinish
return [MiddleFinish]
def run_before(self):
return [FuseReshapesSequence]
def pattern(self):
return dict(
nodes=[
('crop_and_resize', dict(kind='op', op='CropAndResize')),
('crop_and_resize_data', dict(kind='data')),
('reshape_1', dict(kind='op', op='Reshape')),
('reshape_1_data', dict(kind='data')),
('reshape_2', dict(kind='op', op='Reshape')),
],
edges=[
('crop_and_resize', 'crop_and_resize_data'),
('crop_and_resize_data', 'reshape_1'),
('reshape_1', 'reshape_1_data'),
('reshape_1_data', 'reshape_2'),
]
)
def replace_pattern(self, graph: Graph, match: dict):
car_node = match['crop_and_resize']
reshape_2_node = match['reshape_2']
shape_1 = match['crop_and_resize_data'].shape
shape_2 = match['reshape_2'].out_node().shape
if not np.all(shape_1 == shape_2):
log.debug('Cannot remove reshape operations after CropAndResize due to different shapes: {} vs {}'.format(
shape_1, shape_2
))
return
car_node.out_port(0).disconnect()
consumer_port_node = reshape_2_node.out_port(0).get_connection().get_destination()
consumer_port_node.disconnect()
car_node.out_port(0).connect(consumer_port_node)