Conv2D
函数功能
注意:该接口后续即将废弃,新开发内容不要使用该接口。
计算给定输入张量和权重张量的2-D卷积,输出结果张量。Conv2d卷积层多用于图像识别,使用过滤器提取图像中的特征。
函数原型
1 2 |
template <typename dst_T, typename src_T> __aicore__ inline void Conv2D(const LocalTensor<dst_T>& dstLocal, const LocalTensor<src_T>& featureMap, const LocalTensor<src_T>& weight, Conv2dParams& conv2dParams, Conv2dTilling& tilling) |
1 2 |
template <typename T> __aicore__ inline Conv2dTilling GetConv2dTiling(Conv2dParams& conv2dParams) |
参数说明
参数名称 |
类型 |
说明 |
||
---|---|---|---|---|
dstLocal |
输出 |
目的操作数。 Atlas 训练系列产品,支持的QuePosition为:CO1,CO2 Atlas推理系列产品AI Core,支持的QuePosition为:CO1,CO2 结果中有效张量格式为[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。 |
||
featureMap |
输入 |
输入张量,Tensor的QuePosition为A1。 输入张量“feature_map”的形状,格式是[C1, H, W, C0]。 C1*C0为输入的channel数,要求如下:
H为高,取值范围:[1,40]。 W为宽,取值范围:[1,40]。 |
||
weight |
输入 |
卷积核(权重)张量,Tensor的QuePosition为B1。 卷积核张量“weight”的形状,格式是[C1, Kh, Kw, Cout, C0]。 C1*C0为输入的channel数,对于C0要求如下:
Cout为卷积核数目,取值范围:[16,32,64,128], Cout必须为16的倍数。 Kh为卷积核高;值的范围:[1,5]。 Kw表示卷积核宽;值的范围:[1,5]。 |
||
conv2dParams |
输入 |
输入矩阵形状等状态参数,类型为Conv2dParams。结构体具体定义为:
|
||
tilling |
输入 |
分形控制参数,类型为Conv2dTilling。结构体具体定义为:
|
参数名称 |
类型 |
说明 |
---|---|---|
imgShape |
vector<int> |
输入张量“feature_map”的形状,格式是[ H, W]。
|
kernelShape |
vector<int> |
卷积核张量“weight”的形状,格式是[Kh, Kw]。
|
stride |
vector<int> |
卷积步长,格式是[stride_h, stride_w]。
|
cin |
int |
分形排布参数,Cin = C1 * C0,Cin为输入的channel数,C1取值范围:[1,4]。
|
cout |
int |
Cout为卷积核数目,取值范围:[16,32,64,128], Cout必须为16的倍数。 |
padList |
vector<int> |
padding行数/列数,格式是[pad_left, pad_right, pad_top, pad_bottom]。
|
dilation |
vector<int> |
空洞卷积参数,格式[dilation_h, dilation_w]。
膨胀后卷积核宽为dilation_w * (Kw - 1) + 1,高为dilation_h * (Kh - 1) + 1。 |
initY |
uint32_t |
表示dstLocal是否需要初始化。
|
partialSum |
uint32_t |
当dstLocal参数所在的QuePosition为CO2时,通过该参数控制计算结果是否搬出。
|
参数名称 |
类型 |
说明 |
||
---|---|---|---|---|
blockSize |
uint32_t |
固定值,恒为16,一个维度内存放的元素个数。 |
||
loopMode |
LoopMode |
遍历模式,结构体具体定义为:
|
||
c0Size |
uint32_t |
一个block的字节长度,范围[16或者32]。 |
||
dtypeSize |
uint32_t |
传入的数据类型的字节长度,范围[1, 2]。 |
||
strideH |
uint32_t |
卷积步长-高,范围:[1,4]。 |
||
strideW |
uint32_t |
卷积步长-宽,范围:[1,4]。 |
||
dilationH |
uint32_t |
空洞卷积参数-高,范围:[1,4]。 |
||
dilationW |
uint32_t |
空洞卷积参数-宽,范围:[1,4]。 |
||
hi |
uint32_t |
feature_map形状-高,范围:[1,40]。 |
||
wi |
uint32_t |
feature_map形状-宽,范围:[1,40]。 |
||
ho |
uint32_t |
feature_map形状-高,范围:[1,40]。 |
||
wo |
uint32_t |
feature_map形状-宽,范围:[1,40]。 |
||
height |
uint32_t |
weight形状-高,[1,5]。 |
||
width |
uint32_t |
weight形状-宽,[1,5]。 |
||
howo |
uint32_t |
feature_map形状大小,为ho * wo。 |
||
mNum |
uint32_t |
M轴等效数据长度参数值,范围:[1,4096]。 |
||
nNum |
uint32_t |
N轴等效数据长度参数值,范围:[1,4096]。 |
||
kNum |
uint32_t |
K轴等效数据长度参数值,范围:[1,4096]。 |
||
roundM |
uint32_t |
M轴等效数据长度参数值且以blockSize为倍数向上取整,范围:[1,4096]。 |
||
roundN |
uint32_t |
N轴等效数据长度参数值且以blockSize为倍数向上取整,范围:[1,4096]。 |
||
roundK |
uint32_t |
K轴等效数据长度参数值且以c0Size为倍数向上取整,范围:[1,4096]。 |
||
mBlockNum |
uint32_t |
M轴Block个数,mBlockNum = mNum / blockSize,范围:[1,4096]。 |
||
nBlockNum |
uint32_t |
N轴Block个数,nBlockNum = nNum / blockSize,范围:[1,4096]。 |
||
kBlockNum |
uint32_t |
K轴Block个数,kBlockNum = kNum / blockSize,范围:[1,4096]。 |
||
mIterNum |
uint32_t |
遍历M轴维度数量,范围:[1,4096]。 |
||
nIterNum |
uint32_t |
遍历N轴维度数量,范围:[1,4096]。 |
||
kIterNum |
uint32_t |
遍历K轴维度数量,范围:[1,4096]。 |
||
mTileBlock |
uint32_t |
M轴切分块个数,范围:[1,4096]。 |
||
nTileBlock |
uint32_t |
N轴切分块个数,范围:[1,4096]。 |
||
kTileBlock |
uint32_t |
K轴切分块个数,范围:[1,4096]。 |
||
kTailBlock |
uint32_t |
K轴尾块个数,范围:[1,4096]。 |
||
mTailBlock |
uint32_t |
M轴尾块个数,范围:[1,4096]。 |
||
nTailBlock |
uint32_t |
N轴尾块个数,范围:[1,4096]。 |
||
kHasTail |
bool |
K轴是否存在尾块。 |
||
mHasTail |
bool |
M轴是否存在尾块。 |
||
nHasTail |
bool |
N轴是否存在尾块。 |
||
mTileNums |
uint32_t |
M轴切分块个数的长度,范围:[1,4096]。 |
||
mTailNums |
uint32_t |
M轴尾块个数的长度,范围:[1,4096]。 |
feature_map.dtype |
weight.dtype |
dst.dtype |
---|---|---|
int8_t |
int8_t |
int32_t |
half |
half |
float |
half |
half |
half |
支持的型号
Atlas 训练系列产品
Atlas推理系列产品AI Core
注意事项
- 该接口当前不支持W=Kw并且H>Kh的场景,其将产生不可预期的结果。
- 操作数地址偏移对齐要求请参见通用约束。