Skip to content

Commit

Permalink
Merge branch 'master' into el_type_mismatch_fix
Browse files Browse the repository at this point in the history
  • Loading branch information
rkazants authored Sep 21, 2023
2 parents 5eca0fc + d90667c commit 69dbcf3
Show file tree
Hide file tree
Showing 115 changed files with 3,207 additions and 603 deletions.
3 changes: 2 additions & 1 deletion .github/dependabot.yml
Original file line number Diff line number Diff line change
Expand Up @@ -154,6 +154,7 @@ updates:
time: "09:00"
timezone: "Asia/Dubai"
assignees:
- "ilyachur"
- "akashchi"
- "mryzhov"
- "ilya-lavrenov"
open-pull-requests-limit: 3
4 changes: 2 additions & 2 deletions .github/workflows/linux_onnxruntime.yml
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ jobs:
INSTALL_DIR: ${{ github.workspace }}/install/openvino
steps:
- name: Clone OpenVINO
uses: actions/checkout@v3
uses: actions/checkout@v4
with:
path: 'openvino'
submodules: 'true'
Expand Down Expand Up @@ -96,7 +96,7 @@ jobs:
#

- name: Get number of CPU cores
uses: SimenB/github-actions-cpu-cores@v1
uses: SimenB/github-actions-cpu-cores@v2
id: cpu-cores

- name: CMake configure
Expand Down
1 change: 1 addition & 0 deletions docs/OV_Runtime_UG/Operations_specifications.md
Original file line number Diff line number Diff line change
Expand Up @@ -126,6 +126,7 @@
MulticlassNonMaxSuppression-9 <openvino_docs_ops_sort_MulticlassNonMaxSuppression_9>
Multiply-1 <openvino_docs_ops_arithmetic_Multiply_1>
Negative-1 <openvino_docs_ops_arithmetic_Negative_1>
NMSRotated-13 <openvino_docs_ops_sort_NMSRotated_13>
NonMaxSuppression-1 <openvino_docs_ops_sort_NonMaxSuppression_1>
NonMaxSuppression-3 <openvino_docs_ops_sort_NonMaxSuppression_3>
NonMaxSuppression-4 <openvino_docs_ops_sort_NonMaxSuppression_4>
Expand Down
33 changes: 5 additions & 28 deletions docs/dev/build_windows.md
Original file line number Diff line number Diff line change
Expand Up @@ -25,29 +25,17 @@ Supported configurations:
```sh
git clone https://github.com/openvinotoolkit/openvino.git
cd openvino
git submodule update --init --recursive
```
(Extra for WoA) To build on Windows on ARM with ARM plugin:
```sh
git clone https://github.com/openvinotoolkit/openvino_contrib.git
cd openvino_contrib
git submodule update --init --recursive
git submodule update --init
```

2. Create build directory:
```sh
mkdir build && cd build
```
3. In the `build` directory, run `cmake` to fetch project dependencies and generate a Visual Studio solution.
3. In the `build` directory, run `cmake` to fetch project dependencies and generate a Visual Studio solution:

On Windows x86 64-bits:
```sh
cmake -G "Visual Studio 16 2019" -DCMAKE_BUILD_TYPE=Release <openvino>
```

On Windows on ARM for ARM64 architecture:
```sh
cmake -G "Visual Studio 16 2019" -DOPENVINO_EXTRA_MODULES=<openvino_contrib>/modules/arm_plugin -DCMAKE_BUILD_TYPE=Release <openvino>
cmake -G "Visual Studio 17 2022" <openvino>
```

> **HINT**: **Generating PDB Files and Debugging Your Build** <br>
Expand All @@ -62,16 +50,8 @@ Supported configurations:

### Additional Build Options

- Internal JIT GEMM implementation is used by default.

- Threading Building Blocks (TBB) is used by default. To build Inference Engine with OpenMP threading, set the `-DTHREADING=OMP` option.

