【EagleEye】2020-ECCV-EagleEye: Fast Sub-net Evaluation for Efficient Neural Network Pruning-论文详解

文章目录

  • 【EagleEye】2020-ECCV-EagleEye: Fast Sub-net Evaluation for Efficient Neural Network Pruning-论文详解
  • 一、Introduction
  • 二、Pipeline
  • 三、Analysis (提出疑问)
  • 四、Correlation Measurement (相关性验证)
  • 五、BN层的工作原理
  • 六、Experiments (实验结果)
  • 七、EagleEye pruning algorithm (剪枝算法)
  • 八、Conclusion

y=λx−uσ2+ϵ+β{\color{Blue} y=\lambda \frac{x-u}{\sqrt{\sigma ^{2}+\epsilon }}+\beta }y=λσ2+ϵ​x−u​+β σB2=1N−1∑i=1N(Xi−σB)2{\color{Blue} \sigma _{B}^{2}=\frac{1}{N-1}\sum_{i=1}^{N}(Xi-\sigma _{B})^{2}}σB2​=N−11​i=1∑N​(Xi−σB​)2 μt=mμt−1+(1−m)μB{\color{Red} \mu _{t}=m\mu _{t-1}+(1-m)\mu _{B}}μt​=mμt−1​+(1−m)μB​ σt2=mσt−12+(1−m)σB2{\color{RED} \sigma_{t}^{2}=m\sigma _{t-1}^{2}+(1-m)\sigma _{B}^{2}}σt2​=mσt−12​+(1−m)σB2​

一、Introduction

  • 上周讲了一篇Three Dimension Pruning的论文,最近又读了两篇CVPR2020 oral等有时间与大家分享:

这篇论文是去年 ECCV2020oral 的工作,提出了一个对于pruning task的trick,将剪枝后的subnet的BN层中的统计参数做了一个更新,并指出之前的用Full-net的BN层参数inference剪枝后的subnet的做法是不具有有效性的。

  • 首先,作者提出我们传统的对模型做pruning流程是:第一步首先去训练一个参数过度、模型比较大的网络,第二步对它以一定的剪枝率做剪枝。第三步,再进行finetuning,恢复损失的精度。但是作者指出,如果我们每次都对剪枝之后的那么多模型去做finetuning的话,会需要大量的计算资源和训练时间,而且需要比较所有剪枝后模型finetuning的结果才能找到我们最佳的那个剪枝模型,也就是这个流程:

  • 理论上我们如果把每一个可能得到的子网络全都进行一个fine-tuning,进行一个额外的epochs的fine-tuning,得到的candidates我们选出一个精度最高的,作为我们最后deliver的剪枝过后的最优子网络
  • 但是这个过程效率是非常低的,因为Fine-tuning这个过程本身就是training,本身就是expensive的一个操作,而我们可能的sub-nets种类又非常多,所以如果针对这种large-scale的subnet的空间,如果都去做这个fine-tuning的话,开销就会非常的大。

后面就出现了很多工作,它将这些模型直接去做一个小范围的推理,得到inference精度最高的作为最好的网络candidate,拿去做finetuning。这样就可以避免finetuning的模型个数,实现高效的剪枝。
也就是:

二、Pipeline


这是作者最终的pipeline。

  • 其实这个做法还是很普遍的,他将我们的神经网络的full-net在进行静态剪枝之后呢,就直接去做一个Inference,然后将inference最高的子网络摘选出来作为一个winner candidate,去做fine-tuning。
  • 其实到这里这个工作还不是本文独创的,本文对这个方法进行了讨论,本文把这个方法叫做vanilla evalution,就是把一些静态的inference accurancy去选择子网络的方法,是有失偏颇的,这个讨论后面会讲到为什么这样的selection是不公平的。

三、Analysis (提出疑问)

  • 下图是对sub-nets进行推理后的精度直方图:
    Fig. 2. A typical pipeline for neural network training and pruning

