最近在项目中遇到conv层计算量过大的问题,于是就尝试了一些方法。解决conv计算量大的问题,最粗暴的方法当然是直接减小filters的大小,但这种方法带来的负面作用可能是conv层的效果会出现一定的回退。通过查资料和别人介绍,知道了group conv和depthwise conv两种优化方式,这两天研究了一下这两个方法,对它们的实现有了一定的了解,在这里记录一下。

group conv

对于我们普通的卷积,假如我们的输入是100x256的矩阵,通过一个kernel_size=3,filters=512的conv层,那我们的参数量应该为3x256x512,输出为100*512的矩阵。
改成group conv,假设group_size=4,首先将输入拆成4个100x64,然后通过4个3x64x128的conv,最后将结果concat在一起,输出仍然是100x512。
与普通conv对比,我们可以发现,group conv实际上对应计算的是普通conv的对角线部分。下图中,黄色部分即是group conv计算的部分。

比较两者参数量,我们可以看出普通conv的参数量为3x256x512,group conv的参数量为4x3x64x128,意味着参数量为原来的1/4(跟group_size相关)。
tensorflow实现的如下:

input_split = tf.split(input, 4, axis=2)
output = tf.concat([tf.layers.conv1d(input_split[i], 128, 3, padding='same', activation=tf.nn.relu, name="conv_{}".format(i)) for i in range(4)], axis=2)

depthwise conv

我们更进一步的将输入100x256的矩阵,拆分成256个100x1的矩阵,然后通过由256个3x1x1组成的conv组(我们可以看到,如果将3x1x1换成3x1x2,其实就等效于上面的group conv)。我们将输出concat在一起,输出一个大小仍为100x256的矩阵。然后我们再通过一个1x256x512的conv层,得到大小为100x512的输出。
在depthwise conv中,分成了两步,第一步每个通道独立做卷积(depthwise conv),第二步通道之间做卷积(pointwise conv)。
最终,depthwise conv的参数量为256x3x1x1+1x256x512,对比普通的conv,参数量大约为1/3(跟kernel_size大小相关)。

上面就是我对group conv和depthwise conv的理解,可能理解存在错误,希望有人批评指正。

group conv 和 depthwise conv相关推荐

  1. Group conv vs. Depthwise separable conv

    本王有话说:这俩属于是做轻量化绕不开的经典工作,盘踞武林好多年,我们的目标学会并企图超越它. 分组卷积(Group conv) paper 原理 分组卷积,即ResNeXt的亮点,受Inception ...

  2. transformer一统天下?depth-wise conv有话要说

    本文是对<ON THE CONNECTION BETWEEN LOCAL ATTENTION AND DYNAMIC DEPTH-WISE CONVOLUTION>的分析,作者在cnn领域 ...

  3. depthwise conv 和 pointwise conv

    转自:https://blog.csdn.net/tintinetmilou/article/details/81607721 Depthwise(DW)卷积与Pointwise(PW)卷积,合起来被 ...

  4. matlab中conv什么意思,matlab卷积函数conv matlab中conv()是什么意思?

    matlab中conv()是什么意思? conv(向量卷积运算) 两个向量卷积,简单理解其实就是多项式乘法. 比如:p=[1 2 3],q=[1 1]是两个向量,p和q的卷积计算方法如下: 把p的元素 ...

  5. pytorch的几种conv方法

    本文目录 Conv Group Conv Depthwise Separable Convolution 1. Depthwise Conv 2. Pointwise Conv Conv 首先是常规卷 ...

  6. depthwise-seperate conv 深度可分离卷积解释

    关于depthwise-seperate conv 主要包括depthwise conv 和 pointwise conv 优点是 参数少,避免过拟合 计算量小 以一个示例说明参数大小,输入输出 &q ...

  7. 面向Mobile device的CNN模型手工设计与NAS分析总结,MobileNet V1,V2,V3,Efficient,MNasNet以及Efficient network design

    手工方法和NAS的高效网络模型设计总结与分析 这篇文章主要关注对于移动端,资源受限平台的高效神经网络设计(Manually)和搜索(NAS). ​​​​​​高效的CNN设计不只是用在服务器,云端,资源 ...

  8. 【论文阅读笔记】One Shot 3D Photography

    论文主页:https://facebookresearch.github.io/one_shot_3d_photography/ 代码地址:https://github.com/facebookres ...

  9. 工程部署: 低算力平台模型性能的优化

    点击上方"计算机视觉工坊",选择"星标" 干货第一时间送达 作者丨陈e 来源丨GiantPandaCV 编辑丨极市平台 导读 此文讨论如何在低端的移动设备上提高 ...

最新文章

  1. RPC 笔记(07)— socket 通信(多进程服务器)
  2. iOS 系统版本判断
  3. 浅述numpy中argsort()函数的用法
  4. MySQL 5.1.24rc + innodb plugin尝鲜
  5. Dynamic AX ERP 4.0 数据导出(上)
  6. StringGrid数据导出到Excel
  7. 【ArcGIS风暴】ArcGIS解决数字化之前创建图层时未定义坐标系而导致数据跑偏的问题
  8. 干货,记一次解决录音杂音问题
  9. 记自己的第一个完整的java web项目
  10. atitit.web 推送实现方案集合(2)---百度云,jpush 极光推送 ,个推的选型比较.o99
  11. 耗时162天,从华为外包5k转岗正式员工15k,经历的心酸只有自己知道
  12. Rasterio入门
  13. P32-前端基础-CSS盒子尺寸box-sizing: border-box
  14. Actor模型与传统模型
  15. 齐博x1用户登录接口
  16. C++坦克大战(新手)
  17. java 筛选文件后缀为.txt文件
  18. 系统学习Python——进度条模块tqdm
  19. ReadBook-我的设置
  20. 2020/1/31 关于mathtype6.9的安装 “我的第一次编辑

热门文章

  1. layui提交表单自动刷新_layui form表单提交后实现自动刷新
  2. 2024内蒙古医科大学100105法医学707西医综合之生理学考研5套卷
  3. RPC基本原理以及如何用Netty来实现RPC
  4. 实际项目的数据库设计基本方法
  5. 记一次打印机“打印机处于未指定状态”
  6. 揭秘亿级流量下系统的高性能、高并发和稳定性保障
  7. 线段树(单点修改,区间查询)
  8. 2021全网最全最详细的Spring面试题精选合集
  9. 谷歌浏览器调试页面总是打开新界面DevTools
  10. 【编程】余 弦 曲 线