深度模型压缩论文(01)- Meta Filter Pruning to Accelerate Deep Convolutional Neural Networks

文章目录

    • 1.摘要和介绍
      • 1.1摘要部分
    • 2.背景和方法
      • 2.1 背景
      • 2.2 贡献
      • 2.3 方法
    • 3.实验和结果
      • 3.1 实验
      • 3.2 结果
    • 4.总结和展望
      • 4.1 总结
      • 4.2 展望

本系列是在阅读深度神经网络模型小型化方面论文时的笔记!内容大部分从论文中摘取,也会有部分自己理解,有错误的地方还望大家批评指出!

论文链接:Meta Filter Pruning to Accelerate Deep Convolutional Neural Networks

1.摘要和介绍

1.1摘要部分

原文摘要:
Existing methods usually utilize pre-defined criterions, such as ‘ p-norm, to prune unimportant filters. There are
two major limitations in these methods. First, the relations of the filters are largely ignored. The filters usually work
jointly to make an accurate prediction in a collaborative way. Similar filters will have equivalent effects on the network prediction, and the redundant filters can be further pruned. Second, the pruning criterion remains unchanged during training. As the network updated at each iteration, the filter distribution also changes continuously. The pruning criterions should also be adaptively switched.
传统的通道裁剪方法都是需要预先定义通道的裁剪准则,然后使用该一成不变的准则对网络进行裁剪,而其中使用的是裁剪准则是不考虑通道之间的相关性,如:lp_norm。该方法存在下面两个问题:1)没有考虑网络中不同通道之间的相关性。一般而言,相关性大的两个通道就可以裁剪掉其中的一个。2)没有考虑网络更新过程中状态的改变。应该使用自适应的通道裁剪准则。
In this paper, we propose Meta Filter Pruning (MFP) to solve the above problems. First, as a complement to the existing ‘p-norm criterion, we introduce a new pruning criterion considering the filter relation via filter distance.
Additionally, we build a meta pruning framework for filter pruning, so that our method could adaptively select the most appropriate pruning criterion as the filter distribution changes. Experiments validate our approach on two image classification benchmarks. Notably, on ILSVRC-2012, our MFP reduces more than 50% FLOPs on ResNet-50 withonly 0.44% top-5 accuracy loss.
文章提出了一种基于元学习的通道删除方法。主要是改进了上面提出的另个问题。其中为了解决第一个问题,提出了两种用于度量两个不同通道之间的相关性的方法,并将其作为新的通道裁剪准则,与常用lp_norm准则一起构成裁剪准则候选集合;为了解决第二个问题,提出了一种基于元学习的自动选择合适的通道裁剪准则框架,其在每一个epoch中会根据当前网络的状态,自动从通道裁剪集合中选择合适的裁剪准则。最终,本文实现了在ILSVRC-2012数据集上,对模型resnet50裁剪50%的flops,得到0.44%的top_5的精度。

2.背景和方法

2.1 背景

  • 为了在计算资源有限的平台上(手机等终端设备)上使用深度神经网络模型,对模型的裁剪是必须的。其中对模型的裁剪分为:权重的裁剪(weight pruning)和卷积通道( filter pruning)的裁剪。其中前者是对神经元进行裁剪,而后者是将整个通道都删除了。前者因为得到的是非结构化稀疏(unstructured sparsity)无发很好的利用基本线性代数子程序库(BLAS)进行加速,所以意义不是很大,所以大家基本上都是研究通道级别的裁剪,因为其得到的是结构化的稀疏( structured sparsity)。
    在这里插入图片描述
  • 在过去的工作中,裁剪的准则主要分为两种:1)系数值越小则越不重要(smaller-norm-less-important),即:如果某个通道的卷积系数或者BN层的稀疏比较小,那么该通道对于结果贡献就不大,可以删除。所以,该类方法大多采用正则化的方法使得模型的系数稀疏化,从而达到裁剪通道的目的。但是该方法没有考虑到通道之间的相关性。2)基于通道之间的相关性(Relational Criterion),相关性越大的两个通道,则必定有一个是冗余的。采用的方法是使用几何均值筛选中模型中最不重要的通道,因为越是接近集合均值的通道这说明和剩下的通道相关性越大,则可以被删除。
  • 传统的通道裁剪存在以下两个问题:1)通道之间的相关性度量方法尝试太少;2)由于通道的裁剪,模型中卷积核的参数分布是动态变换的,所以固定不变的通道裁剪准则是不是不太合适。

2.2 贡献

  • 提出了两种新的通道相关性度量的方法
  • 提出了基于元学习的通道裁剪准则自适应变换框架,从而尽可能的降低裁剪前后模型之前的loss差异
  • 在常用的数据集:cifar10和ImageNet上对常用的模型(resnet , vggnet等)进行试验,得到的实验记过非常好。

