# Model Creation C++ Sample {#openvino_inference_engine_samples_model_creation_sample_README} This sample demonstrates how to execute an synchronous inference using [model](../../../docs/OV_Runtime_UG/model_representation.md) 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`, `ov::Shape::size`, `ov::shape_size`| Operate with shape | | Tensor Operations | `ov::Tensor::get_byte_size`, `ov::Tensor:data` | Get tensor byte size and its 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`, `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` | Used to construct an OpenVINO model | Basic OpenVINO™ Runtime API is covered by [Hello Classification C++ sample](../hello_classification/README.md). | Options | Values | | :--- | :--- | | Validated Models | LeNet | | Model Format | model weights file (\*.bin) | | Validated images | single-channel `MNIST ubyte` images | | Supported devices | [All](../../../docs/OV_Runtime_UG/supported_plugins/Supported_Devices.md) | | Other language realization | [Python](../../../samples/python/model_creation_sample/README.md) | ## How It Works 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_your_application.md) section of "Integrate OpenVINO™ Runtime with Your Application" guide. ## Building To build the sample, please use instructions available at [Build the Sample Applications](../../../docs/OV_Runtime_UG/Samples_Overview.md) section in OpenVINO™ Toolkit Samples guide. ## Running ``` model_creation_sample ``` > **NOTES**: > > - 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 [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\*. You can do inference of an image using a pre-trained model on a GPU using the following command: ``` 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. ``` [ INFO ] OpenVINO Runtime version ......... [ INFO ] Build ........... [ INFO ] [ INFO ] Device info: [ INFO ] GPU [ INFO ] Intel GPU plugin version ......... [ INFO ] 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 - [Integrate the OpenVINO™ Runtime with Your Application](../../../docs/OV_Runtime_UG/integrate_with_your_application.md) - [Using OpenVINO™ Toolkit Samples](../../../docs/OV_Runtime_UG/Samples_Overview.md) - [Model Optimizer](../../../docs/MO_DG/Deep_Learning_Model_Optimizer_DevGuide.md)