diff --git a/docs/HOWTO/img/converted_subgraph.png b/docs/HOWTO/img/converted_subgraph.png deleted file mode 100644 index 6a5b7220777..00000000000 --- a/docs/HOWTO/img/converted_subgraph.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:f7c8ab4f15874d235968471bcf876c89c795d601e69891208107b8b72aa58eb1 -size 70014 diff --git a/docs/HOWTO/img/unsupported_subgraph.png b/docs/HOWTO/img/unsupported_subgraph.png deleted file mode 100644 index 80f7084a78a..00000000000 --- a/docs/HOWTO/img/unsupported_subgraph.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:3d5ccf51fe1babb93d96d042494695a6a6e055d1f8ebf7eef5083d54d8987a23 -size 58789 diff --git a/docs/HOWTO/mo_extensions/front/tf/Complex.py b/docs/HOWTO/mo_extensions/front/tf/Complex.py deleted file mode 100644 index 169a3e50050..00000000000 --- a/docs/HOWTO/mo_extensions/front/tf/Complex.py +++ /dev/null @@ -1,40 +0,0 @@ -# Copyright (C) 2018-2023 Intel Corporation -# SPDX-License-Identifier: Apache-2.0 - -#! [complex:transformation] - -from openvino.tools.mo.front.common.replacement import FrontReplacementSubgraph -from openvino.tools.mo.graph.graph import Graph - - -class Complex(FrontReplacementSubgraph): - enabled = True - - def pattern(self): - return dict( - nodes=[ - ('strided_slice_real', dict(op='StridedSlice')), - ('strided_slice_imag', dict(op='StridedSlice')), - ('complex', dict(op='Complex')), - ], - edges=[ - ('strided_slice_real', 'complex', {'in': 0}), - ('strided_slice_imag', 'complex', {'in': 1}), - ]) - - @staticmethod - def replace_sub_graph(graph: Graph, match: dict): - strided_slice_real = match['strided_slice_real'] - strided_slice_imag = match['strided_slice_imag'] - complex_node = match['complex'] - - # make sure that both strided slice operations get the same data as input - assert strided_slice_real.in_port(0).get_source() == strided_slice_imag.in_port(0).get_source() - - # identify the output port of the operation producing datat for strided slice nodes - input_node_output_port = strided_slice_real.in_port(0).get_source() - input_node_output_port.disconnect() - - # change the connection so now all consumers of "complex_node" get data from input node of strided slice nodes - complex_node.out_port(0).get_connection().set_source(input_node_output_port) -#! [complex:transformation] diff --git a/docs/HOWTO/mo_extensions/front/tf/ComplexAbs.py b/docs/HOWTO/mo_extensions/front/tf/ComplexAbs.py deleted file mode 100644 index 56594438611..00000000000 --- a/docs/HOWTO/mo_extensions/front/tf/ComplexAbs.py +++ /dev/null @@ -1,27 +0,0 @@ -# Copyright (C) 2018-2023 Intel Corporation -# SPDX-License-Identifier: Apache-2.0 - -#! [complex_abs:transformation] -import numpy as np - -from openvino.tools.mo.ops.elementwise import Pow -from openvino.tools.mo.ops.ReduceOps import ReduceSum -from openvino.tools.mo.front.common.replacement import FrontReplacementOp -from openvino.tools.mo.graph.graph import Graph, Node -from openvino.tools.mo.ops.const import Const - - -class ComplexAbs(FrontReplacementOp): - op = "ComplexAbs" - enabled = True - - def replace_op(self, graph: Graph, node: Node): - pow_2 = Const(graph, {'value': np.float32(2.0)}).create_node() - reduce_axis = Const(graph, {'value': np.int32(-1)}).create_node() - pow_0_5 = Const(graph, {'value': np.float32(0.5)}).create_node() - - sq = Pow(graph, dict(name=node.in_node(0).name + '/sq', power=2.0)).create_node([node.in_node(0), pow_2]) - sum = ReduceSum(graph, dict(name=sq.name + '/sum')).create_node([sq, reduce_axis]) - sqrt = Pow(graph, dict(name=sum.name + '/sqrt', power=0.5)).create_node([sum, pow_0_5]) - return [sqrt.id] -#! [complex_abs:transformation] diff --git a/docs/HOWTO/mo_extensions/front/tf/FFT_ext.py b/docs/HOWTO/mo_extensions/front/tf/FFT_ext.py deleted file mode 100644 index ac1cfbdcbf8..00000000000 --- a/docs/HOWTO/mo_extensions/front/tf/FFT_ext.py +++ /dev/null @@ -1,33 +0,0 @@ -# Copyright (C) 2018-2023 Intel Corporation -# SPDX-License-Identifier: Apache-2.0 - -# ! [fft_ext:extractor] -from ...ops.FFT import FFT -from openvino.tools.mo.front.extractor import FrontExtractorOp - - -class FFT2DFrontExtractor(FrontExtractorOp): - op = 'FFT2D' - enabled = True - - @classmethod - def extract(cls, node): - attrs = { - 'inverse': 0 - } - FFT.update_node_stat(node, attrs) - return cls.enabled - - -class IFFT2DFrontExtractor(FrontExtractorOp): - op = 'IFFT2D' - enabled = True - - @classmethod - def extract(cls, node): - attrs = { - 'inverse': 1 - } - FFT.update_node_stat(node, attrs) - return cls.enabled -# ! [fft_ext:extractor] diff --git a/docs/HOWTO/mo_extensions/ops/FFT.py b/docs/HOWTO/mo_extensions/ops/FFT.py deleted file mode 100644 index 604d893cfdf..00000000000 --- a/docs/HOWTO/mo_extensions/ops/FFT.py +++ /dev/null @@ -1,27 +0,0 @@ -# Copyright (C) 2018-2023 Intel Corporation -# SPDX-License-Identifier: Apache-2.0 - -#! [fft:operation] -from openvino.tools.mo.front.common.partial_infer.elemental import copy_shape_infer -from openvino.tools.mo.graph.graph import Graph -from openvino.tools.mo.ops.op import Op - - -class FFT(Op): - op = 'FFT' - enabled = False - - def __init__(self, graph: Graph, attrs: dict): - super().__init__(graph, { - 'type': self.op, - 'op': self.op, - 'version': 'custom_opset', - 'inverse': None, - 'in_ports_count': 1, - 'out_ports_count': 1, - 'infer': copy_shape_infer - }, attrs) - - def backend_attrs(self): - return ['inverse'] -#! [fft:operation] diff --git a/docs/HOWTO/mri_reconstruction_demo.py b/docs/HOWTO/mri_reconstruction_demo.py deleted file mode 100644 index d694d8819cf..00000000000 --- a/docs/HOWTO/mri_reconstruction_demo.py +++ /dev/null @@ -1,106 +0,0 @@ -# Copyright (C) 2018-2023 Intel Corporation -# SPDX-License-Identifier: Apache-2.0 - -#! [mri_demo:demo] -import numpy as np -import cv2 as cv -import argparse -import time -from openvino.inference_engine import IECore - - -def kspace_to_image(kspace): - assert(len(kspace.shape) == 3 and kspace.shape[-1] == 2) - fft = cv.idft(kspace, flags=cv.DFT_SCALE) - img = cv.magnitude(fft[:,:,0], fft[:,:,1]) - return cv.normalize(img, dst=None, alpha=255, beta=0, norm_type=cv.NORM_MINMAX, dtype=cv.CV_8U) - - -if __name__ == '__main__': - parser = argparse.ArgumentParser(description='MRI reconstrution demo for network from https://github.com/rmsouza01/Hybrid-CS-Model-MRI (https://arxiv.org/abs/1810.12473)') - parser.add_argument('-i', '--input', dest='input', help='Path to input .npy file with MRI scan data.') - parser.add_argument('-p', '--pattern', dest='pattern', help='Path to sampling mask in .npy format.') - parser.add_argument('-m', '--model', dest='model', help='Path to .xml file of OpenVINO IR.') - parser.add_argument('-l', '--cpu_extension', dest='cpu_extension', help='Path to extensions library with FFT implementation.') - parser.add_argument('-d', '--device', dest='device', default='CPU', - help='Optional. Specify the target device to infer on; CPU, ' - 'GPU, GNA is acceptable. For non-CPU targets, ' - 'HETERO plugin is used with CPU fallbacks to FFT implementation. ' - 'Default value is CPU') - args = parser.parse_args() - - xml_path = args.model - assert(xml_path.endswith('.xml')) - bin_path = xml_path[:xml_path.rfind('.xml')] + '.bin' - - ie = IECore() - ie.add_extension(args.cpu_extension, "CPU") - - net = ie.read_network(xml_path, bin_path) - - device = 'CPU' if args.device == 'CPU' else ('HETERO:' + args.device + ',CPU') - exec_net = ie.load_network(net, device) - - # Hybrid-CS-Model-MRI/Data/stats_fs_unet_norm_20.npy - stats = np.array([2.20295299e-01, 1.11048916e+03, 4.16997984e+00, 4.71741395e+00], dtype=np.float32) - # Hybrid-CS-Model-MRI/Data/sampling_mask_20perc.npy - var_sampling_mask = np.load(args.pattern) # TODO: can we generate it in runtime? - print('Sampling ratio:', 1.0 - var_sampling_mask.sum() / var_sampling_mask.size) - - data = np.load(args.input) - num_slices, height, width = data.shape[0], data.shape[1], data.shape[2] - pred = np.zeros((num_slices, height, width), dtype=np.uint8) - data /= np.sqrt(height * width) - - print('Compute...') - start = time.time() - for slice_id, kspace in enumerate(data): - kspace = kspace.copy() - - # Apply sampling - kspace[var_sampling_mask] = 0 - kspace = (kspace - stats[0]) / stats[1] - - # Forward through network - input = np.expand_dims(kspace.transpose(2, 0, 1), axis=0) - outputs = exec_net.infer(inputs={'input_1': input}) - output = next(iter(outputs.values())) - output = output.reshape(height, width) - - # Save predictions - pred[slice_id] = cv.normalize(output, dst=None, alpha=255, beta=0, norm_type=cv.NORM_MINMAX, dtype=cv.CV_8U) - - print('Elapsed time: %.1f seconds' % (time.time() - start)) - - WIN_NAME = 'MRI reconstruction with OpenVINO' - - slice_id = 0 - def callback(pos): - global slice_id - slice_id = pos - - kspace = data[slice_id] - img = kspace_to_image(kspace) - - kspace[var_sampling_mask] = 0 - masked = kspace_to_image(kspace) - - rec = pred[slice_id] - - # Add a header - border_size = 20 - render = cv.hconcat((img, masked, rec)) - render = cv.copyMakeBorder(render, border_size, 0, 0, 0, cv.BORDER_CONSTANT, value=255) - cv.putText(render, 'Original', (0, 15), cv.FONT_HERSHEY_SIMPLEX, 0.5, color=0) - cv.putText(render, 'Sampled (PSNR %.1f)' % cv.PSNR(img, masked), (width, 15), cv.FONT_HERSHEY_SIMPLEX, 0.5, color=0) - cv.putText(render, 'Reconstructed (PSNR %.1f)' % cv.PSNR(img, rec), (width*2, 15), cv.FONT_HERSHEY_SIMPLEX, 0.5, color=0) - - cv.imshow(WIN_NAME, render) - cv.waitKey(1) - - cv.namedWindow(WIN_NAME, cv.WINDOW_NORMAL) - print(num_slices) - cv.createTrackbar('Slice', WIN_NAME, num_slices // 2, num_slices - 1, callback) - callback(num_slices // 2) # Trigger initial visualization - cv.waitKey() -#! [mri_demo:demo]