2.3 方法

在这里插入图片描述

  • 在每一个epoch过程中,分别会根据lp_norm准则和distace_norm准则,对网络中所有的通道进行排序,然后通过元学习的方法筛选出适合当前状态的通道裁剪准则,并按照该准则的分数对模型进行裁剪。
  • 其中距离准则下使用了Minkowski Distance和Cosine Distance,并通过计算当前通道与剩下所有通道之间距离之和然后再求平均得到的值表示该通道的相关性分数,分数越大则表示通道越重要。
  • lp_norm准则下,使用的是l1和l2正则化来产生稀疏性,然后计算当前通道参数的1范数或者2范数作为通道重要性的分数,分数越大,则通道越重要。
  • 文章的优化目标是降低模型裁剪前后元属性,其中元属性可以为:sparsity level κ, the mean value of weights,
    top-5 loss, top-1 loss等。

3.实验和结果

3.1 实验

  • 数据集:CIFAR-10 , ILSVRC-2012
  • 模型: ResNet , VGGNet
  • 每个实验重复三次,并对结果取均值和方差
  • Minkowski distance with p = 1; 2 cosine distance

3.2 结果

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 通过上面的实验结果可以看出,无论是在resnet模型还是vggnet模型,在数据集cifar10和imgnet上的结果都比其他方法要好,即:更大的裁剪量可以得到更好的模型
  • 在裁剪量小于40%的时候,在resnet-100,数据集cifar10上,得到的裁剪后的模型精度比未裁剪的要好。
  • This means the performance of our framework is not sensitive to the pruning interval
  • we find that during the early training process, the distance-based criteria are adopted less than norm-based criteria

4.总结和展望

4.1 总结

  • 本文的方法不仅使用基于系数大小的裁剪准则,还使用了基于相关性的裁剪准则,使得结果更好
  • 本文提出了一种基于元学习的自适应选取裁剪准则的框架,可以在每个epoch下,更根据模型的状态选择合适的裁剪专责。
  • MFP achieves comparable performance with state-of-theart methods in several benchmarks.

4.2 展望

  • 目前裁剪准则的查找是在epoch级别上,未来可以考虑将其做在层上。
  • 可以尝试更多的元属性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/445135.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

深度模型压缩论文(03)- Be Your Own Teacher: Improve the Performance of Convolutional Neural Networks via Self

文章目录1.摘要和背景1.1 摘要1.2 背景2.方法和贡献2.1 方法2.1.1 训练过程2.1.2 loss介绍2.2 贡献3.实验和结果3.1 实验3.2 结果4.总结和展望4.1 总结4.2 展望主要贡献:基于网络蒸馏方法,提出了一种提升裁剪后模型的精度的方法!将训练时间大…

关系数据库——基础

数据库系统概论 四个基本概念 数据:数据库中存储的基本对象,描述一个事物的符号记录,数据和其语义不可分开说 数据库(DB):是长期储存在计算机内、有组织的、可共享的大量数据的集合。 数据库管理系统&a…

Python(27)-模块

模块、包1.模块导入的方式2.使用as给模块取一个别名(大驼峰命名法)3.从模块中导入部分工具4.从模块中导入全部工具5.模块搜索顺序6__name__7.包8.发布模块、安装模块、卸载包9.pip安装第三方模块本系列博文来自学习《Python基础视频教程》笔记整理&#…

如何使用docker配置深度学习开发环境

文章目录1.底层驱动的安装1.1 操作系统的安装1.2 显卡驱动的安装1.3 cuda的安装2.使用docker配置深度学习开发环境2.1 docker的安装2.2 nvidia_docker的安装2.3 安装过程中的问题2.3.1 docker和nvidia_docker的版本不匹配的问题。2.3.2 解决每次运行docker命令的时候要加sudo.2…

反射全解

反射的概念 反射的引入: Object obj new Student(); 若程序运行时接收到外部传入的一个对象,该对象的编译类型是Object,但程序又需要调用该对象运行类型的方法: 1.若编译和运行类型都知道,使用 instanceof判断后&…

CRegKey 注册表操作

1.简介 CRegKey提供了对系统注册表的操作方法,通过CRegKey类,可以方便的打开注册表的某个分支或子键(CRegKey::Open),可以方便的修改一个键的键值(CRegKey::SetValue),也可以查询某…

进程基础

进程的基本概念 程序顺序执行的特征: 1)顺序性:处理机严格按照程序所规定的顺序执行,每一步操作必须在下一步操作开始前执行 2)封闭性:程序在封闭的环境下运行,程序独占资源,资源的状…

用Docker容器自带的tensorflow serving部署模型对外服务

