moreisless——卷积网络加速

shuzfan shuzfan     2022-08-28     545

关键词:

一篇讲网络加速的论文,来自2017CVPR。

文章链接: 《More is Less: A More Complicated Network with Less Inference Complexitv》

Introduction

目前做神经网络加速的主要有这几个方面: 低秩分解,定点运算、矢量量化、稀疏表示、特殊的轻量级网络结构

再介绍本文方法之前,需要了解一下常见的卷积是怎样实现的。以caffe中的卷积为例,首先通过im2col将输入展开重排成一个大矩阵,然后执行矩阵乘法。具体可参考知乎上的一个高票回答,图示很清楚,
https://www.zhihu.com/question/28385679?sort=created

下面用公式说明一下:

假设输入 \(X\in R^{H\times W\times C}\), 一共有 \(T\)个 \(k\times k \times C\)大小的卷积核,再假设卷积stride=1且存在padding,即保证输出 \(V\) 的大小与输入一致。

首先,通过im2col将输入展开重排成一个大矩阵 \(\hat X\in R^{HW\times kkC}\), 卷积核也被整理成了一个矩阵 \(W \in R^{kkC\times T}\), 于是输出 \(V\in R^{H\times W\times T}\) 直接通过矩阵乘法计算:\(V = \hat X \times W\).

另一方面,我们通常使用ReLu来对进行激活处理: \(\hat V_{i,j,c} = max(V_{i,j,c},0)\). 结合上面的卷积实现原理,我们可以看出如果激活后某个点的所有通道都为0,就相当于在矩阵乘法时可以直接省略 \(\hat X\)的相应行。 遗憾的是,这有一点马后炮的感觉,因为我们计算完之后才知道是不是会得到0.

本文实现加速的核心就是:提前锁定哪些值将会为0,从而在矩阵乘法时直接避免相应运算。

Method

整体的实现如下图:

float

如上图,还是先假设输入 \(X\in R^{H\times W\times C}\), 一共有 \(T\)个 \(k\times k \times C\)大小的卷积核,再假设卷积stride=1且存在padding,即保证输出 \(V\) 的大小与输入一致。

黑色部分表示原始结构的卷积,橘黄色部分表示新增的一个辅助层,该辅助层的卷积参数有两种选择,第一种是 \(1\times1 \times C\times T\),第二种是 \(k\times k\times C\times 1\),以第二种为例,其卷积输出为 \(V^{‘} \in R^{H\times W\times 1}\)。

\(V^{‘}\)由于经过ReLU和一些稀疏约束,因此只有一部分值不为0。因此,根据\(V^{‘}\)我们可以控制计算原始卷积 \(V\)时,省略掉展开矩阵 \(\hat X\) 的对应行,从而完成加速

文章解释了为什么不使用第一种\(1\times1 \times C\times T\)来产生\(V^{‘}\),主要是因为这会导致没办法一次完成所有矩阵乘法。

从上面的解释来看,\(V^{‘}\)的稀疏度决定了加速比。

为了让 \(V^{‘}\) 更稀疏,文章一方面使用了ReLU激活,同时也尝试对 \(V^{‘}\)进行平滑的稀疏正则化\(L_1L_2(x) = \mu||x||+\rho |x|\), 但是发现很难优化。

后来作者发现BN+ReLU可以使得输出更稀疏:

float

Conclusion

文章将该方法称为low-cost collaborative layer (LCCL)。 Idea很赞,但是考虑到带来的训练难度,其产生的加速效果就不是很令人满意了。

文章在ResNet上进行了实验,下图是网络的基本模块:

float

下图是在ImageNet上的实验结果:

float

神经网络推理加速:合并卷积和bn层运算原理及实验(代码片段)

...加速网络收敛,并且能够控制过拟合,一般放在卷积层之后。BN层将数据归一化后,能够有效解决梯度消失与梯度爆炸问题。虽然BN层在训练时起到了积极作用,然而,在网络前向推断时多了一些层的运算 查看详情

cnn卷积神经网络加速和实际在硬件中的计算过程(代码片段)

2维卷积操作,多通道多输出的卷积示意图关于图像的解释说明输入FeatureMap维度W×H×CinW\\timesH\\timesC_inW×H×Cin​卷积核Kernel维度WK×HK×Cin×CoutW_K\\timesH_K\\timesC_in\\timesC_outWK​×HK​×Cin​×Cout​输出FeatureMap维度W×H×CoutW\\timesH\\time 查看详情

深度学习模型压缩与加速

模型压缩与加速前言加速网络的设计分组卷积分解卷积BottleNeck结构神经网络搜索模型剪枝核稀疏化量化操作前言压缩与加速对于深度学习模型的端侧部署至关重要,但假设你的模型部署在服务端,模型的压缩与加速显得... 查看详情

神经网络推理加速:合并卷积和bn层运算原理及实验(代码片段)

...加速网络收敛,并且能够控制过拟合,一般放在卷积层之后。BN层将数据归一化后,能够有效解决梯度消失与梯度爆炸问题。虽然BN层在训练时起到了积极作用,然而,在网络前向推断时多了一些层的运算,... 查看详情

一文看懂img2col卷积加速算法

