[IE Python Sample] Update docs (#9807)
* update hello_classification readme * update classification_async readme * update hello_query_device readme * Fix hello_classification launch line * Update hello_reshape_ssd readme * update speech sample docs * update ngraph sample docs * fix launch command * refactor py ngraph imports * Replace `network` with `model` * update example section with openvino-dev * Update samples/python/classification_sample_async/README.md Co-authored-by: Anastasiya Ageeva <anastasiya.ageeva@intel.com> * Update samples/python/classification_sample_async/README.md Co-authored-by: Anastasiya Ageeva <anastasiya.ageeva@intel.com> * Update samples/python/hello_classification/README.md Co-authored-by: Anastasiya Ageeva <anastasiya.ageeva@intel.com> * Update samples/python/hello_classification/README.md Co-authored-by: Anastasiya Ageeva <anastasiya.ageeva@intel.com> * Update samples/python/hello_reshape_ssd/README.md Co-authored-by: Anastasiya Ageeva <anastasiya.ageeva@intel.com> * Update samples/python/ngraph_function_creation_sample/README.md Co-authored-by: Anastasiya Ageeva <anastasiya.ageeva@intel.com> * Update samples/python/ngraph_function_creation_sample/README.md Co-authored-by: Anastasiya Ageeva <anastasiya.ageeva@intel.com> * Update samples/python/ngraph_function_creation_sample/README.md Co-authored-by: Anastasiya Ageeva <anastasiya.ageeva@intel.com> * Update samples/python/ngraph_function_creation_sample/README.md Co-authored-by: Andrey Zaytsev <andrey.zaytsev@intel.com> * Replace `Inference Engine` with `OpenVINO` * fix ngraph ref * Replace `Inference Engine` by `OpenVINO™ Runtime` * Fix IR mentions Co-authored-by: Vladimir Dudnik <vladimir.dudnik@intel.com> Co-authored-by: Anastasiya Ageeva <anastasiya.ageeva@intel.com> Co-authored-by: Andrey Zaytsev <andrey.zaytsev@intel.com>
This commit is contained in:
@@ -1,66 +1,43 @@
|
||||
# nGraph Function Creation Python* Sample {#openvino_inference_engine_ie_bridges_python_sample_ngraph_function_creation_sample_README}
|
||||
|
||||
This sample demonstrates how to execute an inference using [OpenVINO Model feature](../../../docs/OV_Runtime_UG/model_representation.md) to create a network that uses weights from LeNet classification network, which is known to work well on digit classification tasks. So you don't need an XML file, the model will be created from the source code on the fly.
|
||||
This sample demonstrates how to run inference using a [model](../../../docs/OV_Runtime_UG/model_representation.md) built on the fly that uses weights from the LeNet classification model, which is known to work well on digit classification tasks. You do not need an XML file, the model is created from the source code on the fly.
|
||||
|
||||
In addition to regular grayscale images with a digit, the sample also supports single-channel `ubyte` images as an input.
|
||||
The following Python API is used in the application:
|
||||
|
||||
The following Inference Engine Python API is used in the application:
|
||||
| Feature | API | Description |
|
||||
| :--------------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :------------------------------------------------------ |
|
||||
| Model Operations | [openvino.runtime.Model], [openvino.runtime.set_batch], [openvino.runtime.Model.input] | Managing of model |
|
||||
| nGraph Functions | [openvino.runtime.op.Parameter], [openvino.runtime.op.Constant], [openvino.runtime.opset8.convolution], [openvino.runtime.opset8.add], [openvino.runtime.opset1.max_pool], [openvino.runtime.opset8.reshape], [openvino.runtime.opset8.matmul], [openvino.runtime.opset8.relu], [openvino.runtime.opset8.softmax] | Description of a model topology using nGraph Python API |
|
||||
|
||||
| Feature | API | Description |
|
||||
| :----------------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :---------------------------------------------------- |
|
||||
| Network Operations | [IENetwork], [IENetwork.batch_size] | Managing of network |
|
||||
| nGraph Functions | [ngraph.impl.Function], [ngraph.parameter], [ngraph.constant], [ngraph.convolution], [ngraph.add], [ngraph.max_pool], [ngraph.reshape], [ngraph.matmul], [ngraph.relu], [ngraph.softmax], [ngraph.result], ngraph.impl.Function.to_capsule | Description of a network using nGraph Python API |
|
||||
Basic OpenVINO™ Runtime API is covered by [Hello Classification Python* Sample](../hello_classification/README.md).
|
||||
|
||||
Basic Inference Engine API is covered by [Hello Classification Python* Sample](../hello_classification/README.md).
|
||||
|
||||
| Options | Values |
|
||||
| :------------------------- | :---------------------------------------------------------------------- |
|
||||
| Validated Models | LeNet |
|
||||
| Model Format | Network weights file (\*.bin) |
|
||||
| Validated images | The sample uses OpenCV\* to [read input grayscale image](https://docs.opencv.org/master/d4/da8/group__imgcodecs.html#ga288b8b3da0892bd651fce07b3bbd3a56) (\*.bmp, \*.png) or single-channel `ubyte` image |
|
||||
| Supported devices | [All](../../../docs/OV_Runtime_UG/supported_plugins/Supported_Devices.md) |
|
||||
| Options | Values |
|
||||
| :------------------------- | :-------------------------------------------------------------------- |
|
||||
| Validated Models | LeNet |
|
||||
| Model Format | Model weights file (\*.bin) |
|
||||
| Supported devices | [All](../../../docs/OV_Runtime_UG/supported_plugins/Supported_Devices.md) |
|
||||
| Other language realization | [C++](../../../samples/cpp/ngraph_function_creation_sample/README.md) |
|
||||
|
||||
## How It Works
|
||||
|
||||
At startup, the sample application reads command-line parameters, prepares input data, creates a network using [OpenVINO Model feature](../../../docs/OV_Runtime_UG/model_representation.md) and passed weights file, loads the network and image(s) to the Inference Engine plugin, performs synchronous inference, and processes output data, logging each step in a standard output stream.
|
||||
At startup, the sample application does the following:
|
||||
- Reads command line parameters
|
||||
- [Build a Model](../../../docs/OV_Runtime_UG/model_representation.md) and passed weights file
|
||||
- Loads the model and input data to the OpenVINO™ Runtime plugin
|
||||
- Performs synchronous inference and processes output data, logging each step in a standard output stream
|
||||
|
||||
|
||||
You can see the explicit description of
|
||||
each sample step at [Integration Steps](../../../docs/OV_Runtime_UG/Integrate_with_customer_application_new_API.md) section of "Integrate the Inference Engine with Your Application" guide.
|
||||
each sample step at [Integration Steps](../../../docs/OV_Runtime_UG/Integrate_with_customer_application_new_API.md) section of "Integrate the OpenVINO™ Runtime with Your Application" guide.
|
||||
|
||||
## Running
|
||||
|
||||
Run the application with the `-h` option to see the usage message:
|
||||
|
||||
```sh
|
||||
python <path_to_sample>/ngraph_function_creation_sample.py -h
|
||||
```
|
||||
|
||||
Usage message:
|
||||
To run the sample, you need to specify model weights and device.
|
||||
|
||||
```
|
||||
usage: ngraph_function_creation_sample.py [-h] -m MODEL -i INPUT [INPUT ...]
|
||||
[-d DEVICE] [--labels LABELS]
|
||||
[-nt NUMBER_TOP]
|
||||
|
||||
Options:
|
||||
-h, --help Show this help message and exit.
|
||||
-m MODEL, --model MODEL
|
||||
Required. Path to a file with network weights.
|
||||
-i INPUT [INPUT ...], --input INPUT [INPUT ...]
|
||||
Required. Path to an image file.
|
||||
-d DEVICE, --device DEVICE
|
||||
Optional. Specify the target device to infer on; CPU,
|
||||
GPU, MYRIAD, HDDL or HETERO: is acceptable. The sample
|
||||
will look for a suitable plugin for device specified.
|
||||
Default value is CPU.
|
||||
--labels LABELS Optional. Path to a labels mapping file.
|
||||
-nt NUMBER_TOP, --number_top NUMBER_TOP
|
||||
Optional. Number of top results.
|
||||
python ngraph_function_creation_sample.py <path_to_model> <device_name>
|
||||
```
|
||||
|
||||
To run the sample, you need specify a model weights and image. You can use images from the media files collection available at https://storage.openvinotoolkit.org/data/test_data.
|
||||
|
||||
> **NOTE**:
|
||||
>
|
||||
> - This sample supports models with FP32 weights only.
|
||||
@@ -68,73 +45,102 @@ To run the sample, you need specify a model weights and image. You can use image
|
||||
> - The `lenet.bin` weights file was generated by the [Model Optimizer](../../../docs/MO_DG/Deep_Learning_Model_Optimizer_DevGuide.md) tool from the public LeNet model with the `--input_shape [64,1,28,28]` parameter specified.
|
||||
>
|
||||
> - The original model is available in the [Caffe* repository](https://github.com/BVLC/caffe/tree/master/examples/mnist) on GitHub\*.
|
||||
>
|
||||
> - The white over black images will be automatically inverted in color for a better predictions.
|
||||
|
||||
For example, you can do inference of [3.png](https://storage.openvinotoolkit.org/data/test_data/images/3.png) using the pre-trained model on a `GPU`:
|
||||
For example:
|
||||
|
||||
```sh
|
||||
python <path_to_sample>/ngraph_function_creation_sample.py -m <path_to_sample>/lenet.bin -i <path_to_image>/3.png -d GPU
|
||||
```
|
||||
python ngraph_function_creation_sample.py lenet.bin GPU
|
||||
```
|
||||
|
||||
## Sample Output
|
||||
|
||||
The sample application logs each step in a standard output stream and outputs top-10 inference results.
|
||||
The sample application logs each step in a standard output stream and outputs 10 inference results.
|
||||
|
||||
```
|
||||
[ INFO ] Creating Inference Engine
|
||||
[ INFO ] Loading the network using ngraph function with weights from c:\openvino\samples\python\ngraph_function_creation_sample\lenet.bin
|
||||
[ INFO ] Configuring input and output blobs
|
||||
[ INFO ] Creating OpenVINO Runtime Core
|
||||
[ INFO ] Loading the model using ngraph function with weights from lenet.bin
|
||||
[ INFO ] Loading the model to the plugin
|
||||
[ WARNING ] Image c:\images\3.png is inverted to white over black
|
||||
[ WARNING ] Image c:\images\3.png is resized from (351, 353) to (28, 28)
|
||||
[ INFO ] Starting inference in synchronous mode
|
||||
[ INFO ] Image path: c:\images\3.png
|
||||
[ INFO ] Top 10 results:
|
||||
[ INFO ] classid probability
|
||||
[ INFO ] -------------------
|
||||
[ INFO ] 3 1.0000000
|
||||
[ INFO ] 9 0.0000000
|
||||
[ INFO ] 8 0.0000000
|
||||
[ INFO ] 7 0.0000000
|
||||
[ INFO ] 6 0.0000000
|
||||
[ INFO ] 5 0.0000000
|
||||
[ INFO ] 4 0.0000000
|
||||
[ INFO ] 2 0.0000000
|
||||
[ INFO ] 1 0.0000000
|
||||
[ INFO ] 0 0.0000000
|
||||
[ INFO ] Top 1 results:
|
||||
[ INFO ] Image 0
|
||||
[ INFO ]
|
||||
[ INFO ] classid probability label
|
||||
[ INFO ] -------------------------
|
||||
[ INFO ] 0 1.0000000 0
|
||||
[ INFO ]
|
||||
[ INFO ] Image 1
|
||||
[ INFO ]
|
||||
[ INFO ] classid probability label
|
||||
[ INFO ] -------------------------
|
||||
[ INFO ] 1 1.0000000 1
|
||||
[ INFO ]
|
||||
[ INFO ] Image 2
|
||||
[ INFO ]
|
||||
[ INFO ] classid probability label
|
||||
[ INFO ] -------------------------
|
||||
[ INFO ] 2 1.0000000 2
|
||||
[ INFO ]
|
||||
[ INFO ] Image 3
|
||||
[ INFO ]
|
||||
[ INFO ] classid probability label
|
||||
[ INFO ] -------------------------
|
||||
[ INFO ] 3 1.0000000 3
|
||||
[ INFO ]
|
||||
[ INFO ] Image 4
|
||||
[ INFO ]
|
||||
[ INFO ] classid probability label
|
||||
[ INFO ] -------------------------
|
||||
[ INFO ] 4 1.0000000 4
|
||||
[ INFO ]
|
||||
[ INFO ] Image 5
|
||||
[ INFO ]
|
||||
[ INFO ] classid probability label
|
||||
[ INFO ] -------------------------
|
||||
[ INFO ] 5 1.0000000 5
|
||||
[ INFO ]
|
||||
[ INFO ] Image 6
|
||||
[ INFO ]
|
||||
[ INFO ] classid probability label
|
||||
[ INFO ] -------------------------
|
||||
[ INFO ] 6 1.0000000 6
|
||||
[ INFO ]
|
||||
[ INFO ] Image 7
|
||||
[ INFO ]
|
||||
[ INFO ] classid probability label
|
||||
[ INFO ] -------------------------
|
||||
[ INFO ] 7 1.0000000 7
|
||||
[ INFO ]
|
||||
[ INFO ] Image 8
|
||||
[ INFO ]
|
||||
[ INFO ] classid probability label
|
||||
[ INFO ] -------------------------
|
||||
[ INFO ] 8 1.0000000 8
|
||||
[ INFO ]
|
||||
[ INFO ] Image 9
|
||||
[ INFO ]
|
||||
[ INFO ] classid probability label
|
||||
[ INFO ] -------------------------
|
||||
[ INFO ] 9 1.0000000 9
|
||||
[ INFO ]
|
||||
[ INFO ] This sample is an API example, for any performance measurements please use the dedicated benchmark_app tool
|
||||
```
|
||||
|
||||
## See Also
|
||||
|
||||
- [Integrate the Inference Engine with Your Application](../../../docs/OV_Runtime_UG/Integrate_with_customer_application_new_API.md)
|
||||
- [Using Inference Engine Samples](../../../docs/OV_Runtime_UG/Samples_Overview.md)
|
||||
- [Integrate the OpenVINO™ Runtime with Your Application](../../../docs/OV_Runtime_UG/Integrate_with_customer_application_new_API.md)
|
||||
- [Using OpenVINO™ Toolkit Samples](../../../docs/OV_Runtime_UG/Samples_Overview.md)
|
||||
- [Model Downloader](@ref omz_tools_downloader)
|
||||
- [Model Optimizer](../../../docs/MO_DG/Deep_Learning_Model_Optimizer_DevGuide.md)
|
||||
|
||||
[IECore]:https://docs.openvino.ai/latest/ie_python_api/classie__api_1_1IECore.html
|
||||
[IENetwork]:https://docs.openvino.ai/latest/ie_python_api/classie__api_1_1IENetwork.html
|
||||
[IENetwork.batch_size]:https://docs.openvino.ai/latest/ie_python_api/classie__api_1_1IENetwork.html#a79a647cb1b49645616eaeb2ca255ef2e
|
||||
[IENetwork.input_info]:https://docs.openvino.ai/latest/ie_python_api/classie__api_1_1IENetwork.html#data_fields
|
||||
[IENetwork.outputs]:https://docs.openvino.ai/latest/ie_python_api/classie__api_1_1IENetwork.html#data_fields
|
||||
[InputInfoPtr.precision]:https://docs.openvino.ai/latest/ie_python_api/classie__api_1_1InputInfoPtr.html#data_fields
|
||||
[DataPtr.precision]:https://docs.openvino.ai/latest/ie_python_api/classie__api_1_1DataPtr.html#data_fields
|
||||
[IECore.load_network]:https://docs.openvino.ai/latest/ie_python_api/classie__api_1_1IECore.html#ac9a2e043d14ccfa9c6bbf626cfd69fcc
|
||||
[InputInfoPtr.input_data.shape]:https://docs.openvino.ai/latest/ie_python_api/classie__api_1_1InputInfoPtr.html#data_fields
|
||||
[ExecutableNetwork.infer]:https://docs.openvino.ai/latest/ie_python_api/classie__api_1_1ExecutableNetwork.html#aea96e8e534c8e23d8b257bad11063519
|
||||
|
||||
<!-- TODO: Replace the link by another one pointing to the Python API, if available -->
|
||||
[ngraph.impl.Function]:https://docs.openvino.ai/latest/ngraph_cpp_api/classngraph_1_1Function.html
|
||||
<!-- [ngraph.impl.Function.to_capsule]: -->
|
||||
[ngraph.parameter]:https://docs.openvino.ai/latest/ngraph_python_api/namespacengraph_1_1opset1_1_1ops.html#a709acd09288f5a76ed8d07492efc3d13
|
||||
[ngraph.constant]:https://docs.openvino.ai/latest/ngraph_python_api/namespacengraph_1_1opset1_1_1ops.html#a5b6c4e416026e007a4107b3f510d0c27
|
||||
[ngraph.convolution]:https://docs.openvino.ai/latest/ngraph_python_api/namespacengraph_1_1opset1_1_1ops.html#a3143ff55f68428afc1b6c802ee9381e8
|
||||
[ngraph.add]:https://docs.openvino.ai/latest/ngraph_python_api/namespacengraph_1_1opset1_1_1ops.html#abfa0373c10ced1b1f129594d9bd8a159
|
||||
[ngraph.max_pool]:https://docs.openvino.ai/latest/ngraph_python_api/namespacengraph_1_1opset1_1_1ops.html#ac60b4459ad23b296086925abce6acd2d
|
||||
[ngraph.reshape]:https://docs.openvino.ai/latest/ngraph_python_api/namespacengraph_1_1opset1_1_1ops.html#a38e1ead9435c4b75c1d891ba2dd6a62e
|
||||
[ngraph.matmul]:https://docs.openvino.ai/latest/ngraph_python_api/namespacengraph_1_1opset1_1_1ops.html#a403b5e10e1f75aeb7569024237e85071
|
||||
[ngraph.relu]:https://docs.openvino.ai/latest/ngraph_python_api/namespacengraph_1_1opset1_1_1ops.html#a70b9b3faf58d85e43d27fef5028117e3
|
||||
[ngraph.softmax]:https://docs.openvino.ai/latest/ngraph_python_api/namespacengraph_1_1opset1_1_1ops.html#a632cc9a31ecaefa2a982d039ecad8d26
|
||||
[ngraph.result]:https://docs.openvino.ai/latest/ngraph_python_api/namespacengraph_1_1opset1_1_1ops.html#a94f8bf6ab8910dfd461d09cb6c6edd11
|
||||
<!-- [openvino.runtime.Model]:
|
||||
[openvino.runtime.set_batch]:
|
||||
[openvino.runtime.Model.input]:
|
||||
[openvino.runtime.op.Parameter]:
|
||||
[openvino.runtime.op.Constant]:
|
||||
[openvino.runtime.opset8.convolution]:
|
||||
[openvino.runtime.opset8.add]:
|
||||
[openvino.runtime.opset1.max_pool]:
|
||||
[openvino.runtime.opset8.reshape]:
|
||||
[openvino.runtime.opset8.matmul]:
|
||||
[openvino.runtime.opset8.relu]:
|
||||
[openvino.runtime.opset8.softmax]: -->
|
||||
|
||||
@@ -9,13 +9,14 @@ from functools import reduce
|
||||
|
||||
import numpy as np
|
||||
from openvino.preprocess import PrePostProcessor
|
||||
from openvino.runtime import Core, Layout, Type, Model, Shape, PartialShape
|
||||
import openvino
|
||||
from openvino.runtime import (Core, Layout, Model, Shape, Type, op, opset1,
|
||||
opset8, set_batch)
|
||||
|
||||
from data import digits
|
||||
|
||||
|
||||
def create_ngraph_function(model_path: str) -> Model:
|
||||
"""Create a network on the fly from the source code using ngraph"""
|
||||
"""Create a model on the fly from the source code using ngraph"""
|
||||
|
||||
def shape_and_length(shape: list) -> typing.Tuple[list, int]:
|
||||
length = reduce(lambda x, y: x * y, shape)
|
||||
@@ -27,42 +28,42 @@ def create_ngraph_function(model_path: str) -> Model:
|
||||
|
||||
# input
|
||||
input_shape = [64, 1, 28, 28]
|
||||
param_node = openvino.runtime.op.Parameter(Type.f32, Shape(input_shape))
|
||||
param_node = op.Parameter(Type.f32, Shape(input_shape))
|
||||
|
||||
# convolution 1
|
||||
conv_1_kernel_shape, conv_1_kernel_length = shape_and_length([20, 1, 5, 5])
|
||||
conv_1_kernel = openvino.runtime.op.Constant(Type.f32, Shape(conv_1_kernel_shape), weights[0:conv_1_kernel_length].tolist())
|
||||
conv_1_kernel = op.Constant(Type.f32, Shape(conv_1_kernel_shape), weights[0:conv_1_kernel_length].tolist())
|
||||
weights_offset += conv_1_kernel_length
|
||||
conv_1_node = openvino.runtime.opset8.convolution(param_node, conv_1_kernel, [1, 1], padding_begin, padding_end, [1, 1])
|
||||
conv_1_node = opset8.convolution(param_node, conv_1_kernel, [1, 1], padding_begin, padding_end, [1, 1])
|
||||
|
||||
# add 1
|
||||
add_1_kernel_shape, add_1_kernel_length = shape_and_length([1, 20, 1, 1])
|
||||
add_1_kernel = openvino.runtime.op.Constant(Type.f32, Shape(add_1_kernel_shape),
|
||||
weights[weights_offset : weights_offset + add_1_kernel_length])
|
||||
add_1_kernel = op.Constant(Type.f32, Shape(add_1_kernel_shape),
|
||||
weights[weights_offset : weights_offset + add_1_kernel_length])
|
||||
weights_offset += add_1_kernel_length
|
||||
add_1_node = openvino.runtime.opset8.add(conv_1_node, add_1_kernel)
|
||||
add_1_node = opset8.add(conv_1_node, add_1_kernel)
|
||||
|
||||
# maxpool 1
|
||||
maxpool_1_node = openvino.runtime.opset1.max_pool(add_1_node, [2, 2], padding_begin, padding_end, [2, 2], 'ceil')
|
||||
maxpool_1_node = opset1.max_pool(add_1_node, [2, 2], padding_begin, padding_end, [2, 2], 'ceil')
|
||||
|
||||
# convolution 2
|
||||
conv_2_kernel_shape, conv_2_kernel_length = shape_and_length([50, 20, 5, 5])
|
||||
conv_2_kernel = openvino.runtime.op.Constant(Type.f32, Shape(conv_2_kernel_shape),
|
||||
weights[weights_offset : weights_offset + conv_2_kernel_length],
|
||||
)
|
||||
conv_2_kernel = op.Constant(Type.f32, Shape(conv_2_kernel_shape),
|
||||
weights[weights_offset : weights_offset + conv_2_kernel_length],
|
||||
)
|
||||
weights_offset += conv_2_kernel_length
|
||||
conv_2_node = openvino.runtime.opset8.convolution(maxpool_1_node, conv_2_kernel, [1, 1], padding_begin, padding_end, [1, 1])
|
||||
conv_2_node = opset8.convolution(maxpool_1_node, conv_2_kernel, [1, 1], padding_begin, padding_end, [1, 1])
|
||||
|
||||
# add 2
|
||||
add_2_kernel_shape, add_2_kernel_length = shape_and_length([1, 50, 1, 1])
|
||||
add_2_kernel = openvino.runtime.op.Constant(Type.f32, Shape(add_2_kernel_shape),
|
||||
weights[weights_offset : weights_offset + add_2_kernel_length],
|
||||
)
|
||||
add_2_kernel = op.Constant(Type.f32, Shape(add_2_kernel_shape),
|
||||
weights[weights_offset : weights_offset + add_2_kernel_length],
|
||||
)
|
||||
weights_offset += add_2_kernel_length
|
||||
add_2_node = openvino.runtime.opset8.add(conv_2_node, add_2_kernel)
|
||||
add_2_node = opset8.add(conv_2_node, add_2_kernel)
|
||||
|
||||
# maxpool 2
|
||||
maxpool_2_node = openvino.runtime.opset1.max_pool(add_2_node, [2, 2], padding_begin, padding_end, [2, 2], 'ceil')
|
||||
maxpool_2_node = opset1.max_pool(add_2_node, [2, 2], padding_begin, padding_end, [2, 2], 'ceil')
|
||||
|
||||
# reshape 1
|
||||
reshape_1_dims, reshape_1_length = shape_and_length([2])
|
||||
@@ -71,52 +72,52 @@ def create_ngraph_function(model_path: str) -> Model:
|
||||
weights[weights_offset : weights_offset + 2 * reshape_1_length],
|
||||
dtype=np.int64,
|
||||
)
|
||||
reshape_1_kernel = openvino.runtime.op.Constant(Type.i64, Shape(list(dtype_weights.shape)), dtype_weights)
|
||||
reshape_1_kernel = op.Constant(Type.i64, Shape(list(dtype_weights.shape)), dtype_weights)
|
||||
weights_offset += 2 * reshape_1_length
|
||||
reshape_1_node = openvino.runtime.opset8.reshape(maxpool_2_node, reshape_1_kernel, True)
|
||||
reshape_1_node = opset8.reshape(maxpool_2_node, reshape_1_kernel, True)
|
||||
|
||||
# matmul 1
|
||||
matmul_1_kernel_shape, matmul_1_kernel_length = shape_and_length([500, 800])
|
||||
matmul_1_kernel = openvino.runtime.op.Constant(Type.f32, Shape(matmul_1_kernel_shape),
|
||||
weights[weights_offset : weights_offset + matmul_1_kernel_length],
|
||||
)
|
||||
matmul_1_kernel = op.Constant(Type.f32, Shape(matmul_1_kernel_shape),
|
||||
weights[weights_offset : weights_offset + matmul_1_kernel_length],
|
||||
)
|
||||
weights_offset += matmul_1_kernel_length
|
||||
matmul_1_node = openvino.runtime.opset8.matmul(reshape_1_node, matmul_1_kernel, False, True)
|
||||
matmul_1_node = opset8.matmul(reshape_1_node, matmul_1_kernel, False, True)
|
||||
|
||||
# add 3
|
||||
add_3_kernel_shape, add_3_kernel_length = shape_and_length([1, 500])
|
||||
add_3_kernel = openvino.runtime.op.Constant(Type.f32, Shape(add_3_kernel_shape),
|
||||
weights[weights_offset : weights_offset + add_3_kernel_length],
|
||||
)
|
||||
add_3_kernel = op.Constant(Type.f32, Shape(add_3_kernel_shape),
|
||||
weights[weights_offset : weights_offset + add_3_kernel_length],
|
||||
)
|
||||
weights_offset += add_3_kernel_length
|
||||
add_3_node = openvino.runtime.opset8.add(matmul_1_node, add_3_kernel)
|
||||
add_3_node = opset8.add(matmul_1_node, add_3_kernel)
|
||||
|
||||
# ReLU
|
||||
relu_node = openvino.runtime.opset8.relu(add_3_node)
|
||||
relu_node = opset8.relu(add_3_node)
|
||||
|
||||
# reshape 2
|
||||
reshape_2_kernel = openvino.runtime.op.Constant(Type.i64, Shape(list(dtype_weights.shape)), dtype_weights)
|
||||
reshape_2_node = openvino.runtime.opset8.reshape(relu_node, reshape_2_kernel, True)
|
||||
reshape_2_kernel = op.Constant(Type.i64, Shape(list(dtype_weights.shape)), dtype_weights)
|
||||
reshape_2_node = opset8.reshape(relu_node, reshape_2_kernel, True)
|
||||
|
||||
# matmul 2
|
||||
matmul_2_kernel_shape, matmul_2_kernel_length = shape_and_length([10, 500])
|
||||
matmul_2_kernel = openvino.runtime.op.Constant(Type.f32, Shape(matmul_2_kernel_shape),
|
||||
weights[weights_offset : weights_offset + matmul_2_kernel_length],
|
||||
)
|
||||
matmul_2_kernel = op.Constant(Type.f32, Shape(matmul_2_kernel_shape),
|
||||
weights[weights_offset : weights_offset + matmul_2_kernel_length],
|
||||
)
|
||||
weights_offset += matmul_2_kernel_length
|
||||
matmul_2_node = openvino.runtime.opset8.matmul(reshape_2_node, matmul_2_kernel, False, True)
|
||||
matmul_2_node = opset8.matmul(reshape_2_node, matmul_2_kernel, False, True)
|
||||
|
||||
# add 4
|
||||
add_4_kernel_shape, add_4_kernel_length = shape_and_length([1, 10])
|
||||
add_4_kernel = openvino.runtime.op.Constant(Type.f32, Shape(add_4_kernel_shape),
|
||||
weights[weights_offset : weights_offset + add_4_kernel_length],
|
||||
)
|
||||
add_4_kernel = op.Constant(Type.f32, Shape(add_4_kernel_shape),
|
||||
weights[weights_offset : weights_offset + add_4_kernel_length],
|
||||
)
|
||||
weights_offset += add_4_kernel_length
|
||||
add_4_node = openvino.runtime.opset8.add(matmul_2_node, add_4_kernel)
|
||||
add_4_node = opset8.add(matmul_2_node, add_4_kernel)
|
||||
|
||||
# softmax
|
||||
softmax_axis = 1
|
||||
softmax_node = openvino.runtime.opset8.softmax(add_4_node, softmax_axis)
|
||||
softmax_node = opset8.softmax(add_4_node, softmax_axis)
|
||||
|
||||
return Model(softmax_node, [param_node], 'lenet')
|
||||
|
||||
@@ -125,7 +126,7 @@ def main():
|
||||
log.basicConfig(format='[ %(levelname)s ] %(message)s', level=log.INFO, stream=sys.stdout)
|
||||
# Parsing and validation of input arguments
|
||||
if len(sys.argv) != 3:
|
||||
log.info('Usage: <path_to_model> <device_name>')
|
||||
log.info(f'Usage: {sys.argv[0]} <path_to_model> <device_name>')
|
||||
return 1
|
||||
|
||||
model_path = sys.argv[1]
|
||||
@@ -137,7 +138,7 @@ def main():
|
||||
core = Core()
|
||||
|
||||
# ---------------------------Step 2. Read a model in OpenVINO Intermediate Representation------------------------------
|
||||
log.info(f'Loading the network using ngraph function with weights from {model_path}')
|
||||
log.info(f'Loading the model using ngraph function with weights from {model_path}')
|
||||
model = create_ngraph_function(model_path)
|
||||
# ---------------------------Step 3. Apply preprocessing----------------------------------------------------------
|
||||
# Get names of input and output blobs
|
||||
@@ -160,8 +161,7 @@ def main():
|
||||
model = ppp.build()
|
||||
|
||||
# Set a batch size equal to number of input images
|
||||
model.reshape({model.input().get_any_name(): PartialShape((digits.shape[0], model.input().shape[1], model.input().shape[2], model.input().shape[3]))})
|
||||
|
||||
set_batch(model, digits.shape[0])
|
||||
# ---------------------------Step 4. Loading model to the device-------------------------------------------------------
|
||||
log.info('Loading the model to the plugin')
|
||||
compiled_model = core.compile_model(model, device_name)
|
||||
|
||||
Reference in New Issue
Block a user