我们注意到,如果直接将静态剪枝后的子网络进行推理,精度会很差。暗红色的部分是我们进行一个随机pruning之后的sub-nets,进行推理后的精度直方图,精度在0.1以下,将sub-net全部进行fine-tuning呢,精度就会全部提升到60%以上这个范围内,从不到10%精度的子网络,就一下跨到60%这个范围。这两个结果的精度差距如此之大,我们就可以提出两个疑问:

  • 1. 既然我们的剪枝算法是依照某种规则,将我们所谓的不重要unimportance的通道或卷积核给他去掉,那为什么去掉不重要的卷积核之后精度会掉到如此低的区域,这也是说不通的现象。
  • 2. 第二个问题自然是,低精度的网络和最终收敛的子网络之间有多大的相关性?如果我们根据performance这么差的subnets去选出performance最优的自网络,这种选择它的可靠性有多大,应不应该去拿这些低精度的子网络去做选择,到底有多大的参考性?
  • 其实第一个疑问问的是finetuning的作用,这个问题其实比较根本,从Fig2的右图可以看出,随着finetune的epochs的迭代,我们发现静态的subnets它的weights其实没有一个非常大的变化,其实是一个非常gentle的shift,所以weight在finetune当中的变化可能不是导致这些subnets有这么低精度的原因。
  • 对上一句话做一个指正,作者是因为这些subnets的Accuracy非常低才怀疑哪里出了问题,而正常pruning之后只要剪枝率不是特别高,那Accuracy降得并不多的!比如从95.23%降到94.89%。

四、Correlation Measurement (相关性验证)

  • 另一个量化的分析这些低精度的子网络跟最后把它们finetune之后的精度去做一个相关性的分析,我们发现其实没有什么关系。

  1. 这里横坐标表示vanilla evaluation也就是静态剪枝的这些子网络的精度,纵坐标就是我们把它finetune之后的精度,我们发现其实并没有什么相关性。

换句话说,如果我们从这群静态剪枝之后的subnets中去选择一个精度较高的子网络,并不能代表他经过finetune之后就是一个优质的子网络。

  • 我们首先分析原因。
  • 发现它主要出在这个BN上:

  • 上面这条链路表示我们训练时使用的statistics values(mean,方差等)是通过统计基于Full-net来得到的,但是我们其实进行剪枝之后,这个structure就发生了变化,但是在inference的过程中依然错误地使用了Full-net的这些参数。因此就造成在inference中这些子网络的精度就非常的差

然后本篇论文的亮点来了,作者做了一个非常简单又值得观察的操作,就是通过几个Inference的过程,将BN的参数进行修正,这个过程是非常快速的,在GPU里只有几秒的延迟。

  • 当我们将BN的Mean和variance进行纠正后就发现子网的inference的静态精度就非常高,说明之前第一个问题-------inference的精度掉的那么大的原因就是BN层的参数没有更新,不应该使用Full-net的参数。

五、BN层的工作原理

先解释一下BN层的工作原理,BN层是对每一个batch的数据作归一化:y=λx−uσ2+ϵ+β{\color{Blue} y=\lambda \frac{x-u}{\sqrt{\sigma ^{2}+\epsilon }}+\beta }y=λσ2+ϵ​x−u​+β

  • 其中,x−uσ2+ϵ{\color{Blue} \frac{x-u}{\sqrt{\sigma ^{2}+\epsilon }}}σ2+ϵ​x−u​将一个batch的 feature map 均值归一化到0,方差归一化到1;
    γ\gammaγ,β\betaβ分别是缩放系数和偏移系数,是可学习的参数。每个batch的Mean和variance的计算方式如下:

μB=1N∑iNXi{\color{Blue}\mu _{B}=\frac{1}{N}\sum_{i}^{N}Xi}μB​=N1​i∑N​XiσB2=1N−1∑i=1N(Xi−σB)2{\color{Blue} \sigma _{B}^{2}=\frac{1}{N-1}\sum_{i=1}^{N}(Xi-\sigma _{B})^{2}}σB2​=N−11​i=1∑N​(Xi−σB​)2

  • 训练过程中不同 iteration之间BN层使用的均值和方差使用以下 momentum 的方式更新:

