前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >深度学习500问——Chapter17:模型压缩及移动端部署(3)

深度学习500问——Chapter17:模型压缩及移动端部署(3)

作者头像
JOYCE_Leo16
发布2024-10-02 08:06:05
230
发布2024-10-02 08:06:05
举报
文章被收录于专栏:计算机视觉

17.7 压缩和加速方法如何选择

(1)对于在线计算内存存储有限的应用场景或设备,可以选择参数共享和参数剪枝方法,特别是二值量化权值和激活、结构化剪枝。其他方法虽然能够有效的压缩模型中的权值参数,但无法减小计算中隐藏的内存大小(特征图)。

(2)如果在应用中用到的紧性模型需要利用预训练模型,那么参数剪枝、参数共享以及低秩分解将成为首要考虑的方法。相反地,若不需要借助预训练模型,则可以考虑紧性滤波设计及知识蒸馏方法。

(3)若需要一次性端对端训练得到压缩与加速后模型,可以利用基于紧性滤波设计的深度神经网络压缩与加速方法。

(4)一般情况下,参数剪枝,特别是非结构化剪枝,能大大压缩模型大小,且不容易丢失分类精度。对于需要稳定的模型分类的应用,非结构化剪枝成为首要选择。

(5)若采用的数据集较小时,可以考虑知识蒸馏方法。对于小样本的数据集,学生网络能够很好地迁移教师模型的知识,提高学生网络的判别性。

(6)主流的5个深度神经网络压缩与加速算法相互之间是正交的,可以结合不同技术进行进一步的压缩与加速。如:韩松等人[30]结合了参数剪枝和参数共享;温伟等人[64]以及AIvarez等人[85]结合了参数剪枝和低秩分解。此外对于特定的应用场景,如目标检测,可以对卷积层和全连接层使用不同的压缩与加速技术分别处理。

参考《深度神经网络压缩与加速综述》

17.8 改变网络结构设计为什么会实现模型压缩、加速

17.8.1 Group convolution

Group convolution最早出现在ALexNet中,是为了解决单卡显存不够,将网络部属到多卡上进行训练而提出。Group convolution可以减少单个卷积 1/g 的参数量。如何计算的呢?

假设:

  • 输入特征的维度为
HWC_1
HWC_1

  • 卷积核的维度为
H_1W_1C_1
H_1W_1C_1

,共

C_2
C_2

  • 输出特征的维度为
H_1W_1C_2
H_1W_1C_2

传统卷积计算方式如下:

传统卷积运算量为:

A = H*W * h1 * w1 * c1 * c2
A = H*W * h1 * w1 * c1 * c2

Group convolution是将输入特征对维度c1分为g份,每个group对应的channel数为 c1/g,特征维度 H*W*c1/g,每个group对应对卷积核对维度也相应发生改变为 h1*w1*c1/g,共 c2/g个;每个group相互独立运算,最后将结果叠加在一起。

Group convolution计算方式如下:

Group convolution运算量为:

B = H * W * h1 * w1 * c1/g * c2/g * g
B = H * W * h1 * w1 * c1/g * c2/g * g

Group卷积相对于传统卷积的运算量为:

\dfrac{B}{A} = \dfrac{ H * W * h1 * w1 * c1/g * c2/g * g}{H * W * h1 * w1 * c1 * c2} = \dfrac{1}{g}
\dfrac{B}{A} = \dfrac{ H * W * h1 * w1 * c1/g * c2/g * g}{H * W * h1 * w1 * c1 * c2} = \dfrac{1}{g}

由此可知:group卷积相对于传统卷积减少了 1/g 的参数量。

17.8.2 Depthwise separable convolution

Depthwise separable convolution 是由 depthwise conv 和 pointwise conv构成。

depthwise conv(DW)有效减少参数数量并提升运算速度。但是由于每个feature map 只被一个卷积核卷积,因此经过DW输出的feature map不能只包含输入特征图的全部信息,而且特征之间的信息不能进行交流,导致“信息流通不畅”。

pointwise conv(PW)实现通道特征信息交流,解决DW卷积导致“信息流通不畅”的问题。假设输入特征的维度为 H*W*c1;卷积核的维度为 h1*w1*c1,共c2个;输出特征的维度为 H1*W1*c2。

传统卷积计算方式如下:

传统卷积运算量为:

A = H * W * h1 * w1 * c1 * c2
A = H * W * h1 * w1 * c1 * c2

DW卷积的计算方式如下:

