Channel-wise卷积在channel维度上进行滑动,巧妙地解决卷积操作中输入输出的复杂全连接特性,但又不会像分组卷积那样死板,是个很不错的想法

来源:晓飞的算法工程笔记 公众号

论文: ChannelNets: Compact and Efficient Convolutional Neural Networks via Channel-Wise Convolutions

  • 论文地址:https://arxiv.org/abs/1809.01330
  • 论文代码:https://github.com/HongyangGao/ChannelNets

Introduction


  深度可分离卷积能够减少网络的计算量和参数量,其中point-wise卷积占据了大部分参数量,论文认为网络轻量化的下一个核心在于改变输入到输出的稠密连接方式。为此,论文提出channel-wise卷积的概念,将输入输出的维度连接进行稀疏化而非全连接,区别于分组卷积的严格分组,让卷积在channel维度上进行滑动,能够更好地保留channel间的信息交流。基于channel-wise卷积的思想,论文进一步提出了channel-wise深度可分离卷积,并基于该结构替换网络最后的全连接层+全局池化的操作,搭建了ChannelNets。

Channel-Wise Convolutions and ChannelNets


  图a为深度可分离卷积结构,而图b为加入分组后的深度可分离卷积的结构,其中每个点代表一维特征。

Channel-Wise Convolutions

  Channel-wise卷积的核心在于输入和输出连接的稀疏化,每个输出仅与部分输入相连,概念上区别于分组卷积,没有对输入进行严格的区分,而是以一定的stride去采样多个相关输入进行输出(在channel维度滑动),能够降少参数量以及保证channel间一定程度的信息流。假设卷积核大小为dkd_kdk​,输出大小维度为nnn,输入特征图大小为df×dfd_f\times d_fdf​×df​,普通卷积的参数量为m×dk×dk×nm\times d_k\times d_k\times nm×dk​×dk​×n,计算量为m×dk×dk×df×df×df×nm\times d_k\times d_k\times d_f\times d_f\times d_f\times nm×dk​×dk​×df​×df​×df​×n,而channel-wise卷积的参数量为dc×dk×dkd_c\times d_k\times d_kdc​×dk​×dk​,dcd_cdc​一般为远小于mmm的数,代表一次采样的输入维度,计算量为dc×dk×dk×df×df×nd_c\times d_k\times d_k\times d_f\times d_f\times ndc​×dk​×dk​×df​×df​×n,参数量和计算量都脱离于输入特征的维度mmm。

Group Channel-Wise Convolutions

  分组卷积的分组思想会导致channel间的信息阻隔,为了增加分组间的channel信息交流,一般需要在后面添加一个融合层,继续保持分组的同时整合所有组的特征。论文使用分组channel-wise卷积层作为融合层,包含ggg个channel-wise卷积。定义输入特征维度nnn,分组数ggg,每个channel-wise卷积的stride为ggg(这里指channel上滑动的步幅),输出n/gn/gn/g特征图(滑动n/gn/gn/g次)。为了保证每个分组的输出涵盖了所有的输入,需要满足dc≥gd_c \ge gdc​≥g,最后将所有的输出concate起来,结构如图c所示。

Depth-Wise Separable Channel-Wise Convolutions

  深度可分离channel-wise卷积在深度卷积后面接一个channel-wise卷积用以融合特征来降低参数量和计算量,结构如图d所示。图中的channel-wise卷积的stride为1,dcd_cdc​为3,在进行特征融合的同时能够降低参数量。