μt=mμt−1+(1−m)μB{\color{Red} \mu _{t}=m\mu _{t-1}+(1-m)\mu _{B}}μt​=mμt−1​+(1−m)μB​σt2=mσt−12+(1−m)σB2{\color{RED} \sigma_{t}^{2}=m\sigma _{t-1}^{2}+(1-m)\sigma _{B}^{2}}σt2​=mσt−12​+(1−m)σB2​

  • 测试阶段的输入一般是单张图片,没有batch的单位,因此训练结束后的μt,σt2{\color{Blue} \mu _{t} , \sigma _{t}^{2}}μt​,σt2​即作为网络BN层的值,称为"global BN statistics"。

六、Experiments (实验结果)

链接: link.

Adaptive Batch Normalization

  • vanilla evaluation 使用"global BN statistics"作为剪枝模型的BN层参数,会导致剪枝模型性能严重下降以及两阶段acc的低相关性。
  • 作者提出Adaptive BN的方法来重新计算剪枝后模型BN层的值,μt,σt2{\color{Blue} \mu _{t} , \sigma _{t}^{2}}μt​,σt2​具体来说即冻结网络参数使用公式(4)进行几次前向(不进行反向),来更新BN层的值。 vanilla evaluation 与 使用adaptive BN 的相关性如下图:

  • 另一方面,我们比较了 global BN statistics,adaptive BN statistics与true statistics之间的距离,如下所示:

    Effectiveness 有效性:
  • 在CIFAR-10上的结果。左图为Resnet-56,右图为MobilenetV1.

  • 在Imagenet上的结果。arch是MobilenetV1。
    可见在Imagenet上,EagleEye的剪枝率和SOTA的Meta-Pruning、AMC等剪枝方法结果差不多的情况下,Top1和Top5的精度都是更优一些,但这里没有给出Parameters的PR,感觉作者是不是有一点心虚,毕竟参数量的PR也是很重要的。

七、EagleEye pruning algorithm (剪枝算法)

  1. 对layers剪枝
    生成一个剪枝结构,即一个Layer-wise 剪枝率的vector:(r1,r2,r3...,rL){\color{Blue}(r_{1},r_{2},r_{3}...,r_{L})}(r1​,r2​,r3​...,rL​) ,这里使用随机采样。
  2. 对Filters剪枝
    根据第一步得到的Layer-wise剪枝率,对full-size模型进行剪枝,这里使用L1-norm重要性分数,剪掉重要性低的filters。
  3. Adaptive-BN-based candidate 估计模块
    对每个剪枝模型重新计算BN statistics,即使用adaptive BN更新BN层,在ImageNet上用来更新BN的dataSet为 155{\color{Blue} \frac{1}{55}}551​ 的training set,更新50个iteration。每个剪枝模型在单张2080Ti上完成adaptive BN的更新只需要10+秒。
    最后由adaptive BN更新后的剪枝模型性能选出最有潜力的剪枝模型进行fine-tune。

八、Conclusion

本文针对以往直接对静态剪枝后inference精度下降的不足,以及对静态剪枝后的sub-nets和最后finetune最优的网络之间不具有相关性的现象,提出了一个将BN的参数进行修正的trick。

但是只修改BN层中的两个参数就能对finetune后的结果有这么好的提升吗?如果有时间我会复现一下这篇论文。

第二篇CSDN,真不错!

