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个数据)- 第一横行
F00
,F01
,F02
,F10
,F11
,F12
,F20
,F21
,F22
表示第一个卷积计算需要的数据- 第二横行
F01
,F02
,F03
,F11
,F12
,F13
,F21
,F22
,F23
表示横向滑动后一个步长后的第二个卷积计算需要的数据- 省略号表示横向滑动完毕
- 第四横行
F10
,F11
,F12
,F20
,F21
,F22
,F30
,F31
,F32
表示纵向滑动一个步长后的第一个卷积计算需要的数据,之后的数据依次类推- 最后经过排布,总共有的行数为输出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个卷积核- 第一列红色
W00
,W01
,W02
,W10
,W11
,W12
,W20
,W21
,W22
表示第一个卷积核的权重- 第二列黄色
W00
,W01
,W02
,W10
,W11
,W12
,W20
,W21
,W22
表示第二个卷积核的权重- 省略号表示所有卷积核数据的依次排布
- 卷积核的数据没有空间倍增,虽然卷积核是滑动的一方,但是实际数据是没有变化的,所以针对所有的数据都是使用相同的权重参数进行计算,无序使用空间倍增换时间
原始卷积对应的操作
输出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 F00∗W00+F01∗W01+F02∗W02+F10∗W10+F11∗W11+F12∗W12+F20∗W20+F21∗W21+F22∗W22
同理,第一个通道第二个点的计算过程,注意 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 F01∗W00+F02∗W01+F03∗W02+F11∗W10+F12∗W11+F13∗W12+F21∗W20+F22∗W21+F23∗W22
再同理,第一个通道第二行第一个点的计算过程,注意 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 F10∗W00+F11∗W01+F12∗W02+F20∗W10+F21∗W11+F22∗W12+F30∗W20+F31∗W21+F32∗W22
不同卷积核之间的操作类似
卷积转换为乘法
在此矩阵乘法中
- 左矩阵所有的数据和右矩阵中的第一列做乘法,共有 W × H W\\times H W×H个输出点,即可得出输出Feature Map第一个通道的所有对应输出
- 同理左矩阵所有数据和右矩阵第二列做乘法,就会生成后面输出Feature Map的后一个通道
- 以此类推卷积就会转换为矩阵乘法,核心思想就是空间换时间
参考文献
矩阵卷积、矩阵相乘的转化_anan1205的博客-CSDN博客_卷积矩阵转化为矩阵相乘
以上是关于CNN卷积神经网络加速和实际在硬件中的计算过程的主要内容,如果未能解决你的问题,请参考以下文章