conv2d

功能说明

给定一个输入的张量和一个权重张量执行卷积2-D操作,输出结果张量。

支持的输入和输出数据类型:(feature_map:weight:dst)

函数原型

conv2d(dst, feature_map, weight, fm_shape, kernel_shape, stride, pad, dilation, pad_value=0, init_l1out=True)

参数说明

表1 参数说明

参数名称

输入/输出

含义

dst

输出

卷积结果操作数的起始element, 支持的数据类型参考表2,Tensor的scope为L1OUT。

结果中有效张量格式为[Cout/16, Ho, Wo, 16],大小为Cout * Ho * Wo,Ho与Wo可以根据其他数据计算得出。

Ho = floor((H + pad_top + pad_bottom - dilation_h * (Kh - 1) - 1) / stride_h + 1)

Wo = floor((W + pad_left + pad_right - dilation_w * (Kw - 1) - 1) / stride_w + 1)

由于硬件要求Ho*Wo需为16倍数,在申请dst Tensor时,shape应向上16对齐,实际申请shape大小应为Cout * round_howo。

round_howo = ceil(Ho * Wo /16) * 16。

因对齐引入的无效数据,会在后续fixpipe操作过程中去除。

feature_map

输入

输入张量,支持的数据类型参考表2, Tensor的scope为L1。

weight

输入

卷积核(权重)张量,支持的数据类型参考表2,Tensor的scope为L1。

fm_shape

输入

输入张量“feature_map”的形状,格式是[C1, H, W, C0]。

C1*C0为输入的channel数,要求如下:

  • 当feature_map的数据类型为float16时,C0=16;数据类型为立即数(int)。
  • 当feature_map的数据类型为int8时,C0=32,数据类型为立即数(int)。
  • C1取值范围:[1,256], 输入的channel的范围:[16或32,4096];数据类型为立即数。
  • 对于网络中的首层卷积,输入为float16和int8时,conv2d的fm_shape可以支持C0=4、C1=1的特定场景。

H为高,取值范围:[1,4096];数据类型为立即数(int)。

W为宽,取值范围:[1,4096];数据类型为立即数(int)。

kernel_shape

输入

卷积核张量“weight”的形状,格式是[C1, Kh, Kw, Cout, C0]。

C1*C0为输入的channel数,对于C0要求如下:

  • 当feature_map的数据类型为float16时,C0=16;数据类型为立即数(int)。
  • 当feature_map的数据类型为int8时,C0=32,数据类型为立即数(int)。
  • C1取值范围:[1,256], 输入的channel的范围:[16或32,4096];数据类型为立即数(int)。
  • 对于网络中的首层卷积,输入为float16和int8时,conv2d的kernel_shape可以支持C0=4、C1=1的特定场景。
  • kernel_shape输入的channel数需与fm_shape输入的channel数保持一致。

Cout为卷积核数目,取值范围:[16, 4096], Cout必须为16的倍数。数据类型为立即数(int)。

Kh为卷积核高;值的范围:[1,255]; 数据类型为立即数(int)。

Kw表示卷积核宽;值的范围:[1,255];数据类型为立即数(int)。

stride

输入

卷积步长,格式是[stride_h, stride_w],。

stride_h:表示步长高; 值的范围:[1,63]。 数据类型为立即数(int)

stride_w:表示步长宽; 值的范围:[1,63]。 数据类型为立即数(int)

pad

输入

padding行数/列数,格式是[pad_left, pad_right, pad_top, pad_bottom];

pad_left: feature_map左侧pad列数。范围[0,255]。 数据类型为立即数(int)。

pad_right: feature_map右侧pad列数。范围[0,255]。 数据类型为立即数(int)。

pad_top: feature_map顶部pad行数。范围[0,255]。 数据类型为立即数(int)。

pad_bottom: feature_map底部pad行数。范围[0,255]。 数据类型为立即数(int)。

dilation

输入

空洞卷积参数,格式[dilation_h, dilation_w];

dilation_h: 空洞高,范围:[1,255], 数据类型为立即数(int)。

dilation_w: 空洞宽,范围:[1,255], 数据类型为立即数(int)。

膨胀后卷积核宽为dilation_w * (Kw - 1) + 1,高为dilation_h * (Kh - 1) + 1

pad_value

输入

padding填充值的数值,支持的数据类型为:立即数(int/float)。默认值为0。

  • 当feature_map数据类型为int8时,取值范围:pad_value∈[-128, 127],且pad_value必须为立即数(int)。
  • 当feature_map数据类型为float16时,取值范围: pad_value∈[-65504, 65504]。

init_l1out

输入

表示dst是否需要初始化。支持的数据类型为:bool类型。默认值为True。

  • True:dst初始矩阵中数据无意义,计算结果直接覆盖dst中的数据。
  • False:dst初始矩阵保存有之前结果,新计算结果会累加前一次conv2d 计算结果。
表2 feature_map、weight和dst的数据类型组合

feature_map.dtype

weight.dtype

dst.dtype

int8

int8

int32

float16

float16

float32

支持的芯片型号

昇腾310 AI处理器

昇腾910 AI处理器

昇腾310P AI处理器AI Core

注意事项

返回值

调用示例