相信很多人和我一样,在试图安装tensorflow serving的时候,翻遍了网上的博客和官网文档,安装都是以失败而告终,我也是一样,这个问题折磨了我两个星期之久,都快放弃了。幸运的是在同事的建议下,我…

C资源

云风最近写了一篇博客《C语言的前世今生》。作为长期使用C语言开发网络游戏服务器的程序员,云风是有理由写这样一篇文字,不过还是感觉谈的不够深入,C语言在业界使用的现状没有怎么描写,有些意犹未尽。在这里想比较系统的谈谈个人对…

面试题汇总---深度学习(图像识别,NLP内容)

文章目录1.基本概念1.1 为什么神经网络中深度网络的表现比广度网络表现好?1.2 推导BP算法1.3 什么是梯度消失和梯度爆炸?1.4 常用的激活函数有哪些?1.5 常用的参数更新方法有哪些?1.6 解决过拟合的方法?数据层面模型层…

Python(28)-文件,os模块

文件1. 文件2. 文件的基本操作3. 读取文件open()3.1 文件指针: 标记从哪一个位置开始读取数据.3.2 文件的打开方式mode3.3 文件按行读取3.3.1 readline()3.3.2 readlines()4.文件输出f.write(),print()5.文件复制5.1 小文件复制(搬家)5.2 大文件复制&…

IOCP的程序

C代码 #include <winsock2.h> #include <mswsock.h> #include <windows.h> #include <stdio.h> #include <stdlib.h> #include <assert.h> #include "vld.h" #pragma message("automatic link to ws2_32.lib and…

PaperNotes(3)-图像分割-RCNN-FCN-Boxsup

图像分割算法对比小结1.{基本概念}2.{R-CNN}2.1R-CNN 网络结构选择性搜索算法为什么选择SVM作分类器边框回归2.2{R-CNN 训练}2.3{R-CNN实验结果}2.4{R-CNN语义分割}2.5{补充材料}2.5.1{R-CNN建议区域放缩}2.5.2{IOU阈值设置不一样的原因}2.5.3{Bounding-box回归修正}2.6{R-CNN存…

Python模块(3)--PIL 简易使用教程

PIL模块-用与记1.图片导入Image.open()2.图像显示.show()4.查看图片属性.format,.size,.mode3.图像格式转换.convert()4.图像模式“L”&#xff0c;“RGB”,"CYMK"5. 图片旋转.rotate()旋转方式1&#xff1a;旋转不扩展旋转方式2&#xff1a;旋转扩展旋转方式3&#…

输入输出系统

I/O设备&#xff1a;输入输出和存储功能的设备 I/O设备的分类 按传输的速度&#xff1a; 低速设备&#xff08;如键盘、鼠标、语音输入输出设备&#xff09; 中速设备&#xff08;如行式打印机、激光打印机等&#xff09; 高速设备&#xff08;如磁带机、磁盘机、光盘机等&…

模拟银行家算法

介绍 data.h #ifndef _Data_h_ #define _Data_h_#include <stdio.h> #include <stdlib.h> #include <string.h>#define ElemType PCB #define Status int #define true 1 #define false 0 #define OK 1 #define ERROR 0 #define RESOURCE_NUM …

js知识点汇总

1.本门课的作用&#xff08;JavaScript的作用&#xff09;所有基于Web的程序开发基础 2.一种计算机客户端脚本语言&#xff0c;主要在Web浏览器解释执行。 3.浏览器中Javascript&#xff0c;用于与用户交互&#xff0c;以及实现页面中各种动态特效 4.在HTML文件中&#xff0…

关于Java中String的问题

String 对象的两种创建方式&#xff1a; String str1 "abcd";//先检查字符串常量池中有没有"abcd"&#xff0c;如果字符串常量池中没有&#xff0c;则创建一个&#xff0c;然后 str1 指向字符串常量池中的对象&#xff0c;如果有&#xff0c;则直接将 st…

如何判断对象已经死亡

引用计数 给对象中添加一个引用计数器&#xff0c;每当有一个地方引用它&#xff0c;计数器就加 1&#xff1b;当引用失效&#xff0c;计数器就减 1&#xff1b;任何时候计数器为 0 的对象就是不可能再被使用的。 这个方法实现简单&#xff0c;效率高&#xff0c;但是目前主流…

算法(2)-二叉树的遍历(递归/迭代)python实现

二叉树的遍历1.深度优先DFS1.1 DFS 递归解法1.1.1先序遍历1.1.2中序遍历1.1.3后序遍历1.2 DFS迭代解法1.2.1先序遍历1.2.2中序遍历1.2.3后序遍历2.广度优先BFS3.二叉树的最大深度3.1递归3.2迭代4.翻转二叉树4.1递归4.1迭代5.合并两棵二叉树5.1递归5.2迭代有两种通用的遍历树的策…