通用卷积核用于模型压缩和加速

介绍一下最近看的一种通用卷积核用于模型压缩的方法,刚刚查了一下,原作者的博客在https://zhuanlan.zhihu.com/p/82710870 有介绍,论文传送门 https://papers.nips.cc/paper/7433-learning-versatile-filters-for-efficient-convolutional-neural-networks.pdf , github开源地址 https://github.com/huawei-noah/Versatile-Filters

下面介绍下我的理解。

这种模型压缩方法分为两步,一步是在spatial-wise的,一步是在channel-wise的,其实思想是一样的,这两步也就对应着我们平常一个filter, 假设是7x7x24x100,那么7x7对应的就是spatial-wise,24对应的就是channel-wise。24是input feature的深度,这个没法变就不管了。从spatial的角度来说,这100个input的filters,每个都是7x7x24,其实没有必要有100个,25个就可以了,怎么说呢?7x7的这个filter可以拆成7x7,5x5,3x3,1x1,就是4个子卷积核,那么其实有25个7x7x24的filter,就可以变换出100个filter了。这个7x7怎么拆呢?如下图,以5x5的为例,就是中间这个(b)图,5x5的卷积核就是最大的这个部分,3x3的子卷积核就是绿色加中间这个部分,其实是5x5的卷积核的一部分参数,相当于外面蓝色一圈填0,1x1的子卷积核就是中间这个红点点,这样三个子卷积核都是由5x5的卷积核变换而来,参数共享,其实在实际计算的时候,还可以实现计算共享,比起实际用3个5x5卷积核,计算量是要省的,参数大小也少了,memory的要求也降低了。

另一种就是channel-wise的压缩,基本思想跟上面的是完全一样的,这一次是在深度24这个方向上进行拆分,比如,1到22为一个子卷积核,3到24为一个子卷积核,这样就可以有两个卷积核了,结合上面的spatial-wise的压缩,就只要13个7x7x24的filter就可以了。与spatial-wise不同的是上一次出现了7x7卷积本尊,这一次没有24个channel的全的了。这样计算量也是要节省的,只有原来的22/24,并且中间还有一些结果是可以复用的,实际上会更省一些。

以上大概就是这个方法的精髓了。作者在图像分类和图像超分辨率几个经典网络上验证了自己的想法,证明了此方法的有效性。

=========================================

关于这个方法,我有一些疑问,其实这种方法降低了参数的自由度,那么他为什么还可以达到和之前的网络一样的效果?是不是之前的网络参数就有很多冗余,或者说其实这样的选取参数是有意义的,其实是基于某种先验。

原文地址:https://www.cnblogs.com/sunny-li/p/11565136.html

时间: 2024-10-07 08:54:27

通用卷积核用于模型压缩和加速的相关文章

深度学习之模型压缩

一.背景 深度学习让计算机视觉任务的性能到达了一个前所未有的高度.但,复杂模型的同时,带来了高额的存储空间.计算资源消耗,使其很难落实到各个硬件平台. 为了解决这些问题,压缩模型以最大限度地减小模型对于计算空间和时间的消耗. 二.理论基础 必要性:目前主流的网络,如VGG16,参数量1亿3千多万,占用500多MB空间,需要进行300多亿次浮点运算才能完成一次图像识别任务. 可行性:在深度卷积网络中,存在着大量冗余地节点,仅仅只有少部分(5-10%)权值参与着主要的计算,也就是说,仅仅训练小部分的

模型压缩相关工作

总结的很好的一篇博客:https://blog.csdn.net/App_12062011/article/details/81665140 定点化: 百度搜"模型压缩定点化" https://blog.csdn.net/u011961856/article/details/76736103 http://fjdu.github.io/machine/learning/2016/07/07/quantize-neural-networks-with-tensorflow.html ht

【模型压缩】蒸馏算法小结

模型压缩之蒸馏算法小结 原始文档:https://www.yuque.com/lart/gw5mta/scisva Google Slide: https://docs.google.com/presentation/d/e/2PACX-1vSsa5X_zfuJUPgxUL7vu8MHbkj3JnUzIlKbf-eXkYivhwiFZRVx_NqhSxBbYDu-1c2D7ucBX_Rlf9kD/pub?start=false&loop=false&delayms=3000 2019年09

神经网络加速与模型压缩

https://github.com/handong1587/handong1587.github.io/blob/master/_posts/deep_learning/2015-10-09-acceleration-model-compression.md

模型压缩之Channel Pruning

论文地址 channel pruning是指给定一个CNN模型,去掉卷积层的某几个输入channel以及相应的卷积核, 并最小化裁剪channel后与原始输出的误差. 可以分两步来解决: channel selection 利用LASSO回归裁剪掉多余的channel,求出每个channel的权重,如果为0即是被裁减. feature map reconstruction 利用剩下的channel重建输出,直接使用最小平方误差来拟合原始卷积层的输出,求出新的卷积核W. 二.优化目标 2.1 定义

压缩代码加速ecshop程序页面加载速度

由于页面有很多图片,页面加载速度有点慢,本来打算减小图片的体积,后来想想这个后期还得测试下,所以暂时不打算使用google的图片优化工具,先把ecshop生成的html代码压缩下吧 压缩前:首页体积为38kb,压缩后:首页html代码提交24kb,页面测试效果没有任何问题,无错误. 下面我介绍下提升ecshop压缩代码的方法: 1.找到include/cls_templete.php,查找echo $out;在这行代码上方加入底下的代码,保存,然后上传空间,刷新缓冲,ctrl+f5强制刷新页面,

通用的通过模型插入或更新数据库

public class DALInsertUpdate<T> where T : new() { /// <summary> /// 通过模型把非(KeyAttribute)属性插入到指定表 /// </summary> /// <param name="TableName">要插入到的表名</param> /// <param name="Model">要插入的模型</param>

TLPI(liunx/unix系统编程手册)笔记(三) 文件IO:通用的IO模型

读下来总的就是介绍了四个IO的API--open,read,write,close. 大家都是知道的,everything is file,在linux系统里面一切都是看作文件来操作的,学习linux就得先学好文件IO,也可以看见TLPI这本书的介绍完一些概念之后就开始介绍文件IO了. IO,大概的分为磁盘文件IO,buffering(缓冲)IO.貌似缓冲的水很深,之后会写博客. ------------------------------------ (1)文件描述符. 在进行IO操作之前,总

Mxnet使用TensorRT加速模型--Mxnet官方例子

官方示例链接 https://mxnet.apache.org/api/python/docs/tutorials/performance/backend/tensorrt/tensorrt.html   Optimizing Deep Learning Computation Graphs with TensorRT   本文档代码来源于mxnet官方网站翻译,添加自己运行情况.NVIDIA的TensorRT是用于加速网络推理的深度学习库,Mxnet的1.3.0版本开始试验性质的支持Tenso