由于并不是专门做加速,但是有必要学习一下。需要加速的场景:1.手机端;2.实时场景;3.嵌入式设备。决定网络的速度无非是网络设计和输入数据大小。网络设计包括:权重大小,运行过程产生的中间变量大小;模型参数大小与速度成正比。网络的运算速度由flops决定,对于神经网络里占主要运算量的矩阵计算,每一个单次的x*w+b为一个MACCs计算,因此两个n维向量的点乘需要n个MACCs运算,一个MACCs就是一个运算单位。
全连接层计算:输入I为n维,输出O为m维,则需要n*m个MACCs,(2n\-1)*J个flops。
激活函数:激活函数不涉及矩阵计算,因此,激活函数里有m个操作,输入n维时其计算量就是n*m个flops计算量。
卷积层:卷积层输入一般是C*H*W,假如卷积核的尺寸为k,卷积核个数为n,输出通道数为ci,那么计算量为C*H*W*k*n*ci个MACCs,这是基于stride=1的情况下。
深度可分离卷积:除了将输入进来的通道拆开单独计算,其他操作与普通卷积无异,主要是深度分离的卷积和点卷积。则深度可分离卷积的计算量为(k*k*C*H*W)+(C*H'*W*ci)。
因此,加大stride的步数或者采用深度可分离卷积都是可以减少计算量的。