Convolutional Classification Layer

  一般网络最后都使用全局池化和全连接层进行最后的分类,但是这样的组合的参数量十分巨大。全局池化+全连接层的组合实际可以转换成深度可分离卷积,使用固定权重的深度卷积代替全局池化,pointwise卷积代替全连接层。因此,可以进一步使用上述的深度可分离channel-wise卷积来进行优化,而这里由于池化和全连接之间没有使用激活函数或BN等操作,采用常规的三维卷积进行实现更高效。

  假设输入特征图为m×df×dfm\times d_f\times d_fm×df​×df​,类别数为nnn,深度卷积或全局池化可以认为是卷积核大小为df×df×1d_f\times d_f\times 1df​×df​×1,权重固定为1/df21/d^2_f1/df2​的三维卷积,而channel-wise可认为是卷积核大小为1×1×dc1\times 1\times d_c1×1×dc​的三维卷积,两者可以合并成一个卷积核大小为df×df×dcd_f\times d_f\times d_cdf​×df​×dc​的三维卷积。为了符合类别数量,dc=m−n+1d_c=m-n+1dc​=m−n+1,即每个类别的预测仅需要使用(m−n+1)(m-n+1)(m−n+1)个输入特征图。

  论文可视化了全连接分类层的权重,蓝色是代表为0或接近0的权重,可以看到全连接分类层的权重实际非常稀疏,即本身也只使用到部分输入,所以这里使用部分输入特征也是合理的。

ChannelNets

  ChannelNet根据MobileNet的基础结构进行构建,设计了图3的分组模块(GM)和分组channel-wise模块(GCWM)。由于GM模块存在信息阻隔的问题,所以在GM模块前面使用GCWM来生成包含全局信息的分组特征。

  ChannelNet包含3个版本:

  • ChannelNet-v1替换了部分深度可分离卷积为GM和GCWM,分组数为2,共包含约370万参数。
  • ChannelNet-v2替换最后的深度可分离卷积为深度可分离channel-wise卷积,大约节省100万参数,占ChannelNet-v1的25%参数。
  • ChannelNet-v3替换最后的池化层加全连接层为上述的Convolutional Classification Layer,大约节省了100万(1024x1000-7x7x25)参数。

Experimental Studies


  在ILSVRC 2012进行网络性能对比。

  对比更轻量的网络性能,这里采用MobileNet的width multiplier思想缩放每层的维度。

  对比分组channel-wise卷积对ChannelNet的影响,替换GCWM为GM模块,考虑GCWM模块仅增加了32个参数,这样的性能提升是高效的。

Conclustion


  Channel-wise卷积在channel维度上进行滑动,巧妙地解决卷积操作中输入输出的复杂全连接特性,但又不会像分组卷积那样死板,是个很不错的想法。但感觉论文本身的性能还不够最优,论文对比的也只是MobileNetV1,跟MobileNetV2比差了点。



如果本文对你有帮助,麻烦点个赞或在看呗~
更多内容请关注 微信公众号【晓飞的算法工程笔记】

