前言
关于卷积部分我自己了解的不少,这里我只记录不常见的知识。
矩阵快速卷积
简介:卷积操作是在图像中通过滑动窗口,逐像素进行矩阵计算,会消耗大量的计算资源去寻址和修改内存数据,因此最终的卷积操作并不是可我们认为的滑动窗口执行卷积操作,而是采用转为矩阵的方式进行快速计算,矩阵操作能在计算机中快速运算并且方便移植到GPU中,在实际生产环境中可以通过两步来完成卷积操作:
(1) 使用Image to column(Im2col)算法把输入图像和卷积核转换为规定的矩阵排列方式。
(2) 使用GEMM算法对转换后的两个矩阵进行相乘,得到卷积结果。
一般矩阵乘法(General Matrix Matrix Multiply, GEMM)将由卷积核产生的过滤矩阵乘以原图产生的特征图矩阵(Feature Matrix)的转置,得到大小为Count x (H x W)的输出特征图矩阵。
f e a t u r e m a p = F i l t e r M a t r i x . F e a t u r e ⋅ M a t r i x T = [ C o u n t × ( C × K × K ) ] ∗ [ ( C × K × K ) × ( H × W ) ] = C o u n t × H × W \begin{aligned} feature \space map & = Filter \space Matrix . Feature \centerdot Matrix^T \\ & = [Count \times (C\times K \times K) ] \ast [(C \times K \times K) \times (H \times W)] \\ &= Count \times H \times W \end{aligned} feature map=Filter Matrix.Feature⋅MatrixT=[Count×(C×K×K)]∗[(C×K×K)×(H×W)]=Count×H×W
参数介绍:
C:channel
Count: 卷积核的数量
K:卷积核的宽度或高度
H\W: 卷积核在原图像的列或则行上能滑动几次。
Sample:
I m a g e = [ 3 2 1 0 1 2 3 1 1 ] ⇒ F e a t u r e M a t r i x = [ 3 2 0 1 2 1 1 2 0 1 1 3 1 2 1 1