* Feature/azaytsev/cldnn doc fixes (#4600) * Legal fixes, removed the Generating docs section * Removed info regarding generating docs Co-authored-by: Trawinski, Dariusz <dariusz.trawinski@intel.com> * Feature/azaytsev/gna model link fixes (#4599) * Added info on DockerHub CI Framework * Feature/azaytsev/change layout (#3295) * Changes according to feedback comments * Replaced @ref's with html links * Fixed links, added a title page for installing from repos and images, fixed formatting issues * Added links * minor fix * Added DL Streamer to the list of components installed by default * Link fixes * Link fixes * ovms doc fix (#2988) * added OpenVINO Model Server * ovms doc fixes Co-authored-by: Trawinski, Dariusz <dariusz.trawinski@intel.com> * Updated openvino_docs.xml * Link Fixes Co-authored-by: Trawinski, Dariusz <dariusz.trawinski@intel.com> * Fix for broken CC in CPU plugin (#4595) * Azure CI: Add "ref: releases/2021/3" * Fixed clone rt info (#4597) * [.ci/azure] Enable CC build (#4619) * Formula fix (#4624) * Fixed transformation to pull constants into Loop body (cherry-pick of PR 4591) (#4607) * Cherry-pick of PR 4591 * Fixed typo * Moved a check into the parameter_unchanged_after_iteration function * Fixed KW hits (#4638) * [CPU] Supported ANY layout for inputs in inferRequest (#4621) * [.ci/azure] Add windows_conditional_compilation.yml (#4648) (#4655) * Fix for MKLDNN constant layers execution (#4642) * Fix for MKLDNN constant layers execution * Single mkldnn::engine for all MKLDNN graphs * Add workaround for control edges to support TF 2.4 RNN (#4634) Signed-off-by: Roman Kazantsev <roman.kazantsev@intel.com> * Corrected PyYAML dependency (#4598) (#4620) 5.4.2 is absent on PyPI * [CPU] Statically analyzed issues. (#4637) * Docs api (#4657) * Updated API changes document * Comment for CVS-49440 * Add documentation on how to convert QuartzNet model (#4664) * Add documentation on how to convert QuartzNet model (#4422) * Add documentation on how to convert QuartzNet model * Apply review feedback * Small fix * Apply review feedback * Apply suggestions from code review Co-authored-by: Anastasiya Ageeva <anastasiya.ageeva@intel.com> Co-authored-by: Anastasiya Ageeva <anastasiya.ageeva@intel.com> * Add reference to file Co-authored-by: Anastasiya Ageeva <anastasiya.ageeva@intel.com> * Fixed bug in assign elimination transformation. (#4644) * [doc] Updated PyPI support OSes (#4643) (#4662) * [doc] Updated PyPI support OSes (#4643) * Updated PyPI support OSes * Added python versions for win and mac * Update pypi-openvino-dev.md * Update pypi-openvino-dev.md * Update pypi-openvino-rt.md * Update pypi-openvino-dev.md Co-authored-by: Andrey Zaytsev <andrey.zaytsev@intel.com> * [IE][VPU]: Fix empty output of CTCGreedyDecoderSeqLen (#4653) * Allow the second output of CTCGreedyDecoderSeqLen to be nullptr in cases when it is not used but calculated in the Myriad plugin. In this case, parse the second output as FakeData * It is a cherry-pick of #4652 * Update the firmware to release version * [VPU] WA for Segmentation fault on dlclose() issue (#4645) * Document TensorFlow 2* Update: Layers Support and Remove Beta Status (#4474) (#4711) * Document TensorFlow 2* Update: Layers Support and Remove Beta Status Signed-off-by: Roman Kazantsev <roman.kazantsev@intel.com> * Update documentation based on latest test results and feedback Signed-off-by: Roman Kazantsev <roman.kazantsev@intel.com> * Remove ConvLSTM2D from supported layers list Signed-off-by: Roman Kazantsev <roman.kazantsev@intel.com> * Document Dot layer without limitation Signed-off-by: Roman Kazantsev <roman.kazantsev@intel.com> * Address feedback upon DenseFeatures and RNN operations Signed-off-by: Roman Kazantsev <roman.kazantsev@intel.com> * Do a grammar correction Signed-off-by: Roman Kazantsev <roman.kazantsev@intel.com> * Do a grammar correction based on feedback Signed-off-by: Roman Kazantsev <roman.kazantsev@intel.com> * Updated nGraph custom op documentation (#4604) * Updated nGraph custom op documentation * Fixed comments * [IE CLDNN] Fix missing variable initializations and types (#4669) * Fix NormalizeL2 creation in QueryNetwork (cherry pick from master PR 4310) (#4651) * Updated documentation about the supported YOLOv3 model from ONNX (#4722) (#4726) * Restored folded Operations for QueryNetwork (#4685) * Restored folded Operations for QueryNetwork * Fixed comment * Add unfolded constant operations to supported layers map * Add STN to list of supported models (#4728) * Fix python API for Loop/TensorIterator/Assign/ReadValue operations * Catch std::except in fuzz tests (#4695) Fuzz tests must catch all expected exceptions from IE. IE is using C++ std library which may raise standard exceptions which IE pass through. * Docs update (#4626) * Updated latency case desc to cover multi-socket machines * updated opt guide a bit * avoiding '#' which is interpreted as ref * Update CPU.md * Update docs/optimization_guide/dldt_optimization_guide.md Co-authored-by: Alina Alborova <alina.alborova@intel.com> * Update docs/optimization_guide/dldt_optimization_guide.md Co-authored-by: Alina Alborova <alina.alborova@intel.com> * Update docs/optimization_guide/dldt_optimization_guide.md Co-authored-by: Alina Alborova <alina.alborova@intel.com> * Update docs/optimization_guide/dldt_optimization_guide.md Co-authored-by: Alina Alborova <alina.alborova@intel.com> * Update docs/optimization_guide/dldt_optimization_guide.md Co-authored-by: Alina Alborova <alina.alborova@intel.com> Co-authored-by: Alina Alborova <alina.alborova@intel.com> * Blocked dims hwc 2021/3 (#4729) * Fix for BlockedDims * Added test for HWC layout * [GNA] Update documentation regarding splits and concatenations support (#4740) * Added mo.py to wheel packages (#4731) * Inserted a disclaimer (#4760) * Fixed some klockwork issues in C API samples (#4767) * Feature/vpu doc fixes 2021 3 (#4635) * Documentation fixes and updates for VPU * minor correction * minor correction * Fixed links * updated supported layers list for vpu * [DOCS] added iname/oname (#4735) * [VPU] Limit dlclose() WA to be used for Ubuntu only (#4806) * Fixed wrong link (#4817) * MKLDNN weights cache key calculation algorithm changed (#4790) * Updated PIP install instructions (#4821) * Document YOLACT support (#4749) * Document YOLACT support * Add preprocessing section * Apply suggestions from code review Co-authored-by: Tatiana Savina <tatiana.savina@intel.com> Co-authored-by: Tatiana Savina <tatiana.savina@intel.com> * Add documentation on how to convert F3Net model (#4863) * Add instruction for F3Net model pytorch->onnx conversion * Fix style * Fixed dead lock in telemetry (#4873) * Fixed dead lock in telemetry * Refactored TelemetrySender.send function * Refactored send function implementation to avoid deadlocks * Unit tests for telemetry sender function * Added legal header * avladimi/cvs-31369: Documented packages content to YUM/APT IGs (#4839) * Documented runtime/dev packages content * Minor formatting fixes * Implemented review comments * Update installing-openvino-apt.md Co-authored-by: Andrey Zaytsev <andrey.zaytsev@intel.com> * [DOC] Low-Precision 8-bit Integer Inference (#4834) * [DOC] Low-Precision 8-bit Integer Inference * [DOC] Low-Precision 8-bit Integer Inference: comment fixes * Update docs/IE_DG/Int8Inference.md Co-authored-by: Anastasiya Ageeva <anastasiya.ageeva@intel.com> * Update docs/IE_DG/Int8Inference.md Co-authored-by: Anastasiya Ageeva <anastasiya.ageeva@intel.com> * Update docs/IE_DG/Int8Inference.md Co-authored-by: Anastasiya Ageeva <anastasiya.ageeva@intel.com> * Update docs/IE_DG/Int8Inference.md Co-authored-by: Anastasiya Ageeva <anastasiya.ageeva@intel.com> * Update docs/IE_DG/Int8Inference.md Co-authored-by: Anastasiya Ageeva <anastasiya.ageeva@intel.com> * Update docs/IE_DG/Int8Inference.md Co-authored-by: Anastasiya Ageeva <anastasiya.ageeva@intel.com> * Update docs/IE_DG/Int8Inference.md Co-authored-by: Anastasiya Ageeva <anastasiya.ageeva@intel.com> * Update docs/IE_DG/Int8Inference.md Co-authored-by: Anastasiya Ageeva <anastasiya.ageeva@intel.com> * Update docs/IE_DG/Int8Inference.md Co-authored-by: Anastasiya Ageeva <anastasiya.ageeva@intel.com> * Update docs/IE_DG/Int8Inference.md Co-authored-by: Anastasiya Ageeva <anastasiya.ageeva@intel.com> * [DOC] LPT comments fix * [DOC] LPT comments fix: absolute links are updated to relative * Update Int8Inference.md * Update Int8Inference.md Co-authored-by: Anastasiya Ageeva <anastasiya.ageeva@intel.com> Co-authored-by: Andrey Zaytsev <andrey.zaytsev@intel.com> * Avladimi/cherry pick from master (#4892) * Fixed CVS-48061 * Reviewed and edited the Customization instructions * Fixed broken links in the TOC * Fixed links * Fixed formatting in the IG for Raspberry * Feature/benchmarks 2021 3 (#4910) * added new topics, changed the intro text * updated * Updates * Updates * Updates * Updates * Updates * Added yolo-v4-tf and unet-camvid-onnx graphs * Date for pricing is updated to March 15th * Feature/omz link changes (#4911) * Changed labels for demos and model downloader * Changed links to models and tools * Changed links to models and tools * Changed links to demos * [cherry-pick] Extensibility docs review (#4915) * Feature/ovsa docs 2021 3 (#4914) * Updated to 2021-3, fixed formatting issues * Fixed formatting issues * Fixed formatting issues * Fixed formatting issues * Update ovsa_get_started.md * Clarification of Low Latency Transformation and State API documentation (#4877) * Assign/ReadValue, LowLatency and StateAPI clarifications * Apply suggestions from code review: spelling mistakes Co-authored-by: Anastasiya Ageeva <anastasiya.ageeva@intel.com> * fixed wording * cherry-pick missing commit to release branch: low latency documentation * Resolve review remarks Co-authored-by: Anastasiya Ageeva <anastasiya.ageeva@intel.com> Co-authored-by: Svetlana Dolinina <svetlana.a.dolinina@intel.com> * DevCloud call outs (#4904) * [README.md] change latest release to 2021.3 * [49342] Update recommended CMake version on install guide in documentation (#4763) * Inserted a disclaimer * Another disclaimer * Update installing-openvino-windows.md * Update installing-openvino-windows.md * Update installing-openvino-windows.md * Feature/doc fixes 2021 3 (#4971) * Made changes for CVS-50424 * Changes for CVS-49349 * Minor change for CVS-49349 * Changes for CVS-49343 * Cherry-pick #PR4254 * Replaced /opt/intel/openvino/ with /opt/intel/openvino_2021/ as the default target directory * (CVS-50786) Added a new section Reference IMplementations to keep Speech Library and Speech Recognition Demos * Doc fixes * Replaced links to inference_engine_intro.md with Deep_Learning_Inference_Engine_DevGuide.md, fixed links * Fixed link * Fixes * Fixes * Reemoved Intel® Xeon® processor E family * fixes for graphs (#5057) * compression.configs.hardware config to package_data (#5066) * update OpenCV version to 4.5.2 (#5069) * update OpenCV version to 4.5.2 * Enable mo.front.common.extractors module (#5038) * Enable mo.front.common.extractors module (#5018) * Enable mo.front.common.extractors module * Update package_BOM.txt * Test MO wheel content * fix doc iframe issue - 2021.3 (#5090) * wrap with htmlonly * wrap with htmlonly * Add specification for ExperimentalDetectron* oprations (#5128) * Feature/benchmarks 2021 3 ehl (#5191) * Added EHL config * Updated graphs * improve table formatting * Wrap <iframe> tag with \htmlonly \endhtmlonly to avoid build errors * Updated graphs * Fixed links to TDP and Price for 8380 * Add PyTorch section to the documentation (#4972) * Add PyTorch section to the documentation * Apply review feedback * Remove section about loop * Apply review feedback * Apply review feedback * Apply review feedback * doc: add Red Hat docker registry (#5184) (#5253) * Incorporate changes in master Co-authored-by: Trawinski, Dariusz <dariusz.trawinski@intel.com> Co-authored-by: Vladislav Volkov <vladislav.volkov@intel.com> Co-authored-by: azhogov <alexander.zhogov@intel.com> Co-authored-by: Ilya Churaev <ilya.churaev@intel.com> Co-authored-by: Alina Kladieva <alina.kladieva@intel.com> Co-authored-by: Evgeny Lazarev <evgeny.lazarev@intel.com> Co-authored-by: Gorokhov Dmitriy <dmitry.gorokhov@intel.com> Co-authored-by: Roman Kazantsev <roman.kazantsev@intel.com> Co-authored-by: Mikhail Ryzhov <mikhail.ryzhov@intel.com> Co-authored-by: Nikolay Shchegolev <nikolay.shchegolev@intel.com> Co-authored-by: Ilya Lavrenov <ilya.lavrenov@intel.com> Co-authored-by: Maxim Vafin <maxim.vafin@intel.com> Co-authored-by: Anastasiya Ageeva <anastasiya.ageeva@intel.com> Co-authored-by: Anastasia Popova <anastasia.popova@intel.com> Co-authored-by: Maksim Doronin <maksim.doronin@intel.com> Co-authored-by: Andrew Bakalin <andrew.bakalin@intel.com> Co-authored-by: Mikhail Letavin <mikhail.letavin@intel.com> Co-authored-by: Anton Chetverikov <Anton.Chetverikov@intel.com> Co-authored-by: Ivan Tikhonov <ivan.tikhonov@intel.com> Co-authored-by: Andrey Somsikov <andrey.somsikov@intel.com> Co-authored-by: Maxim Shevtsov <maxim.y.shevtsov@intel.com> Co-authored-by: Alina Alborova <alina.alborova@intel.com> Co-authored-by: Elizaveta Lobanova <elizaveta.lobanova@intel.com> Co-authored-by: Andrey Dmitriev <andrey.dmitriev@intel.com> Co-authored-by: Helena Kloosterman <helena.kloosterman@intel.com> Co-authored-by: Tatiana Savina <tatiana.savina@intel.com> Co-authored-by: Edward Shogulin <edward.shogulin@intel.com> Co-authored-by: Svetlana Dolinina <svetlana.a.dolinina@intel.com> Co-authored-by: Alexey Suhov <alexey.suhov@intel.com> Co-authored-by: Sergey Lyubimtsev <sergey.lyubimtsev@intel.com> Co-authored-by: Dmitry Kurtaev <dmitry.kurtaev+github@gmail.com> Co-authored-by: Nikolay Tyukaev <nikolay.tyukaev@intel.com> Co-authored-by: Kate Generalova <kate.generalova@intel.com>
7.7 KiB
Using Shape Inference
OpenVINO™ provides the following methods for runtime model reshaping:
- Set a new input shape with the
InferenceEngine::CNNNetwork::reshapemethod.
TheInferenceEngine::CNNNetwork::reshapemethod updates input shapes and propagates them down to the outputs of the model through all intermediate layers.
NOTES:
- Starting with the 2021.1 release, the Model Optimizer converts topologies keeping shape-calculating sub-graphs by default, which enables correct shape propagation during reshaping in most cases.
- Older versions of IRs are not guaranteed to reshape successfully. Please regenerate them with the Model Optimizer of the latest version of OpenVINO™.
- If an ONNX model does not have a fully defined input shape and the model was imported with the ONNX importer, reshape the model before loading it to the plugin.
-
Set a new batch dimension value with the
InferenceEngine::CNNNetwork::setBatchSizemethod.
The meaning of a model batch may vary depending on the model design. This method does not deduce batch placement for inputs from the model architecture. It assumes that the batch is placed at the zero index in the shape for all inputs and uses theInferenceEngine::CNNNetwork::reshapemethod to propagate updated shapes through the model.The method transforms the model before a new shape propagation to relax a hard-coded batch dimension in the model, if any.
Use
InferenceEngine::CNNNetwork::reshapeinstead ofInferenceEngine::CNNNetwork::setBatchSizeto set new input shapes for the model in case the model has:- Multiple inputs with different zero-index dimension meanings
- Input without a batch dimension
- 0D, 1D, or 3D shape
The
InferenceEngine::CNNNetwork::setBatchSizemethod is a high-level API method that wraps theInferenceEngine::CNNNetwork::reshapemethod call and works for trivial models from the batch placement standpoint. UseInferenceEngine::CNNNetwork::reshapefor other models.Using the
InferenceEngine::CNNNetwork::setBatchSizemethod for models with a non-zero index batch placement or for models with inputs that do not have a batch dimension may lead to undefined behaviour.
You can change input shapes multiple times using the InferenceEngine::CNNNetwork::reshape and InferenceEngine::CNNNetwork::setBatchSize methods in any order.
If a model has a hard-coded batch dimension, use InferenceEngine::CNNNetwork::setBatchSize first to change the batch, then call InferenceEngine::CNNNetwork::reshape to update other dimensions, if needed.
Inference Engine takes three kinds of a model description as an input, which are converted into an InferenceEngine::CNNNetwork object:
- Intermediate Representation (IR) through
InferenceEngine::Core::ReadNetwork - ONNX model through
InferenceEngine::Core::ReadNetwork - nGraph::Function through the constructor of
InferenceEngine::CNNNetwork
InferenceEngine::CNNNetwork keeps an ngraph::Function object with the model description internally.
The object should have fully defined input shapes to be successfully loaded to the Inference Engine plugins.
To resolve undefined input dimensions of a model, call the CNNNetwork::reshape method providing new input shapes before loading to the Inference Engine plugin.
Run the following code right after InferenceEngine::CNNNetwork creation to explicitly check for model input names and shapes:
CNNNetwork network = ... // read IR / ONNX model or create from nGraph::Function explicitly
const auto parameters = network.getFunction()->get_parameters();
for (const auto & parameter : parameters) {
std::cout << "name: " << parameter->get_friendly_name() << " shape: " << parameter->get_partial_shape() << std::endl;
if (parameter->get_partial_shape().is_dynamic())
std::cout << "ATTENTION: Input shape is not fully defined. Use the CNNNetwork::reshape method to resolve it." << std::endl;
}
To feed input data of a shape that is different from the model input shape, reshape the model first.
Once the input shape of InferenceEngine::CNNNetwork is set, call the InferenceEngine::Core::LoadNetwork method to get an InferenceEngine::ExecutableNetwork object for inference with updated shapes.
There are other approaches to reshape the model during the stage of IR generation or nGraph::Function creation.
Practically, some models are not ready to be reshaped. In this case, a new input shape cannot be set with the Model Optimizer or the InferenceEngine::CNNNetwork::reshape method.
Troubleshooting Reshape Errors
Operation semantics may impose restrictions on input shapes of the operation. Shape collision during shape propagation may be a sign that a new shape does not satisfy the restrictions. Changing the model input shape may result in intermediate operations shape collision.
Examples of such operations:
- Reshape operation with a hard-coded output shape value
- MatMul operation with the
Constsecond input cannot be resized by spatial dimensions due to operation semantics
Model structure and logic should not change significantly after model reshaping.
-
The Global Pooling operation is commonly used to reduce output feature map of classification models output. Having the input of the shape [N, C, H, W], Global Pooling returns the output of the shape [N, C, 1, 1]. Model architects usually express Global Pooling with the help of the
Poolingoperation with the fixed kernel size [H, W]. During spatial reshape, having the input of the shape [N, C, H1, W1], Pooling with the fixed kernel size [H, W] returns the output of the shape [N, C, H2, W2], where H2 and W2 are commonly not equal to1. It breaks the classification model structure. For example, publicly available Inception family models from TensorFlow* have this issue. -
Changing the model input shape may significantly affect its accuracy. For example, Object Detection models from TensorFlow have resizing restrictions by design. To keep the model valid after the reshape, choose a new input shape that satisfies conditions listed in the
pipeline.configfile. For details, refer to the Tensorflow Object Detection API models resizing techniques.
Usage of Reshape Method
The primary method of the feature is InferenceEngine::CNNNetwork::reshape.
It gets new input shapes and propagates it from input to output for all intermediates layers of the given network.
The method takes InferenceEngine::ICNNNetwork::InputShapes - a map of pairs: name of input data and its dimension.
The algorithm for resizing network is the following:
-
Collect the map of input names and shapes from Intermediate Representation (IR) using helper method
InferenceEngine::CNNNetwork::getInputShapes -
Set new input shapes
-
Call reshape
Here is a code example:
@snippet snippets/ShapeInference.cpp part0
Shape Inference feature is used in [Smart Classroom Demo](@ref omz_demos_smart_classroom_demo_cpp).
Extensibility
Inference Engine provides a special mechanism that allows to add the support of shape inference for custom operations. This mechanism is described in the Extensibility documentation