ChannelNets: 省力又讨好的channel-wise卷积,在channel维度进行卷积滑动 | NeurIPS 2018相关推荐

  1. 机器学习入门(15)— 全连接层与卷积层的区别、卷积神经网络结构、卷积运算、填充、卷积步幅、三维数据卷积、多维卷积核运算以及批处理

    卷积神经网络(Convolutional Neural Network,CNN)CNN 被用于图像识别.语音识别等各种场合,在图像识别的比赛中,基于深度学习的方法几乎都以 CNN 为基础. 1. 全连 ...

  2. 卷积神经网络中用1*1 卷积有什么作用或者好处呢?

    点击上方"视学算法",选择加"星标"或"置顶" 重磅干货,第一时间送达 来自 | 知乎 作者 | 陈运锦 地址 | https://www. ...

  3. 收藏 | 卷积神经网络中用1*1 卷积有什么作用或者好处呢?

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 仅作学术分享,不代表本公众号立场,侵权联系删除 转载于:来自 | ...

  4. 关于剪枝对象的分类(weights剪枝、神经元剪枝、filters剪枝、layers剪枝、channel剪枝、对channel分组剪枝、Stripe剪枝)

    文章目录 剪枝对象分析: 1.weights剪枝: 2.神经元剪枝: 3.Filters剪枝: 4.通道剪枝 5.Group-wise剪枝 6.Stripe剪枝 剪枝对象分析: 剪枝分为结构化剪枝和非 ...

  5. python 反卷积(DeConv) tensorflow反卷积(DeConv)(实现原理+手写)

    Tensorflow反卷积(DeConv)实现原理+手写python代码实现反卷积(DeConv) 理解: https://www.zhihu.com/question/43609045/answer ...

  6. 卷积神经网络CNN中1×1卷积作用理解

    0.引言 研究 GoogLeNet 和 VGG 神经网络结构的时候,都看见了它们在某些层有采取 1x1 作为卷积核,在最开始看到的AlexNet中都是出现了卷积核是 3x3和5×5的.那么,1x1 的 ...

  7. NNDL 实验六 卷积神经网络(1)卷积

    文章目录 前言 第5章 卷积神经网络 一.5.1 卷积 5.1.1 二维卷积运算 5.1.2 二维卷积算子 5.1.3 二维卷积的参数量和计算量 5.1.4 感受野 5.1.5 卷积的变种 5.1.5 ...

  8. cs231n-(7)卷积神经网络:架构,卷积层/池化层

    架构总览 常用的层 卷积层 概述 池化层 归一化层 全连接层 全连接层转为卷积层 卷积网络架构 层模式 层大小设计模式 实例 计算资源考虑 额外资源 卷积神经网络和普通神经网络非常类似.卷积神经网络由 ...

  9. 卷积神经网络的改进 —— 分组卷积、DW 与 PW

    1.普通卷积 对于一张5×5像素.三通道彩色输入图片(shape为5×5×3).经过3×3卷积核的卷积层(假设输出通道数为4,则卷积核shape为3×3×3×4),最终输出4个Feature Map, ...

最新文章

  1. fastjson反序列化多层嵌套泛型类与java中的Type类型
  2. .Net 中 获取当前应用程序启动目录的几个方法和Path.Combine 细节
  3. 计算机位运算:左移乘以2,右移除以2
  4. VTK:图表之VertexSize
  5. 处理数字_7_含NULL值的列的聚合
  6. ASP.NET 3.5中的一个超简单的Ajax实验
  7. linux环境下ntp客户端,多种操作系统NTP客户端配置
  8. CSS3:CSS3 文本效果
  9. awesome-go:很全的go语言资源合集
  10. python 函数式编程尾递归优化 day16
  11. 计算机视觉方向简介 | 三维深度学习中的目标分类与语义分割
  12. 2017年秋季学期获“领跑衫”感言
  13. VGG16网络结构图及pytorch 代码实现
  14. 计算机怎么开启tftp服务器,Win7系统如何开启TFTP服务器?开启TFTP服务器方法
  15. React-Native使用Nanohttpd实现跨平台互传文件
  16. Cheat Engine逆向修改植物大战僵尸(外挂)
  17. VMware虚拟机没有网络
  18. 关于hive on spark的distribute by和group by使用以及小文件合并问题
  19. uniapp微信小程序使用自定义字体和外部字体
  20. ROC/AUC、精准率、召回率、真正率,假正率等指标含义,学习笔记

热门文章

  1. 基本流程图的制作-通过在线制图工具绘制
  2. win10 WSL kali 下载源 --另外 恭喜马哥喜提博客
  3. LSM树——Log-Structured Merge-Tree数据结构、LSM树设计思想、LSM的数据写入操作、LSM的数据查询操作
  4. 你知道视频的水印怎么去吗?
  5. 女老板为何因户外广告牌性贿赂城管?
  6. March 4 2017 Week 10 Saturday
  7. jq实现点击一个按钮,触发另一个点击事件(点击按钮触发另一个按钮的点击事件)
  8. 183 25用计算机算列竖式,新北师大四年级上册数学计算题
  9. elasticsearch-java客户端测试
  10. 哪些习惯能让生活变得简洁高效?