Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Specification] MaxPool-14 and AvgPool-14 - new ceiling mode CEIL_TORCH #22930

Merged
merged 19 commits into from
Mar 18, 2024
Merged
Show file tree
Hide file tree
Changes from 12 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ Table of Contents
* :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:`AvgPool <openvino_docs_ops_pooling_AvgPool_14>`
* :doc:`BatchNormInference <openvino_docs_ops_normalization_BatchNormInference_5>`
* :doc:`BatchToSpace <openvino_docs_ops_movement_BatchToSpace_2>`
* :doc:`BinaryConvolution <openvino_docs_ops_convolution_BinaryConvolution_1>`
Expand Down Expand Up @@ -120,7 +120,7 @@ Table of Contents
* :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:`MaxPool <openvino_docs_ops_pooling_MaxPool_14>`
* :doc:`Maximum <openvino_docs_ops_arithmetic_Maximum_1>`
* :doc:`Minimum <openvino_docs_ops_arithmetic_Minimum_1>`
* :doc:`Mish <openvino_docs_ops_activation_Mish_4>`
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ Operation Specifications
Atan-1 <openvino_docs_ops_arithmetic_Atan_1>
Atanh-3 <openvino_docs_ops_arithmetic_Atanh_3>
AvgPool-1 <openvino_docs_ops_pooling_AvgPool_1>
AvgPool-14 <openvino_docs_ops_pooling_AvgPool_14>
BatchNormInference-1 <openvino_docs_ops_normalization_BatchNormInference_1>
BatchNormInference-5 <openvino_docs_ops_normalization_BatchNormInference_5>
BatchToSpace-2 <openvino_docs_ops_movement_BatchToSpace_2>
Expand Down Expand Up @@ -127,6 +128,7 @@ Operation Specifications
MatrixNms-8 <openvino_docs_ops_sort_MatrixNms_8>
MaxPool-1 <openvino_docs_ops_pooling_MaxPool_1>
MaxPool-8 <openvino_docs_ops_pooling_MaxPool_8>
MaxPool-14 <openvino_docs_ops_pooling_MaxPool_14>
Maximum-1 <openvino_docs_ops_arithmetic_Maximum_1>
Minimum-1 <openvino_docs_ops_arithmetic_Minimum_1>
Mish-4 <openvino_docs_ops_activation_Mish_4>
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,201 @@
.. {#openvino_docs_ops_pooling_AvgPool_14}

AvgPool
=======


.. meta::
:description: Learn about AvgPool-14 - a pooling operation, which can
be performed on a 3D, 4D or 5D input tensor.

**Versioned name**: *AvgPool-14*

**Category**: *Pooling*

**Short description**: Performs the average pooling operation on input.

**Detailed description**: `Reference <http://cs231n.github.io/convolutional-networks/#pool>`__. Average Pool is a pooling operation that performs down-sampling by dividing the input into pooling regions of size specified by kernel attribute and computing the average values of each region.

**Attributes**: *Pooling* attributes are specified in the ``data`` node, which is a child of the layer node.

* *strides*

* **Description**: *strides* is a distance (in pixels) to slide the window on the feature map over the (z, y, x) axes for 3D poolings and (y, x) axes for 2D poolings. For example, *strides* equal "4,2,1" means sliding the window 4 pixel at a time over depth dimension, 2 over height dimension and 1 over width dimension.
* **Range of values**: integer values starting from 0
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

How does it slide when it's zero?

* **Type**: int[]
* **Required**: *yes*

* *pads_begin*

* **Description**: *pads_begin* is a number of pixels to add to the beginning along each axis. For example, *pads_begin* equal "1,2" means adding 1 pixel to the top of the input and 2 to the left of the input.
* **Range of values**: integer values starting from 0
* **Type**: int[]
* **Required**: *yes*
* **Note**: the attribute is ignored when *auto_pad* attribute is specified.

* *pads_end*

* **Description**: *pads_end* is a number of pixels to add to the ending along each axis. For example, *pads_end* equal "1,2" means adding 1 pixel to the bottom of the input and 2 to the right of the input.
* **Range of values**: integer values starting from 0
* **Type**: int[]
* **Required**: *yes*
* **Note**: the attribute is ignored when *auto_pad* attribute is specified.

* *kernel*

* **Description**: *kernel* is a size of each filter. For example, *kernel* equal (2, 3) means that each filter has height equal to 2 and width equal to 3.
* **Range of values**: integer values starting from 1
* **Type**: int[]
* **Required**: *yes*

* *exclude-pad*

* **Description**: *exclude-pad* is a type of pooling strategy for values in the padding area. For example, if *exclude-pad* is "true", then zero-values that came from padding are not included in averaging calculation.
* **Range of values**: true or false
* **Type**: boolean
* **Required**: *yes*

* *rounding_type*

* **Description**: *rounding_type* is a type of rounding to be applied. *ceil_torch* does not allow the last pooling to start in the padding area.
* **Range of values**:
* *floor*
* *ceil*
* *ceil_torch*
* **Type**: string
* **Default value**: *floor*
* **Required**: *no*

* *auto_pad*

* **Description**: *auto_pad* how the padding is calculated. Possible values:

* *explicit*: use explicit padding values from `pads_begin` and `pads_end`.
* *same_upper (same_lower)* the input is padded to match the output size. In case of odd padding value an extra padding is added at the end (at the beginning).
* *valid* - do not use padding.
* **Type**: string
* **Default value**: *explicit*
* **Required**: *no*
* **Note**: *pads_begin* and *pads_end* attributes are ignored when *auto_pad* is specified.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
* **Note**: *pads_begin* and *pads_end* attributes are ignored when *auto_pad* is specified.
* **Note**: *pads_begin* and *pads_end* attributes are ignored when *auto_pad* is not equal to explicit.


**Input**:

* **1**: 3D, 4D or 5D input tensor. Input shape can be either ``[N, C, H]``, ``[N, C, H, W]`` or ``[N, C, H, W, D]``. **Required.**

**Output**:

* **1**: The output shape is ``[N, C, H_out]``, ``[N, C, H_out, W_out]`` or ``[N, C, H_out, W_out, D_out]``. Output shape calculation rules and examples can be found in :doc:`Pooling Operators shape inference rules <openvino_docs_pooling_shape_rules>`.

**Types**

* *T*: floating point or integer type.

* *T_IND*: ``int64`` or ``int32``.


**Examples**

.. code-block:: xml
:force:

<layer ... type="AvgPool" ... >
<data auto_pad="same_upper" exclude-pad="true" kernel="2,2" pads_begin="0,0" pads_end="1,1" strides="2,2"/>
<input>
<port id="0">
<dim>1</dim>
<dim>3</dim>
<dim>32</dim>
<dim>32</dim>
</port>
</input>
<output>
<port id="1">
<dim>1</dim>
<dim>3</dim>
<dim>32</dim>
<dim>32</dim>
</port>
</output>
</layer>

<layer ... type="AvgPool" ... >
<data auto_pad="same_upper" exclude-pad="false" kernel="5,5" pads_begin="0,0" pads_end="1,1" strides="2,2"/>
<input>
<port id="0">
<dim>1</dim>
<dim>3</dim>
<dim>32</dim>
<dim>32</dim>
</port>
</input>
<output>
<port id="1">
<dim>1</dim>
<dim>3</dim>
<dim>32</dim>
<dim>32</dim>
</port>
</output>
</layer>

<layer ... type="AvgPool" ... >
<data auto_pad="explicit" exclude-pad="true" kernel="5,5" pads_begin="1,1" pads_end="1,1" strides="3,3"/>
<input>
<port id="0">
<dim>1</dim>
<dim>3</dim>
<dim>32</dim>
<dim>32</dim>
</port>
</input>
<output>
<port id="1">
<dim>1</dim>
<dim>3</dim>
<dim>10</dim>
<dim>10</dim>
</port>
</output>
</layer>

<layer ... type="AvgPool" ... >
<data auto_pad="explicit" exclude-pad="false" kernel="5,5" pads_begin="1,1" pads_end="1,1" strides="2,2"/>
<input>
<port id="0">
<dim>1</dim>
<dim>3</dim>
<dim>32</dim>
<dim>32</dim>
</port>
</input>
<output>
<port id="1">
<dim>1</dim>
<dim>3</dim>
<dim>15</dim>
<dim>15</dim>
</port>
</output>
</layer>

<layer ... type="AvgPool" ... >
<data auto_pad="valid" exclude-pad="true" kernel="5,5" pads_begin="1,1" pads_end="1,1" strides="2,2"/>
<input>
<port id="0">
<dim>1</dim>
<dim>3</dim>
<dim>32</dim>
<dim>32</dim>
</port>
</input>
<output>
<port id="1">
<dim>1</dim>
<dim>3</dim>
<dim>14</dim>
<dim>14</dim>
</port>
</output>
</layer>


Loading
Loading