卷积原理介绍
卷积计算过程
- 卷积核:在图中,左边的3x3矩阵是输入图像,4x4的矩阵是卷积核。
- 滑动窗口:将卷积核放在输入图像的一个位置上,对应位置的元素相乘后相加,得到输出矩阵的一个元素。
- 重复操作:滑动窗口在输入图像上移动,对每一个位置重复上述步骤,最终形成输出矩阵。
比赛卷积参数介绍
常用卷积算法
常用卷积计算方法有四种:
-
直接卷积计算
按照卷积的计算特性直接进行计算,卷积核中的权重矩阵在经过处理(补边)后的输入图像中滑动,每次在输入图像中会覆盖一个与权重矩阵大小一致的子矩阵与之进行对应元素的相乘并累加(点积运算)。
-
Winograd算法
通过特定的计算公式增加加法计算来减少乘法的计算次数达到优化目的。由于转化过程中会对计算精度产生影响,只适用于一些较小的卷积核,例如本次比赛中rs3x3的卷积核就比较适用。
-
FFT算法
将输入图像和卷积核进行 FFT 变换,在频域中进行乘法计算,然后再进行 IFFT(快速傅里叶逆变换)变换,将频域中的乘法计算结果转换为空域的卷积结果。卷积核越小,需要填充的数据也就越多,因此适用于一些特殊情况。
-
Im2col算法
通过将输入图像和卷积核分别进行行向量和列向量的转换并组合成两个矩阵,随后通过通用矩阵乘(General Matrix Multiplication,GEMM)来加速计算结果。由于任何尺寸的卷积过程都可以进行转换,所以该算法对卷积的适用性较好。
通用优化方法
-
数据分块
-
寄存器复用
-
隐藏数据访问延迟
-
LDS完成数据搬移
-
双缓冲
-
指令穿插
-
Bank冲突