ChannelNets: 省力又讨好的channel-wise卷积,在channel维度进行卷积滑动 | NeurIPS 2018
Channel-wise卷积在channel维度上进行滑动,巧妙地解决卷积操作中输入输出的复杂全连接特性,但又不会像分组卷积那样死板,是个很不错的想法
来源:晓飞的算法工程笔记 公众号
论文: ChannelNets: Compact and Efficient Convolutional Neural Networks via Channel-Wise Convolutions

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间一定程度的信息流。假设卷积核大小为$d_k$,输出大小维度为$n$,输入特征图大小为$d_f\times d_f$,普通卷积的参数量为$m\times d_k\times d_k\times n$,计算量为$m\times d_k\times d_k\times d_f\times d_f\times d_f\times n$,而channel-wise卷积的参数量为$d_c\times d_k\times d_k$,$d_c$一般为远小于$m$的数,代表一次采样的输入维度,计算量为$d_c\times d_k\times d_k\times d_f\times d_f\times n$,参数量和计算量都脱离于输入特征的维度$m$。
Group Channel-Wise Convolutions

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

深度可分离channel-wise卷积在深度卷积后面接一个channel-wise卷积用以融合特征来降低参数量和计算量,结构如图d所示。图中的channel-wise卷积的stride为1,$d_c$为3,在进行特征融合的同时能够降低参数量。
Convolutional Classification Layer
一般网络最后都使用全局池化和全连接层进行最后的分类,但是这样的组合的参数量十分巨大。全局池化+全连接层的组合实际可以转换成深度可分离卷积,使用固定权重的深度卷积代替全局池化,pointwise卷积代替全连接层。因此,可以进一步使用上述的深度可分离channel-wise卷积来进行优化,而这里由于池化和全连接之间没有使用激活函数或BN等操作,采用常规的三维卷积进行实现更高效。

假设输入特征图为$m\times d_f\times d_f$,类别数为$n$,深度卷积或全局池化可以认为是卷积核大小为$d_f\times d_f\times 1$,权重固定为$1/d^2_f$的三维卷积,而channel-wise可认为是卷积核大小为$1\times 1\times d_c$的三维卷积,两者可以合并成一个卷积核大小为$d_f\times d_f\times d_c$的三维卷积。为了符合类别数量,$d_c=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的更多相关文章
- GSM Channel Mode Modify和Channel Mode Modify Acknowledge信令
最近研究了下如何通过GSM Channel Mode Modify和Channel Mode Modify Acknowledge信令,获知GSM终端支持的data Rate 思路与原理: • I ...
- 深度学习原理与框架-卷积神经网络基本原理 1.卷积层的前向传播 2.卷积参数共享 3. 卷积后的维度计算 4. max池化操作 5.卷积流程图 6.卷积层的反向传播 7.池化层的反向传播
卷积神经网络的应用:卷积神经网络使用卷积提取图像的特征来进行图像的分类和识别 分类 相似图像搜索 ...
- Go语言中的有缓冲channel和无缓冲channel区别
Go语言中的有缓冲channel和无缓冲channel区别 结论 ch1:=make(chan int)// 无缓冲 ch2:=make(chan int,1)// 有缓冲 无缓冲: 当向ch1中存值 ...
- RepLKNet:不是大卷积不好,而是卷积不够大,31x31卷积了解一下 | CVPR 2022
论文提出引入少数超大卷积核层来有效地扩大有效感受域,拉近了CNN网络与ViT网络之间的差距,特别是下游任务中的性能.整篇论文阐述十分详细,而且也优化了实际运行的表现,值得读一读.试一试 来源:晓飞 ...
- 关于matlab矩阵卷积conv2和傅里叶变换求卷积ifft2的关系
先定义两个矩阵 a = [1 2 3 5 ; 4 7 9 5;1 4 6 7;5 4 3 7;8 7 5 1] %a矩阵取5*4 b = [1 5 4; 3 6 8; 1 5 7] %b矩阵如多数 ...
- deeplearning.ai 卷积神经网络 Week 2 深度卷积网络:实例研究 听课笔记
1. Case study:学习经典网络的原因是它们可以被迁移到其他任务中. 1.1)几种经典的网络: a)LeNet-5(LeCun et al., 1998. Gradient-based lea ...
- 【转】python中的一维卷积conv1d和二维卷积conv2d
转自:https://blog.csdn.net/qq_26552071/article/details/81178932 二维卷积conv2d 给定4维的输入张量和滤波器张量来进行2维的卷积计算.即 ...
- golang的缓冲channel和无缓冲channel的区别
话说golang的channel同步的定义真是让人无力吐槽,码农的用户体验就这么难搞么,超耐磨阿,无缓冲和缓冲居然有这么大区别....靠 转载一段网上的资料 --------------------- ...
- 卷积神经网络实战-----0001(移植卷积神经网络c++ to python or java)
1. https://github.com/174high/simple_cnn 自己fork的 2. https://github.com/can1357/simple_cnn 最初始的 3. ...
随机推荐
- Tensorflow环境配置&安装
Tensorflow环境配置&安装 明知故犯,是不想有遗憾. 背景:Tensorflow 环境配置和安装. 一.安装 Anaconda 二.建立.激活.安装.验证.使用 Tensorflow ...
- C# 汉字转拼音 取汉字拼音的首字母
using System.Text.RegularExpressions; namespace DotNet.Utilities { /// <summary> /// 汉字转拼音类 // ...
- MVC 微信网页授权 获取 OpenId
最近开发微信公众平台,做下记录,以前也开发过,这次开发又给忘了,搞了半天,还是做个笔记为好. 注意框架为MVC 开发微信公众平台.场景为,在模板页中获取用户openid,想要进行验证的页面,集成模板页 ...
- 浅析Python闭包
1.什么是闭包 在介绍闭包概念前,我们先来看一段简短的代码 def sum_calc(*args): def wrapper(): sum = 0 for n in args: sum += n; r ...
- matplotlib学习日记(六)-箱线图
(一)箱线图---由一个箱体和一对箱须组成,箱体是由第一个四分位数,中位数和第三四分位数组成,箱须末端之外的数值是离散群,主要应用在一系列测量和观测数据的比较场景 import matplotlib ...
- [leetcode]79.Search Word 回溯法
/** * Given a 2D board and a word, find if the word exists in the grid. The word can be constructed ...
- 使用Android Studio来阅读Android源码
在编译android系统后,执行下面命令来生成索引. mmm development/tools/idegen/mv ./out/target/product/tiny4412/obj/GYP/sha ...
- ProxyDroid+wifi设置抓xx点评抓不到的包
ProxyDroid+wifi设置抓xx点评抓不到的包 一.ProxyDroid介绍 1.下载地址 下载并安装ProxyDroid.(确保您的设备已经ROOT)点击下载 2.界面介绍 (1) Auto ...
- TurtleBot3 Waffle (tx2版华夫)(1)笔记本上安装虚拟机、 Ubuntu 系统
1.1虚拟机的安装 1.1.1.windows7系统建议安装14.1版本 VMware workstation 百度云链接: 链接:https://pan.baidu.com/s/1q6Lh9fMuX ...
- Hbase Rowkey设计原则
Hbase是三维有序存储的,通过rowkey(行键),column key(column family和qualifier)和TimeStamp(时间戳)这三个维度可以对HBase中的数据进行快速定位 ...