【EagleEye】2020-ECCV-EagleEye: Fast Sub-net Evaluation for Efficient Neural Network Pruning-论文详解相关推荐

  1. FastGCN: fast learning with graph convolutional networks via importance sampling 论文详解 ICLR 2018

    文章目录 1 简单介绍 概率测度 probability measure 自助法 bootstrapping GCN面临的两个挑战 解决思路(创新点) 2 相关工作 3 通过采样进行训练和推理 定理1 ...

  2. Fast R-CNN论文详解

    Fast R-CNN论文详解 作者:ture_dream &创新点 规避R-CNN中冗余的特征提取操作,只对整张图像全区域进行一次特征提取: 用RoI pooling层取代最后一层max po ...

  3. 2020年 第11届 蓝桥杯 Java B组 决赛真题详解及小结

    蓝桥杯 Java B组 省赛决赛 真题详解及小结汇总[2013年(第4届)~2021年(第12届)] 第11届 蓝桥杯-第1.2次模拟(软件类)真题-(2020年3月.4月)-官方讲解视频 说明:大部 ...

  4. 动图+独家思维导图!让你秒懂李宏毅2020深度学习(四)—— CNN(Convolutional Neural network)

    动图+独家思维导图!让你秒懂李宏毅2020深度学习(四)-- CNN(Convolutional Neural network) 系列文章传送门: 文章目录 动图+独家思维导图!让你秒懂李宏毅2020 ...

  5. 《TextBoxes: A Fast Text Detector with a Single Deep Neural Network》论文笔记

    参考博文: 日常阅读论文,这是在谷歌学术上搜索其引用CRNN的相关文献中被引数量比较高的一篇OCR方向的文章,这里拿来读一读. 文章目录 make decision step1:读摘要 step2:读 ...

  6. Object Detection--RCNN,SPPNet,Fast RCNN,FasterRCNN论文详解

    物体检测 图片分类和物体检测的区别 输出不同 检测的目标不同 物体检测算法常用到的概念 Bounding Boxbbox Intersection over UnionIoU 非极大值抑制 Non-M ...

  7. 综述的综述!5 篇2020 年「图像分割算法」最佳综述论文详解

    在过去的一年中,计算机视觉领域出现了许多优秀的工作,并推动了相关领域的技术发展与进步.极市平台对2020年出现的全部计算机视觉综述论文进行了分方向梳理.本篇文章为2020年图像分割方向的综述论文汇总, ...

  8. Fast R-CNN论文详解 - CSDN博客

    废话不多说,上车吧,少年 paper链接:Fast R-CNN &创新点 规避R-CNN中冗余的特征提取操作,只对整张图像全区域进行一次特征提取: 用RoI pooling层取代最后一层max ...

  9. Lung Cancer Recurrence Risk Prediction through Integrated Deep Learning Evaluation【AI 肺癌复发预测】详解

    [利用深度学习评估预测肺癌复发风险:Lung Cancer Recurrence Risk Prediction through Integrated Deep Learning Evaluation ...

  10. 正则只能小于0负数_2019–2020学年七年级数学期末考试考点之正数与负数考点详解...

    七年级数学期末考试第一讲之正数与负数考点详解 嗨,大家好,这里是摆渡学涯.马上我们就要迎来期末考试了,你们有没有开始复习呢?这次课程咱们来为大家讲一下数的考点,教你轻松学数学. 数的概念 数从是否为正 ...

最新文章

  1. 打印机十大共性故障解决方法
  2. jquery实现表格拖拽排序
  3. windows防火墙命令
  4. TCP之三次握手四次挥手 1
  5. STUN响应消息中添加MAPPED_ADDRESS
  6. 劫持 function_core.php,function_core.php文件中常用函数
  7. 图片image和byte处理,fileupload上传图片
  8. java layoutmanager_Java Swing 探索(一)LayoutManager
  9. 自学c语言中相关知识,设计出医院住院管理系统.要求如下所述:,C语言课程设计题Z目.doc...
  10. 为什么你说的话别人不愿意听?
  11. 九宫格 java_java输出九宫格的程序问题
  12. 如何能顺利往表中允许为null的字段插入null值(参数绑定)
  13. Ext3文件读写流程概述
  14. 呼叫次数软件_如何以软件工程师的身份进行首次呼叫轮换
  15. 为什么你写了一万小时的代码,却没能成为架构师?| 程序员有话说
  16. {大学快毕业的程序员,现在开始写博客}
  17. 已解决:win11无法连接网络共享打印机的方法
  18. HDU 4411 Arrest 最小费用流
  19. Canvas线条花环
  20. 为什么要有uboot?

热门文章

  1. scrapy--Rule()与LinkExtractor()函数理解
  2. 面试那些事儿- UI设计面试常见问题
  3. 对Java语言入门初学者的一些建议
  4. property中ref、value、name的区别
  5. 年度光电领域盛会——CIOE中国光博会开幕在即!小枣君将全程在线直播!
  6. CityEngine2016-学习笔记(2)Shape Operations
  7. 干掉hao123恶意植入浏览器
  8. P2000 拯救世界(生成函数裸题+NTT高精)
  9. 理解服务器证书 CASSL
  10. ArcEngine中的ICommand和ITool