硬件实现卷积运算原理笔记总结

本文摘自https://blog.csdn.net/qianqing13579/article/details/71844172
https://blog.csdn.net/xizero00/article/details/51049858
首先将一个卷积核展成一个K*K的行向量,将输入图像转换成滑动窗口矩阵,滑动窗口矩阵的行数是每个卷积核含有权数的个数,列数是输出元素的个数,这是为了能使用矩阵乘法而构造的。
在这里插入图片描述
下图同样道理
在这里插入图片描述
上图的stride_h和stride_w都为3,所以输出元素个数恰巧是9,根据颜色可对应。

利用矩阵乘法,即可实现二维卷积。

在这里插入图片描述
结合另一篇论文https://blog.csdn.net/tiaozhanzhe1900/article/details/83069854
如果kernel矩阵不变,可以实现weight stationary(WS) dataflow。
如果矩阵相乘部分和,在输出矩阵对应位置累加,则可以实现output stationary(OS) dataflow。
如果滑动窗口矩阵不变,可以实现no local reuse(NLR) dataflow。

在这里插入图片描述

为了实现Row stationary dataflow,可以先考虑一维卷积:
在这里插入图片描述

对一维卷积进行扩展,既然一个PE可以完成一行1K的filter与一行1H的输入的一维卷积,对于K*K的二维卷积,只需要K个PE,将K个PE结果累加,就能计算出二维卷积输出的一行元素。
在这里插入图片描述
而且filter的元素的固定的,input feature的元素可以平移,部分和可以累加,实现数据复用。
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/tiaozhanzhe1900/article/details/83141391