本文转自【模型推理】一文看懂Img2Col卷积加速算法直接卷积计算​直接卷积计算一定是很直接的,也是大多数人学习卷积神经网络时所直观了解的卷积计算方式。直接卷积是按照卷积层的计算特性进行计算,卷积核中的... 查看详情

一文看懂img2col卷积加速算法

本文转自【模型推理】一文看懂Img2Col卷积加速算法直接卷积计算​直接卷积计算一定是很直接的,也是大多数人学习卷积神经网络时所直观了解的卷积计算方式。直接卷积是按照卷积层的计算特性进行计算,卷积核中的... 查看详情

基于zynq的cnn图像识别算法的优化与实现

卷积神经网络训练与硬件加速器实现 图像识别系统的第二部分是CNN加速器,CNN加速器的实现包含训练与推理两个阶段。一是卷积神经网络训练,提取相应的权重值和偏置值,即训练阶段。二是根据网络模型实现卷积... 查看详情

cnn卷积神经网络加速和实际在硬件中的计算过程(代码片段)

2维卷积操作,多通道多输出的卷积示意图关于图像的解释说明输入FeatureMap维度W×H×CinW\\timesH\\timesC_inW×H×Cin​卷积核Kernel维度WK×HK×Cin×CoutW_K\\timesH_K\\timesC_in\\timesC_outWK​×HK​×Cin​×Cout​输出FeatureMap维度W×H×CoutW\\timesH\\time... 查看详情

rethingkingthevalueofnetworkpruning

参考技术A加速卷积神经网络的方法主要可以分三个方面:1.针对卷积操作优化,例如使用FFT实现卷积操作;2.量化操作,例如网络的二值化(BinaryNet);3.在结构上简化,使模型变小。在结构上简化模型也可以分三类:张量分解... 查看详情

模型推理一文看懂winograd卷积加速算法(代码片段)

...t;_< o_O O_o ~_~ o_O 本文详细解释了winograd算法加速卷积的实现原理。 前面已经写过几篇卷积加速相关的文章,感兴趣的同学可以查阅《【模型推理】一文看懂Img2Col卷积加速算法》、《【模型推理】一文看懂GoogleTPU脉... 查看详情

学习笔记tf014:卷积层激活函数池化层归一化层高级层

CNN神经网络架构至少包含一个卷积层(tf.nn.conv2d)。单层CNN检测边缘。图像识别分类,使用不同层类型支持卷积层,减少过拟合,加速训练过程,降低内存占用率。TensorFlow加速所有不同类弄卷积层卷积运算。tf.nn.depthwise_conv2d,一... 查看详情

为numpy 3D数组加速卷积循环?

】为numpy3D数组加速卷积循环?【英文标题】:Speedupforloopinconvolutionfornumpy3Darray?【发布时间】:2015-11-0819:50:01【问题描述】:沿3dnumpy数组的Z向量执行卷积,然后对结果进行其他操作,但它现在实现起来很慢。是for循环在这里减... 查看详情

卷积神经网络基本概念(卷积篇01)(代码片段)

ComputerVisionTheoryCNNPart1简介1.1我先后在以下场景下见到过卷积微分方程傅立叶变换及其应用概率论卷积神经网1.2相关阅读推荐一下ChristopherOlah的理解卷积的bloghttp://colah.github.io/posts/2014-07-Understanding-Convolutions/数学论证https://www.dsprel... 查看详情

模型推理谈谈为什么卷积加速更喜欢nhwclayout(代码片段)

 本文主要讨论一下为什么卷积加速更加喜欢NHWC的数据排布。 我目前接触过的数据排布类型(主要针对卷积)有NCHW(pytorch、caffe),NHWC(Tensorflow,也是TVMGPU和寒武纪MLUCore上更喜欢的dataLayout),CHW(TensorRT里不考虑动态batch... 查看详情

模型推理一文看懂googletpu脉动阵列加速卷积计算原理

 本教程详细解释了GoogleTPU脉动阵列加速卷积计算原理。 TPU中计算卷积的方式和GPU不同,主要是依靠一种称为“脉动阵列”的硬件电路结构来实现的。脉动阵列的主体部分是一个二维的滑动阵列,其中每一个节点都是... 查看详情

测量 NVIDIA 张量核心加速

...心对我的代码的影响(用于测试目的的Tensorflow/Python中的卷积神经网络)。如何测量张量核心加速?是否可以禁用张量核心并在有/没有它们的情况下运行相同的代码?我尝试过 查看详情

卷积深度信念网络 (CDBN) 与卷积神经网络 (CNN)

】卷积深度信念网络(CDBN)与卷积神经网络(CNN)【英文标题】:ConvolutionalDeepBeliefNetworks(CDBN)vs.ConvolutionalNeuralNetworks(CNN)【发布时间】:2015-04-0912:38:00【问题描述】:最后,我开始学习神经网络,我想知道卷积深度信念网络和卷积网... 查看详情

《深入浅出图神经网络》gnn原理解析☄学习笔记卷积神经网络(代码片段)

...浅出图神经网络》GNN原理解析☄学习笔记(三)卷积神经网络文章目录《深入浅出图神经网络》GNN原理解析☄学习笔记(三)卷积神经网络卷积与池化信号处理中的卷积单通道卷积多通道卷积池化卷积神经网络卷... 查看详情