221 lines
11 KiB
Markdown
221 lines
11 KiB
Markdown
# Model Creation C++ Sample {#openvino_inference_engine_samples_model_creation_sample_README}
|
|
|
|
@sphinxdirective
|
|
|
|
This sample demonstrates how to execute an synchronous inference using :doc:`model <openvino_docs_OV_UG_Model_Representation>` built on the fly which uses weights from LeNet classification model, which is known to work well on digit classification tasks.
|
|
|
|
You do not need an XML file to create a model. The API of ov::Model allows creating a model on the fly from the source code.
|
|
|
|
The following C++ API is used in the application:
|
|
|
|
+------------------------------------------+-----------------------------------------+---------------------------------------+
|
|
| Feature | API | Description |
|
|
+==========================================+=========================================+=======================================+
|
|
| OpenVINO Runtime Info | ``ov::Core::get_versions`` | Get device plugins versions |
|
|
+------------------------------------------+-----------------------------------------+---------------------------------------+
|
|
| Shape Operations | ``ov::Output::get_shape``, | Operate with shape |
|
|
| | ``ov::Shape::size``, | |
|
|
| | ``ov::shape_size`` | |
|
|
+------------------------------------------+-----------------------------------------+---------------------------------------+
|
|
| Tensor Operations | ``ov::Tensor::get_byte_size``, | Get tensor byte size and its data |
|
|
| | ``ov::Tensor:data`` | |
|
|
+------------------------------------------+-----------------------------------------+---------------------------------------+
|
|
| Model Operations | ``ov::set_batch`` | Operate with model batch size |
|
|
+------------------------------------------+-----------------------------------------+---------------------------------------+
|
|
| Infer Request Operations | ``ov::InferRequest::get_input_tensor`` | Get a input tensor |
|
|
+------------------------------------------+-----------------------------------------+---------------------------------------+
|
|
| Model creation objects | ``ov::opset8::Parameter``, | Used to construct an OpenVINO model |
|
|
| | ``ov::Node::output``, | |
|
|
| | ``ov::opset8::Constant``, | |
|
|
| | ``ov::opset8::Convolution``, | |
|
|
| | ``ov::opset8::Add``, | |
|
|
| | ``ov::opset1::MaxPool``, | |
|
|
| | ``ov::opset8::Reshape``, | |
|
|
| | ``ov::opset8::MatMul``, | |
|
|
| | ``ov::opset8::Relu``, | |
|
|
| | ``ov::opset8::Softmax``, | |
|
|
| | ``ov::descriptor::Tensor::set_names``, | |
|
|
| | ``ov::opset8::Result``, | |
|
|
| | ``ov::Model``, | |
|
|
| | ``ov::ParameterVector::vector`` | |
|
|
+------------------------------------------+-----------------------------------------+---------------------------------------+
|
|
|
|
Basic OpenVINO™ Runtime API is covered by :doc:`Hello Classification C++ sample <openvino_inference_engine_samples_hello_classification_README>`.
|
|
|
|
+---------------------------------------------------------+-------------------------------------------------------------------------------------------------+
|
|
| Options | Values |
|
|
+=========================================================+=================================================================================================+
|
|
| Validated Models | LeNet |
|
|
+---------------------------------------------------------+-------------------------------------------------------------------------------------------------+
|
|
| Model Format | model weights file (\*.bin) |
|
|
+---------------------------------------------------------+-------------------------------------------------------------------------------------------------+
|
|
| Validated images | single-channel ``MNIST ubyte`` images |
|
|
+---------------------------------------------------------+-------------------------------------------------------------------------------------------------+
|
|
| Supported devices | :doc:`All <openvino_docs_OV_UG_supported_plugins_Supported_Devices>` |
|
|
+---------------------------------------------------------+-------------------------------------------------------------------------------------------------+
|
|
| Other language realization | :doc:`Python <openvino_inference_engine_ie_bridges_python_sample_model_creation_sample_README>` |
|
|
+---------------------------------------------------------+-------------------------------------------------------------------------------------------------+
|
|
|
|
How It Works
|
|
############
|
|
|
|
At startup, the sample application does the following:
|
|
|
|
- Reads command line parameters
|
|
- :doc:`Build a Model <openvino_docs_OV_UG_Model_Representation>` 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 :doc:`Integration Steps <openvino_docs_OV_UG_Integrate_OV_with_your_application>` section of "Integrate OpenVINO™ Runtime with Your Application" guide.
|
|
|
|
Building
|
|
########
|
|
|
|
To build the sample, please use instructions available at :doc:`Build the Sample Applications <openvino_docs_OV_UG_Samples_Overview>` section in OpenVINO™ Toolkit Samples guide.
|
|
|
|
Running
|
|
#######
|
|
|
|
.. code-block:: console
|
|
|
|
model_creation_sample <path_to_lenet_weights> <device>
|
|
|
|
.. note::
|
|
|
|
- you can use LeNet model weights in the sample folder: ``lenet.bin`` with FP32 weights file
|
|
- The ``lenet.bin`` with FP32 weights file was generated by the :doc:`Model Optimizer <openvino_docs_MO_DG_Deep_Learning_Model_Optimizer_DevGuide>` 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\*.
|
|
|
|
|
|
You can do inference of an image using a pre-trained model on a GPU using the following command:
|
|
|
|
.. code-block:: console
|
|
|
|
model_creation_sample lenet.bin GPU
|
|
|
|
Sample Output
|
|
#############
|
|
|
|
The sample application logs each step in a standard output stream and outputs top-10 inference results.
|
|
|
|
.. code-block:: console
|
|
|
|
[ INFO ] OpenVINO Runtime version ......... <version>
|
|
[ INFO ] Build ........... <build>
|
|
[ INFO ]
|
|
[ INFO ] Device info:
|
|
[ INFO ] GPU
|
|
[ INFO ] Intel GPU plugin version ......... <version>
|
|
[ INFO ] Build ........... <build>
|
|
[ INFO ]
|
|
[ INFO ]
|
|
[ INFO ] Create model from weights: lenet.bin
|
|
[ INFO ] model name: lenet
|
|
[ INFO ] inputs
|
|
[ INFO ] input name: NONE
|
|
[ INFO ] input type: f32
|
|
[ INFO ] input shape: {64, 1, 28, 28}
|
|
[ INFO ] outputs
|
|
[ INFO ] output name: output_tensor
|
|
[ INFO ] output type: f32
|
|
[ INFO ] output shape: {64, 10}
|
|
[ INFO ] Batch size is 10
|
|
[ INFO ] model name: lenet
|
|
[ INFO ] inputs
|
|
[ INFO ] input name: NONE
|
|
[ INFO ] input type: u8
|
|
[ INFO ] input shape: {10, 28, 28, 1}
|
|
[ INFO ] outputs
|
|
[ INFO ] output name: output_tensor
|
|
[ INFO ] output type: f32
|
|
[ INFO ] output shape: {10, 10}
|
|
[ INFO ] Compiling a model for the GPU device
|
|
[ INFO ] Create infer request
|
|
[ INFO ] Combine images in batch and set to input tensor
|
|
[ INFO ] Start sync inference
|
|
[ INFO ] Processing output tensor
|
|
|
|
Top 1 results:
|
|
|
|
Image 0
|
|
|
|
classid probability label
|
|
------- ----------- -----
|
|
0 1.0000000 0
|
|
|
|
Image 1
|
|
|
|
classid probability label
|
|
------- ----------- -----
|
|
1 1.0000000 1
|
|
|
|
Image 2
|
|
|
|
classid probability label
|
|
------- ----------- -----
|
|
2 1.0000000 2
|
|
|
|
Image 3
|
|
|
|
classid probability label
|
|
------- ----------- -----
|
|
3 1.0000000 3
|
|
|
|
Image 4
|
|
|
|
classid probability label
|
|
------- ----------- -----
|
|
4 1.0000000 4
|
|
|
|
Image 5
|
|
|
|
classid probability label
|
|
------- ----------- -----
|
|
5 1.0000000 5
|
|
|
|
Image 6
|
|
|
|
classid probability label
|
|
------- ----------- -----
|
|
6 1.0000000 6
|
|
|
|
Image 7
|
|
|
|
classid probability label
|
|
------- ----------- -----
|
|
7 1.0000000 7
|
|
|
|
Image 8
|
|
|
|
classid probability label
|
|
------- ----------- -----
|
|
8 1.0000000 8
|
|
|
|
Image 9
|
|
|
|
classid probability label
|
|
------- ----------- -----
|
|
9 1.0000000 9
|
|
|
|
|
|
|
|
Deprecation Notice
|
|
##################
|
|
|
|
+--------------------+------------------+
|
|
| Deprecation Begins | June 1, 2020 |
|
|
+====================+==================+
|
|
| Removal Date | December 1, 2020 |
|
|
+--------------------+------------------+
|
|
|
|
See Also
|
|
########
|
|
|
|
- :doc:`Integrate the OpenVINO™ Runtime with Your Application <openvino_docs_OV_UG_Integrate_OV_with_your_application>`
|
|
- :doc:`Using OpenVINO™ Toolkit Samples <openvino_docs_OV_UG_Samples_Overview>`
|
|
- :doc:`Model Optimizer <openvino_docs_MO_DG_Deep_Learning_Model_Optimizer_DevGuide>`
|
|
|
|
@endsphinxdirective
|
|
|