- Required versions of TBB and OpenCV packages are downloaded automatically by the CMake-based script. If you want to use the automatically-downloaded packages but you have already installed TBB or OpenCV packages configured in your environment, you may need to clean the `TBBROOT` and `OpenCV_DIR` environment variables before running the `cmake` command; otherwise they won'tnbe downloaded and the build may fail if incompatible versions were installed.
- If the CMake-based build script can not find and download the OpenCV package that is supported on your platform, or if you want to use a custom build of the OpenCV library, refer to the [Use Custom OpenCV Builds](./cmake_options_for_custom_compilation.md#Building-with-custom-OpenCV) section for details.
- To build the OpenVINO Runtime Python API:
1. First, install all additional packages (e.g., cython and opencv) listed in the file:
1. First, install all additional packages (e.g., cython) listed in the file:
```sh
pip install -r <openvino>\src\bindings\python\src\compatibility\openvino\requirements-dev.txt
```
Expand All @@ -95,15 +75,12 @@ Supported configurations:
pip install build/wheel/openvino-2023.0.0-9612-cp11-cp11-win_arm64.whl
```

- OpenVINO runtime compilation options:
`-DENABLE_OV_ONNX_FRONTEND=ON` enables the building of the ONNX importer.
### Building OpenVINO with Ninja* Build System

```sh
call "C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\VC\Auxiliary\Build\vcvars64.bat"
cmake -G Ninja -Wno-dev -DCMAKE_BUILD_TYPE=Release ..
cmake --build . --config Release
ninja .
```

## See also
Expand Down
3 changes: 3 additions & 0 deletions docs/dev/cmake_options_for_custom_compilation.md
Original file line number Diff line number Diff line change
Expand Up @@ -114,6 +114,9 @@ This document provides description and default values for CMake options that can
* `OFF` is default, because it increases binary size.
* `SELECTIVE_BUILD` enables [[Conditional compilation|ConditionalCompilation]] feature.
* `OFF` is default.
* `ENABLE_MLAS_FOR_CPU` enables MLAS library for CPU plugin
* `ON` is default for x86_64 and AARCH64 platforms
* Affects only OpenVINO CPU plugin

## Building with OpenCV

Expand Down
2 changes: 1 addition & 1 deletion docs/dev/static_libaries.md
Original file line number Diff line number Diff line change
Expand Up @@ -135,7 +135,7 @@ cmake -DCMAKE_TOOLCHAIN_FILE=<openvino source dir>/cmake/toolchains/mt.runtime.w

* The enabled and tested capabilities of OpenVINO Runtime in a static build:
* OpenVINO common runtime - work with `ov::Model`, perform model loading on particular device
* CPU and GNA inference plugins (**GPU and MYRIAD are not enabled**)
* CPU and GNA inference plugins (**GPU is not enabled**)
* MULTI, HETERO, AUTO, and BATCH inference modes
* IR, ONNX, PDPD, and TF frontends to read `ov::Model`
* Static build support for building static libraries only for OpenVINO Runtime libraries. All other third-party prebuilt dependencies remain in the same format:
Expand Down
5 changes: 4 additions & 1 deletion docs/ops/opset.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,14 @@
@sphinxdirective

.. meta::
:description: Check the list of available operation sets fully supported in
:description: Check the list of available operation sets fully supported in
specific versions of OpenVINO™ toolkit.

.. toctree::
:maxdepth: 1
:hidden:

openvino_docs_ops_opset13
openvino_docs_ops_opset12
openvino_docs_ops_opset11
openvino_docs_ops_opset10
Expand All @@ -33,6 +34,8 @@ This topic provides a complete list of available sets of operations supported in

* - OpenVINO™ Version
- Actual Operations Set
* - 2023.2
- :doc:`opset13 <openvino_docs_ops_opset13>`
* - 2023.1
- :doc:`opset12 <openvino_docs_ops_opset12>`
* - 2023.0
Expand Down
199 changes: 199 additions & 0 deletions docs/ops/opset13.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,199 @@
# opset13 {#openvino_docs_ops_opset13}

@sphinxdirective

.. meta::
:description: Explore the examples of operation instances expressed as IR
XML snippets in the opset13 operation set, supported in OpenVINO™
toolkit.

This specification document describes the ``opset13`` operation set supported in OpenVINO™.
Support for each particular operation from the list below depends on the capabilities of an inference plugin
and may vary among different hardware platforms and devices. Examples of operation instances are provided as IR xml
snippets. Such IR is generated by the Model Optimizer. The semantics match corresponding OpenVINO operation classes
declared in ``namespace opset13``.


Table of Contents
##################

* :doc:`Abs <openvino_docs_ops_arithmetic_Abs_1>`
* :doc:`Acos <openvino_docs_ops_arithmetic_Acos_1>`
* :doc:`Acosh <openvino_docs_ops_arithmetic_Acosh_3>`
* :doc:`AdaptiveAvgPool <openvino_docs_ops_pooling_AdaptiveAvgPool_8>`
* :doc:`AdaptiveMaxPool <openvino_docs_ops_pooling_AdaptiveMaxPool_8>`
* :doc:`Add <openvino_docs_ops_arithmetic_Add_1>`
* :doc:`Asin <openvino_docs_ops_arithmetic_Asin_1>`
* :doc:`Asinh <openvino_docs_ops_arithmetic_Asinh_3>`
* :doc:`Assign <openvino_docs_ops_infrastructure_Assign_3>`
* :doc:`Atan <openvino_docs_ops_arithmetic_Atan_1>`
* :doc:`Atanh <openvino_docs_ops_arithmetic_Atanh_3>`
* :doc:`AvgPool <openvino_docs_ops_pooling_AvgPool_1>`
* :doc:`BatchNormInference <openvino_docs_ops_normalization_BatchNormInference_5>`
* :doc:`BatchToSpace <openvino_docs_ops_movement_BatchToSpace_2>`
* :doc:`BinaryConvolution <openvino_docs_ops_convolution_BinaryConvolution_1>`
* :doc:`Broadcast <openvino_docs_ops_movement_Broadcast_3>`
* :doc:`Bucketize <openvino_docs_ops_condition_Bucketize_3>`
* :doc:`CTCGreedyDecoder <openvino_docs_ops_sequence_CTCGreedyDecoder_1>`
* :doc:`CTCGreedyDecoderSeqLen <openvino_docs_ops_sequence_CTCGreedyDecoderSeqLen_6>`
* :doc:`CTCLoss <openvino_docs_ops_sequence_CTCLoss_4>`
* :doc:`Ceiling <openvino_docs_ops_arithmetic_Ceiling_1>`
* :doc:`Clamp <openvino_docs_ops_activation_Clamp_1>`
* :doc:`Concat <openvino_docs_ops_movement_Concat_1>`
* :doc:`Constant <openvino_docs_ops_infrastructure_Constant_1>`
* :doc:`Convert <openvino_docs_ops_type_Convert_1>`
* :doc:`ConvertLike <openvino_docs_ops_type_ConvertLike_1>`
* :doc:`Convolution <openvino_docs_ops_convolution_Convolution_1>`
* :doc:`ConvolutionBackpropData <openvino_docs_ops_convolution_ConvolutionBackpropData_1>`
* :doc:`Cos <openvino_docs_ops_arithmetic_Cos_1>`
* :doc:`Cosh <openvino_docs_ops_arithmetic_Cosh_1>`
* :doc:`CumSum <openvino_docs_ops_arithmetic_CumSum_3>`
* :doc:`DeformableConvolution <openvino_docs_ops_convolution_DeformableConvolution_8>`
* :doc:`DeformablePSROIPooling <openvino_docs_ops_detection_DeformablePSROIPooling_1>`
* :doc:`DepthToSpace <openvino_docs_ops_movement_DepthToSpace_1>`
* :doc:`DetectionOutput <openvino_docs_ops_detection_DetectionOutput_8>`
* :doc:`DFT <openvino_docs_ops_signals_DFT_7>`
* :doc:`Divide <openvino_docs_ops_arithmetic_Divide_1>`
* :doc:`Einsum <openvino_docs_ops_matrix_Einsum_7>`
* :doc:`Elu <openvino_docs_ops_activation_Elu_1>`
* :doc:`EmbeddingBagOffsetsSum <openvino_docs_ops_sparse_EmbeddingBagOffsetsSum_3>`
* :doc:`EmbeddingBagPackedSum <openvino_docs_ops_sparse_EmbeddingBagPackedSum_3>`
* :doc:`EmbeddingSegmentsSum <openvino_docs_ops_sparse_EmbeddingSegmentsSum_3>`
* :doc:`Equal <openvino_docs_ops_comparison_Equal_1>`
* :doc:`Erf <openvino_docs_ops_arithmetic_Erf_1>`
* :doc:`Exp <openvino_docs_ops_activation_Exp_1>`
* :doc:`ExperimentalDetectronDetectionOutput_6 <openvino_docs_ops_detection_ExperimentalDetectronDetectionOutput_6>`
* :doc:`ExperimentalDetectronGenerateProposalsSingleImage_6 <openvino_docs_ops_detection_ExperimentalDetectronGenerateProposalsSingleImage_6>`
* :doc:`ExperimentalDetectronPriorGridGenerator_6 <openvino_docs_ops_detection_ExperimentalDetectronPriorGridGenerator_6>`
* :doc:`ExperimentalDetectronROIFeatureExtractor_6 <openvino_docs_ops_detection_ExperimentalDetectronROIFeatureExtractor_6>`
* :doc:`ExperimentalDetectronTopKROIs_6 <openvino_docs_ops_sort_ExperimentalDetectronTopKROIs_6>`
* :doc:`ExtractImagePatches <openvino_docs_ops_movement_ExtractImagePatches_3>`
* :doc:`Eye <openvino_docs_ops_generation_Eye_9>`
* :doc:`FakeQuantize <openvino_docs_ops_quantization_FakeQuantize_1>`
* :doc:`Floor <openvino_docs_ops_arithmetic_Floor_1>`
* :doc:`FloorMod <openvino_docs_ops_arithmetic_FloorMod_1>`
* :doc:`Gather <openvino_docs_ops_movement_Gather_8>`
* :doc:`GatherElements <openvino_docs_ops_movement_GatherElements_6>`
* :doc:`GatherND <openvino_docs_ops_movement_GatherND_8>`
* :doc:`GatherTree <openvino_docs_ops_movement_GatherTree_1>`
* :doc:`Gelu <openvino_docs_ops_activation_GELU_7>`
* :doc:`GenerateProposals <openvino_docs_ops_detection_GenerateProposals_9>`
* :doc:`Greater <openvino_docs_ops_comparison_Greater_1>`
* :doc:`GreaterEqual <openvino_docs_ops_comparison_GreaterEqual_1>`
* :doc:`GridSample <openvino_docs_ops_image_GridSample_9>`
* :doc:`GRN <openvino_docs_ops_normalization_GRN_1>`
* :doc:`GroupConvolution <openvino_docs_ops_convolution_GroupConvolution_1>`
* :doc:`GroupConvolutionBackpropData <openvino_docs_ops_convolution_GroupConvolutionBackpropData_1>`
* :doc:`GroupNormalization <openvino_docs_ops_normalization_GroupNormalization_12>`
* :doc:`GRUCell <openvino_docs_ops_sequence_GRUCell_3>`
* :doc:`GRUSequence <openvino_docs_ops_sequence_GRUSequence_5>`
* :doc:`HardSigmoid <openvino_docs_ops_activation_HardSigmoid_1>`
* :doc:`HSigmoid <openvino_docs_ops_activation_HSigmoid_5>`
* :doc:`HSwish <openvino_docs_ops_activation_HSwish_4>`
* :doc:`IDFT <openvino_docs_ops_signals_IDFT_7>`
* :doc:`I420toBGR <openvino_docs_ops_image_I420toBGR_8>`
* :doc:`I420toRGB <openvino_docs_ops_image_I420toRGB_8>`
* :doc:`If <openvino_docs_ops_infrastructure_If_8>`
* :doc:`Interpolate <openvino_docs_ops_image_Interpolate_11>`
* :doc:`IRDFT <openvino_docs_ops_signals_IRDFT_9>`
* :doc:`IsInf <openvino_docs_ops_comparison_IsInf_10>`
* :doc:`IsNaN <openvino_docs_ops_comparison_IsNaN_10>`
* :doc:`Less <openvino_docs_ops_comparison_Less_1>`
* :doc:`LessEqual <openvino_docs_ops_comparison_LessEqual_1>`
* :doc:`Log <openvino_docs_ops_arithmetic_Log_1>`
* :doc:`LogicalAnd <openvino_docs_ops_logical_LogicalAnd_1>`
* :doc:`LogicalNot <openvino_docs_ops_logical_LogicalNot_1>`
* :doc:`LogicalOr <openvino_docs_ops_logical_LogicalOr_1>`
* :doc:`LogicalXor <openvino_docs_ops_logical_LogicalXor_1>`
* :doc:`LogSoftmax <openvino_docs_ops_activation_LogSoftmax_5>`
* :doc:`Loop <openvino_docs_ops_infrastructure_Loop_5>`
* :doc:`LRN <openvino_docs_ops_normalization_LRN_1>`
* :doc:`LSTMCell <openvino_docs_ops_sequence_LSTMCell_1>`
* :doc:`LSTMSequence <openvino_docs_ops_sequence_LSTMSequence_1>`
* :doc:`MatMul <openvino_docs_ops_matrix_MatMul_1>`
* :doc:`MatrixNMS <openvino_docs_ops_sort_MatrixNms_8>`
* :doc:`MaxPool <openvino_docs_ops_pooling_MaxPool_8>`
* :doc:`Maximum <openvino_docs_ops_arithmetic_Maximum_1>`
* :doc:`Minimum <openvino_docs_ops_arithmetic_Minimum_1>`
* :doc:`Mish <openvino_docs_ops_activation_Mish_4>`
* :doc:`Mod <openvino_docs_ops_arithmetic_Mod_1>`
* :doc:`MVN <openvino_docs_ops_normalization_MVN_6>`
* :doc:`MulticlassNMS <openvino_docs_ops_sort_MulticlassNonMaxSuppression_9>`
* :doc:`Multiply <openvino_docs_ops_arithmetic_Multiply_1>`
* :doc:`Negative <openvino_docs_ops_arithmetic_Negative_1>`
* :doc:`NMSRotated <openvino_docs_ops_sort_NMSRotated_13>`
* :doc:`NonMaxSuppression <openvino_docs_ops_sort_NonMaxSuppression_9>`
* :doc:`NonZero <openvino_docs_ops_condition_NonZero_3>`
* :doc:`NormalizeL2 <openvino_docs_ops_normalization_NormalizeL2_1>`
* :doc:`NotEqual <openvino_docs_ops_comparison_NotEqual_1>`
* :doc:`NV12toBGR <openvino_docs_ops_image_NV12toBGR_8>`
* :doc:`NV12toRGB <openvino_docs_ops_image_NV12toRGB_8>`
* :doc:`OneHot <openvino_docs_ops_sequence_OneHot_1>`
* :doc:`Pad <openvino_docs_ops_movement_Pad_12>`
* :doc:`Parameter <openvino_docs_ops_infrastructure_Parameter_1>`
* :doc:`Power <openvino_docs_ops_arithmetic_Power_1>`
* :doc:`PReLU <openvino_docs_ops_activation_PReLU_1>`
* :doc:`PriorBoxClustered <openvino_docs_ops_detection_PriorBoxClustered_1>`
* :doc:`PriorBox <openvino_docs_ops_detection_PriorBox_8>`
* :doc:`Proposal <openvino_docs_ops_detection_Proposal_4>`
* :doc:`PSROIPooling <openvino_docs_ops_detection_PSROIPooling_1>`
* :doc:`RandomUniform <openvino_docs_ops_generation_RandomUniform_8>`
* :doc:`Range <openvino_docs_ops_generation_Range_4>`
* :doc:`RDFT <openvino_docs_ops_signals_RDFT_9>`
* :doc:`ReLU <openvino_docs_ops_activation_ReLU_1>`
* :doc:`ReadValue <openvino_docs_ops_infrastructure_ReadValue_3>`
* :doc:`ReduceL1 <openvino_docs_ops_reduction_ReduceL1_4>`
* :doc:`ReduceL2 <openvino_docs_ops_reduction_ReduceL2_4>`
* :doc:`ReduceLogicalAnd <openvino_docs_ops_reduction_ReduceLogicalAnd_1>`
* :doc:`ReduceLogicalOr <openvino_docs_ops_reduction_ReduceLogicalOr_1>`
* :doc:`ReduceMax <openvino_docs_ops_reduction_ReduceMax_1>`
* :doc:`ReduceMean <openvino_docs_ops_reduction_ReduceMean_1>`
* :doc:`ReduceMin <openvino_docs_ops_reduction_ReduceMin_1>`
* :doc:`ReduceProd <openvino_docs_ops_reduction_ReduceProd_1>`
* :doc:`ReduceSum <openvino_docs_ops_reduction_ReduceSum_1>`
* :doc:`RegionYolo <openvino_docs_ops_detection_RegionYolo_1>`
* :doc:`ReorgYolo <openvino_docs_ops_detection_ReorgYolo_1>`
* :doc:`Reshape <openvino_docs_ops_shape_Reshape_1>`
* :doc:`Result <openvino_docs_ops_infrastructure_Result_1>`
* :doc:`ReverseSequence <openvino_docs_ops_movement_ReverseSequence_1>`
* :doc:`RNNCell <openvino_docs_ops_sequence_RNNCell_3>`
* :doc:`RNNSequence <openvino_docs_ops_sequence_RNNSequence_5>`
* :doc:`ROIAlign <openvino_docs_ops_detection_ROIAlign_9>`
* :doc:`ROIPooling <openvino_docs_ops_detection_ROIPooling_1>`
* :doc:`Roll <openvino_docs_ops_movement_Roll_7>`
* :doc:`Round <openvino_docs_ops_arithmetic_Round_5>`
* :doc:`ScatterElementsUpdate <openvino_docs_ops_movement_ScatterElementsUpdate_12>`
* :doc:`ScatterNDUpdate <openvino_docs_ops_movement_ScatterNDUpdate_3>`
* :doc:`ScatterUpdate <openvino_docs_ops_movement_ScatterUpdate_3>`
* :doc:`Select <openvino_docs_ops_condition_Select_1>`
* :doc:`Selu <openvino_docs_ops_activation_Selu_1>`
* :doc:`ShapeOf <openvino_docs_ops_shape_ShapeOf_3>`
* :doc:`ShuffleChannels <openvino_docs_ops_movement_ShuffleChannels_1>`
* :doc:`Sigmoid <openvino_docs_ops_activation_Sigmoid_1>`
* :doc:`Sign <openvino_docs_ops_arithmetic_Sign_1>`
* :doc:`Sin <openvino_docs_ops_arithmetic_Sin_1>`
* :doc:`Sinh <openvino_docs_ops_arithmetic_Sinh_1>`
* :doc:`Slice <openvino_docs_ops_movement_Slice_8>`
* :doc:`SoftMax <openvino_docs_ops_activation_SoftMax_8>`
* :doc:`SoftPlus <openvino_docs_ops_activation_SoftPlus_4>`
* :doc:`SoftSign <openvino_docs_ops_activation_SoftSign_9>`
* :doc:`SpaceToBatch <openvino_docs_ops_movement_SpaceToBatch_2>`
* :doc:`SpaceToDepth <openvino_docs_ops_movement_SpaceToDepth_1>`
* :doc:`Split <openvino_docs_ops_movement_Split_1>`
* :doc:`Sqrt <openvino_docs_ops_arithmetic_Sqrt_1>`
* :doc:`SquaredDifference <openvino_docs_ops_arithmetic_SquaredDifference_1>`
* :doc:`Squeeze <openvino_docs_ops_shape_Squeeze_1>`
* :doc:`StridedSlice <openvino_docs_ops_movement_StridedSlice_1>`
* :doc:`Subtract <openvino_docs_ops_arithmetic_Subtract_1>`
* :doc:`Swish <openvino_docs_ops_activation_Swish_4>`
* :doc:`Tan <openvino_docs_ops_arithmetic_Tan_1>`
* :doc:`Tanh <openvino_docs_ops_arithmetic_Tanh_1>`
* :doc:`TensorIterator <openvino_docs_ops_infrastructure_TensorIterator_1>`
* :doc:`Tile <openvino_docs_ops_movement_Tile_1>`
* :doc:`TopK <openvino_docs_ops_sort_TopK_11>`
* :doc:`Transpose <openvino_docs_ops_movement_Transpose_1>`
* :doc:`Unique <openvino_docs_ops_movement_Unique_10>`
* :doc:`Unsqueeze <openvino_docs_ops_shape_Unsqueeze_1>`
* :doc:`VariadicSplit <openvino_docs_ops_movement_VariadicSplit_1>`

@endsphinxdirective
Loading

0 comments on commit 69dbcf3

Please sign in to comment.