# Convolution¶

## General¶

Convolution operation performs the convolution between src tensor and weight tensor, which is defined as by the following formulas. Variable names follow the standard Naming Conventions.

Let $$\src$$, $$\weights$$ and $$\dst$$ tensors have shape $$N \times IC \times IH \times IW$$, $$OC \times IC \times KH \times KW$$, and $$N \times OC \times OH \times OW$$ respectively.

Furthermore, let the remaining convolution parameters be:

Parameter

Depth

Height

Width

$$PD_L$$

$$PH_L$$

$$PW_L$$

In the attributes we use pads_begin to indicate the corresponding vector of paddings

$$PD_R$$

$$PH_R$$

$$PW_R$$

In the attributes we use pads_end to indicate the corresponding vector of paddings

Stride

$$SD$$

$$SH$$

$$SW$$

In the attributes we use strides to indicate the corresponding vector of strides

Dilation

$$DD$$

$$DH$$

$$DW$$

In the attributes we use dilations to indicate the corresponding vector of dilations

To further simplify the formulas, we assume that the attribute data_format and weights_format are set to NCX and OIX respectively. NCX means the fist axis represents batch dimension, the second axis represents channel dimension and the rest represents spatial dimensions. OIX means the first axis represents output channel dimension, the second axis represents input channel dimension and the rest represents weights spatial dimensions.

### Regular Convolution¶

This is the same as the formula in Convolution primitive.

$\begin{split}\dst(n, oc, oh, ow) = \bias(oc) \\ + \sum_{ic=0}^{IC-1}\sum_{kh=0}^{KH-1}\sum_{kw=0}^{KW-1} \src(n, ic, oh \cdot SH + kh - PH_L, ow \cdot SW + kw - PW_L) \cdot \weights(oc, ic, kh, kw).\end{split}$

Here:

• $$OH = \left\lfloor{\frac{IH - KH + PH_L + PH_R}{SH}} \right\rfloor + 1,$$

• $$OW = \left\lfloor{\frac{IW - KW + PW_L + PW_R}{SW}} \right\rfloor + 1.$$

### Convolution with Groups¶

The attribute groups is set to $$>1$$.

$\begin{split}\dst(n, g \cdot OC_G + oc_g, oh, ow) = \bias(g \cdot OC_G + oc_g) \\ + \sum_{ic_g=0}^{IC_G-1}\sum_{kh=0}^{KH-1}\sum_{kw=0}^{KW-1} \src(n, g \cdot IC_G + ic_g, oh \cdot SH + kh - PH_L, ow \cdot SW + kw - PW_L) \cdot \weights(g, oc_g, ic_g, kh, kw),\end{split}$

where

• $$IC_G = \frac{IC}{G}$$,

• $$OC_G = \frac{OC}{G}$$, and

• $$oc_g \in [0, OC_G).$$

### Convolution with Dilation¶

The attribute dilation contains the element which is $$>1$$.

$\begin{split}\dst(n, oc, oh, ow) = \bias(oc) \\ + \sum_{ic=0}^{IC-1}\sum_{kh=0}^{KH-1}\sum_{kw=0}^{KW-1} \src(n, ic, oh \cdot SH + kh \cdot DH - PH_L, ow \cdot SW + kw \cdot DW - PW_L) \cdot \weights(oc, ic, kh, kw).\end{split}$

Here:

• $$OH = \left\lfloor{\frac{IH - DKH + PH_L + PH_R}{SH}} \right\rfloor + 1,$$ where $$DKH = 1 + (KH - 1) \cdot DH$$, and

• $$OW = \left\lfloor{\frac{IW - DKW + PW_L + PW_R}{SW}} \right\rfloor + 1,$$ where $$DKW = 1 + (KW - 1) \cdot DW$$.

## Operation attributes¶

Attribute Name

De

strides

Controls the strides the weights tensor is moved when computing convolution

s64

A s64 list containing positive values

Required

Controls number of zeros to be add to the front/top/left of spatial dimensions

s64

A s64 list containing non-negative values

Required

Controls number of zeros to be add to the back/bottom/right of spatial dimensions

s64

A s64 list containing non-negative values

Required

dilations

Controls the amount of stretching the kernel before convolution ( visualization link )

s64

A s64 list containing positive values (>1 means dilated convolution)

Required

Controls how the padding is calculated

string

none (default), same_upper , same_lower , valid

Optional

groups

Controls how input channels and output channels are divided into

s64

A positive s64 value, 1 by default

Optional

data_format

Controls how to interpret the shape of src and dst .

string

NCX , NXC (default)

Optional

weights_format

Controls how to interpret the shape of weights

string

OIX , XIO (default)

Optional

## Execution arguments¶

The inputs and outputs must be provided according to below index order when constructing an operation.

### Inputs¶

Index

Argu

0

src

Required

1

weights

Required

2

bias

Optional

Note

The shape of $$\weights$$ is $$(out\_channels, in\_channels / groups, spatial\_shape)$$ for OIX format or $$(spatial\_shape, in\_channels / groups, out\_channels)$$ for XIO format. Both $$in\_channels$$ and $$out\_channels$$ must be divisible by groups attribute.

### Outputs¶

Index

Argu

0

dst

Required

## Supported data types¶

Convolution operation supports the following data type combinations.

Src

Weights

f32

f32

f32

f32

bf16

bf16

bf16

bf16

f16

f16

f16

f16