DW卷积运算量为:

B_{DW} = H * W * h1 * w1 * 1 * c1
B_{DW} = H * W * h1 * w1 * 1 * c1

PW卷积的计算方式如下:

PW卷积运算量为:

B_{PW} = H_m * W_m * 1 * 1 * c_1 * c_2
B_{PW} = H_m * W_m * 1 * 1 * c_1 * c_2

Depthwise separable convolution运算量为:

B = B_{DW} + B_{PW}
B = B_{DW} + B_{PW}

Depthwise separable convolution相对于传统卷积的运算量为:

\dfrac{B}{A} = \dfrac{ H * W * h_1 * w_1 * 1 * c_1 + H_m * W_m * 1 * 1 * c_1 * c_2}{H * W * h1 * w1 * c_1 * c_2}\\= \dfrac{1}{c_2} + \dfrac{1}{h_1 * w_1}
\dfrac{B}{A} = \dfrac{ H * W * h_1 * w_1 * 1 * c_1 + H_m * W_m * 1 * 1 * c_1 * c_2}{H * W * h1 * w1 * c_1 * c_2}\\= \dfrac{1}{c_2} + \dfrac{1}{h_1 * w_1}

由此可知,随着卷积通道数的增加,Depthwise separable convolution的运算量相对于传统卷积更少。

17.8.3 输入输出的channel相同时,MAC最小

卷积层对输入和输出特征通道数相等时MAC最小,此时模型速度最快。

假设feature map的大小为h*w,输入通道

c_1
c_1

,输出通道

c_2
c_2

已知:

FLOPs = B = h * w * c1 * c2=> c1 * c2 = \dfrac{B}{h * w}
FLOPs = B = h * w * c1 * c2=> c1 * c2 = \dfrac{B}{h * w}

根据均值不等式得到

(c1-c2)^2>=0
(c1-c2)^2>=0

,等式成立的条件是c1=c2,也就是输入特征通道数和输出特征通道数相等时,在给定FLOPs前提下,MAC达到取值的下界。

17.8.4 减少组卷积的数量

过多的group操作会增大MAC,从而使模型速度变慢。

由以上公式可知,group卷积想比与传统的卷积可以降低计算量,提高模型的效率;如果在相同的FLOPs时,group卷积为了满足FLOPs会是使用更多的channels,可以提高模型的精度。但是随着channel数量的增加,也会增加MAC。

FLOPs:

B = \dfrac{h * w * c1 * c2}{g}
B = \dfrac{h * w * c1 * c2}{g}

MAC:

MAC = h * w * (c1 + c2) + \dfrac{c1 * c2}{g}
MAC = h * w * (c1 + c2) + \dfrac{c1 * c2}{g}

由MAC、FLOPs可知:

MAC = h * w * c1 + \dfrac{B*g}{c1} + \dfrac{B}{h * w}
MAC = h * w * c1 + \dfrac{B*g}{c1} + \dfrac{B}{h * w}

当FLOPs固定(B不变)时,g越大,MAC越大。

17.8.5 减少网络碎片化程度(分支数量)

模型中分支数量越少,模型速度越快。

此结论主要是由实验结果所得。

以下为网络分支数和各分支包含的卷积数目对神经网络速度的影响。

实验中所使用到的基本网络结构,分别将它们重复10次,然后进行实验。实验结果如下:

由实验结果可知,随着网络分支数量多增加,神经网络的速度在降低。网络碎片化程度对GPU的影响效果明显,对CPU不明显,但是网络速度同样在降低。

17.8.7 减少元素级操作

元素级操作所带来对时间消耗也不能忽视。

ReLU、Tensor相加,Bisa相加的操作,分离卷积(depthwise convolution)都定义为元素级操作。

FLOPs大多数都是对于卷积计算而言的,因为元素级操作的FLOPs相对要低很多。但是过多的元素级操作也会带来时间成本。ShuffleNet作者对ShuffleNet v1和MobileNet v2对几种层操作的时间消耗做了分析,发现元素级操作对于网络速度的影响也很大。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-10-01,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 17.7 压缩和加速方法如何选择
  • 17.8 改变网络结构设计为什么会实现模型压缩、加速
    • 17.8.1 Group convolution
      • 17.8.2 Depthwise separable convolution
        • 17.8.3 输入输出的channel相同时,MAC最小
          • 17.8.4 减少组卷积的数量
            • 17.8.5 减少网络碎片化程度(分支数量)
              • 17.8.7 减少元素级操作
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档