EdgeBoard中“活灵活现”的算子
1. Average pooling可以看作是卷积核参数固定的dw-conv,即将求和后取平均(除以卷积核面积)的操作转换成先乘以一个系数(1/卷积核面积)再求和。如图8所示,该例子中卷积核大小为2x2,卷积核参数即为1/4。卷积核固定的参数可以类似于dw-conv下发卷积核的方式由SDK封装后下发,也可以通过SDK配置一个参数完成,然后在FPGA中计算转换,这样节省卷积核参数传输的时间。另外,max-pooling算子与average pooling的计算过程类似,只需要将求均值操作换成求最大值的操作,其余挖窗、存取数等过程保持不变。 图8. Pooling复用dw-conv 2. Elementwise add/sub完成两幅图像对应元素的相加或相减,不同于dw-conv的是它有两幅输入图像。如果我们控制两幅图像的输入顺序,将两幅图像按行交错拼成一幅图像,然后取卷积核为2x1,行stride为1,列stride为2,pad均设置成0,则按照dw-conv的计算方式就完成了elementwise的计算。通过在FPGA中设置当前像素对应的kernel值为1或-1,就可以分别实现对应elementwise add和elementwise sub两个算子。该过程如图9所示。
图9. ew-add/sub复用dw-conv 3. Scale算子主要在图像预处理时使用,将输入图像每一个通道的全部像素点乘以该通道对应的scale值,然后加上bias。如果我们将dw-conv的卷积核大小设成1x1,行列stride都设置成1,pad设置成0,卷积核参数值设成scale,就可以通过dw-conv完成scale算子的功能。通过分析发现,batch-normalize,elementwise-mul和dropout等算子都可以通过scale算子来实现。 二. 矩阵运算单元 矩阵运算单元MPU负责实现convolution,完成3维输入图像(H x W x C)和4维卷积核(N x K1 x K2 x C)的乘加操作,单个卷积核的通道数和输入图像的通道数相同,而卷积核的数量N决定了输出的通道数,如图10所示。full connection 算子实现的1维输入数组(长度C)和2维权重(N x C)的乘加操作。将 full connection输入数组扩展成 H x W x C, 输出扩展成 N x K1 x K2 x C, 其中H, W, K1和K2均设置成1,这样 full connection就可以调用convolution来实现。另外,在计算 deconv 时,通过SDK对卷积核进行分拆、重排,就可以通过调用conv来实现deconv,同样带来了极大的收益。 图10. Conv算子示意图 三.指数激活运算单元 (编辑:西安站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |