CNN卷积神经网络加速和实际在硬件中的计算过程

Posted 呆呆象呆呆

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CNN卷积神经网络加速和实际在硬件中的计算过程相关的知识,希望对你有一定的参考价值。

2维卷积操作,多通道多输出的卷积示意图

关于图像的解释说明

  • 输入Feature Map维度 W × H × C i n W \\times H \\times C_in W×H×Cin
  • 卷积核 Kernel 维度 W K × H K × C i n × C o u t W_K\\times H_K \\times C_in \\times C_out WK×HK×Cin×Cout
  • 输出Feature Map维度 W × H × C o u t W \\times H \\times C_out W×H×Cout

针对输入Feature Map进行如下的重新排布

关于图像的解释说明

  • 每一个矩形块代表该坐标位置的所有通道的数据的依次排序(举例F00即为立方体中F00位置所有通道 C i n C_in Cin个数据)
  • 第一横行F00F01F02F10F11F12F20F21F22表示第一个卷积计算需要的数据
  • 第二横行F01F02F03F11F12F13F21F22F23表示横向滑动后一个步长后的第二个卷积计算需要的数据
  • 省略号表示横向滑动完毕
  • 第四横行F10F11F12F20F21F22F30F31F32表示纵向滑动一个步长后的第一个卷积计算需要的数据,之后的数据依次类推
  • 最后经过排布,总共有的行数为输出Feature Map的点的数量 W × H W\\times H W×H ,我们这里为了简单设置下输入输出的单通道内的点数都是 W × H W\\times H W×H
  • 最终达到的效果使用更大的空间进行数据的重构,每一个数据被若干次的读取并存放在不同的位置,以方便后续将卷积转变为矩阵乘法

针对卷积核 Kernel 进行如下排布

关于图像的解释说明

  • 每一个不同颜色矩形块代表在对应颜色卷积核中该坐标位置的所有通道的数据的依次排序(举例红色W00即为红色立方体卷积核中W00位置所有通道 C i n C_in Cin个数据),共有 C o u t C_out Cout个卷积核
  • 第一列红色W00W01W02W10W11W12W20W21W22表示第一个卷积核的权重
  • 第二列黄色W00W01W02W10W11W12W20W21W22表示第二个卷积核的权重
  • 省略号表示所有卷积核数据的依次排布
  • 卷积核的数据没有空间倍增,虽然卷积核是滑动的一方,但是实际数据是没有变化的,所以针对所有的数据都是使用相同的权重参数进行计算,无序使用空间倍增换时间

原始卷积对应的操作

输出Feature Map 的第一个通道的第一个点的计算过程( ∗ * 代表所有通道的对应相乘,这里暂不展开)
F 00 ∗ W 00 + F 01 ∗ W 01 + F 02 ∗ W 02 + F 10 ∗ W 10 + F 11 ∗ W 11 + F 12 ∗ W 12 + F 20 ∗ W 20 + F 21 ∗ W 21 + F 22 ∗ W 22 F00*W00+F01*W01+F02*W02\\\\+F10*W10+F11*W11+F12*W12\\\\+F20*W20+F21*W21+F22*W22 F00W00+F01W01+F02W02+F10W10+F11W11+F12W12+F20W20+F21W21+F22W22
同理,第一个通道第二个点的计算过程,注意 W W W的坐标是不变的,只需要改变对应的 F F F的坐标即可
F 01 ∗ W 00 + F 02 ∗ W 01 + F 03 ∗ W 02 + F 11 ∗ W 10 + F 12 ∗ W 11 + F 13 ∗ W 12 + F 21 ∗ W 20 + F 22 ∗ W 21 + F 23 ∗ W 22 F01*W00+F02*W01+F03*W02\\\\+F11*W10+F12*W11+F13*W12\\\\+F21*W20+F22*W21+F23*W22 F01W00+F02W01+F03W02+F11W10+F12W11+F13W12+F21W20+F22W21+F23W22
再同理,第一个通道第二行第一个点的计算过程,注意 W W W的坐标是不变的,只需要改变对应的 F F F的坐标即可
F 10 ∗ W 00 + F 11 ∗ W 01 + F 12 ∗ W 02 + F 20 ∗ W 10 + F 21 ∗ W 11 + F 22 ∗ W 12 + F 30 ∗ W 20 + F 31 ∗ W 21 + F 32 ∗ W 22 F10*W00+F11*W01+F12*W02\\\\+F20*W10+F21*W11+F22*W12\\\\+F30*W20+F31*W21+F32*W22 F10W00+F11W01+F12W02+F20W10+F21W11+F22W12+F30W20+F31W21+F32W22
不同卷积核之间的操作类似

卷积转换为乘法

在此矩阵乘法中

  • 左矩阵所有的数据和右矩阵中的第一列做乘法,共有 W × H W\\times H W×H个输出点,即可得出输出Feature Map第一个通道的所有对应输出
  • 同理左矩阵所有数据和右矩阵第二列做乘法,就会生成后面输出Feature Map的后一个通道
  • 以此类推卷积就会转换为矩阵乘法,核心思想就是空间换时间

参考文献

矩阵卷积、矩阵相乘的转化_anan1205的博客-CSDN博客_卷积矩阵转化为矩阵相乘

CNN之卷积加速_圣空老宅的博客-CSDN博客

以上是关于CNN卷积神经网络加速和实际在硬件中的计算过程的主要内容,如果未能解决你的问题,请参考以下文章

基于 Zynq 的 CNN 图像识别算法的优化与实现

卷积层在神经网络中如何运算?

卷积层在神经网络中如何运算?

学习CNN系列二:训练过程

实战卷积神经网络

CNN基础计算机如何计算卷积操作