IGC系列:全分组卷积网络,分组卷积极致使用 | 轻量级网络
IGC系列网络的核心在分组卷积的极致运用,将常规卷积分解成多个分组卷积,能够减少大量参数,另外互补性原则和排序操作能够在最少的参数量情况下保证分组间的信息流通。但整体而言,虽然使用IGC模块后参数量和计算量降低了,但网络结构变得更为繁琐,可能导致在真实使用时速度变慢
来源:晓飞的算法工程笔记 公众号
IGCV1
论文: Interleaved Group Convolutions for Deep Neural Networks
Introduction
Interleaved group convolution(IGC)模块包含主分组卷积和次分组卷积,分别对主分区和次分区进行特征提取,主分区通过输入特征分组获得,比如将输入特征分为\(L\)个分区,每个分区包含\(M\)维特征,而对应的次分区则分为\(M\)个分区,每个分区包含\(L\)维特征。主分组卷积负责对输入特征图进行分组特征提取,而次组卷积负责对主分组卷积的输出进行融合,为\(1\times 1\)卷积。IGC模块形式上与深度可分离卷积类似,但分组的概念贯穿整个模块,也是节省参数的关键,另外模块内补充了两个排序模块来保证channel间的信息交流。
Interleaved Group Convolutions
IGC模块如图1所示,主卷积对输入进行分组特征提取,然后将主卷积输出的特征进行隔区采样,方便后续的次卷积进行特征融合,将次卷积输出concate起来恢复为采样前的顺序后作为最后的输出。
Primary group convolutions
假设共\(L\)个主分区,每个主分区包含\(M\)维特征,主分组卷积的操作如公式1所示,\(z_l\)为按卷积核大小抠出来的\((MS)\)维特征向量,\(S\)为卷积核大小,\(W^p_{ll}\)对应第\(l\)分区的卷积核,大小为\(M\times (MS)\),\(x=[z^{\top}_1\ z^{\top}_2\ \cdots \ z^{\top}_L]^{\top}\)代表主分组卷积的输入。
Secondary group convolutions
将主分组卷积的输出\(\{y_1, y_2,\cdots ,y_L \}\)重排成\(M\)个次分区,每个分区包含\(L\)维特征,这样能够保证每个分区都包含来自不同主分区的特征,第\(m\)个次分区由于每个主分区的第\(m\)维特征组成:
\(\bar{y}_m\)对应第\(m\)个次分区,\(y_{lm}\)为\(y_l\)的第\(m\)维特征,\(P\)为排序矩阵,次分组卷积在次分区上进行计算:
\(W^d_{mm}\)对应第\(m\)个次分区对应的\(1\times 1\)卷积核,大小为\(L\times L\),次分组卷积的输出将重排为主分区的顺序,\(L\)个重排分区\(\{x^{'}_1, x^{'}_2, \cdots, x^{'}_L \}\)的计算如下:
结合主卷积和次卷积的公式,IGC模块可以总结为:
\(W^p\)和\(W^d\)为分块角对角矩阵,定义\(W=PW^dPT^{\top}W^p\)为混合卷积核,得到:
即IGC模块可以看成是常规卷积,其卷积核为两个稀疏核的积。
Analysis
Wider than regular convolutions
考虑单像素的输入,IGC模块的参数量为:
\(G=ML\)为IGC的覆盖的维度数,对于常规卷积,输入输出维度为\(C\),参数量为:
给予相同的参数量,\(T_{igc}=T_{rc}=T\),得到\(C^2=\frac{1}{S}T\),\(G^2=\frac{1}{S/L+1/M}T\),可以进一步得到:
考虑\(S=3\times 3\)的情况,当\(L>1\)时可得到\(G>C\),即正常情况下IGC模块可以比常规卷积处理更多的输入维度。
When is the widest?
论文研究了分区数\(L\)和\(M\)对卷积宽度的影响,将公式7进行变换得到:
当\(L=MS\)时,公式12取等号,给予一定的参数量,卷积宽度的上界为:
当\(L=MS\)时,卷积宽度最大
论文列举了不同设置下的宽度对比,可以看到,\(L \simeq 9M\)时宽度最大。
Wider leads to better performance?
固定参数量意味着主分组卷积和次卷积的有效参数固定,当输入的特征维度更多时,卷积核也越大,卷积将变得更加稀疏,这可能导致性能的下降。为此,论文也进行不同配置的性能对比,具体见图3。
Experiment
小型实验的网络结构以及参数量和计算量的对比,注意实现时的结构为IGC+BN+ReLU。
CIFAR-10上的性能对比。
多个数据集上与SOTA的性能对比
Conclusion
IGC模块采用两层分组卷积和排序操作来节省参数量和计算量,结构设计简单巧妙,论文也对IGC进行了充分的推导与分析。需要注意的是,虽然论文从参数量和计算量上得出IGC模块的轻量性,但正如ShuffleNetV2论文提到的,参数量和计算量并不能等同于推理时延。
IGCV2
论文: IGCV2: Interleaved Structured Sparse Convolutional Neural Networks
Introduction
IGCV1通过两个分组卷积来对原卷积进行分解,减少参数且保持完整的信息提取。但作者发现,因为主分组卷积和次分组卷积在分组数上是互补的,导致次卷积的分组数一般较小,每个分组的维度较大,次卷积核较为稠密。为此,IGCV2提出Interleaved Structured Sparse Convolution,使用多个连续的稀疏分组卷积来替换原来的次分组卷积,每个分组卷积的分组数都足够多,保证卷积核的稀疏性。
Interleaved Structured Sparse Convolutions
IGCV2的核心结构如图1所示,使用多个稀疏卷积来替换原本比较稠密的次卷积,可以公式化地表示为:
\(P_lW_l\)为一个稀疏矩阵,其中\(P_l\)来排序矩阵用来重排维度,\(W_l\)为稀疏的分区矩阵,每个分组的维度均为\(K_l\)。
IGCV2在设计的时候有个互补性原则,一个分组卷积的每个分组需要关联另一个分组卷积每个分组,并且仅关联每个分组的一维特征,即分组间有且仅有一条连接,可以看看图1体会一下,核心是排序的方法。根据互补性原则,可以得到输入维度\(C\)和每层维度数\(K_L\)的关系:
另外类似与IGCV1的推导,IGCV2在\(L=log(SC)\)时参数量最少,\(S\)为卷积核大小,这里按次卷积为\(1\times 1\)分组卷积计算。
Discussions
论文也对IGCV2的设计进行了讨论:
- Non-structured sparse kernels,不使用稀疏矩阵,使用正则化方法来引导卷积核稀疏化,论文发现这会约束网络的表达能力。
- Complementary condition,互补性原则不是必须的,只是高效设计分组卷积的一条准则,复合卷积可以不将输入输出全连接,设计得更稀疏化。
- Sparse matrix multiplication and low-rank matrix multiplication,低秩矩阵分解是压缩的常用方法,而稀疏矩阵分解还很少研究,下一步可以探讨结合稀疏矩阵分解和低秩矩阵分解来压缩卷积网络。
Experiment
论文对比的网络结构,IGCV2主卷积使用深度卷积。
与类似的网络结构进行对比。
与SOTA网络进行对比。
Conclusion
IGCV2在IGCV1基础上进一步稀疏化,使用多个稀疏卷积代替原本较为稠密的次卷积,论文依然使用充分的推导对IGCV2的原理和超参数进行分析。但也如前面说到的,参数量和计算量并不能等同于推理时延,需要在实际设备上进行对比。
IGCV3
论文: IGCV3: Interleaved Low-Rank Group Convolutions for Efficient Deep Neural Networks
Introduction
基于IGCV和bootleneck的思想,IGCV3结合低秩卷积核和稀疏卷积核来构成稠密卷积核,如图1所示,IGCV3使用低秩稀疏卷积核(bottleneck模块)来扩展和输入分组特征的维度以及降低输出的维度,中间使用深度卷积提取特征,另外引入松弛互补性原则,类似于IGCV2的严格互补性原则,用来应对分组卷积输入输出维度不一样的情况。
Interleaved Low-Rank Group Convolutions
IGCV3主要是对IGCV2的结构进行延伸,引入低秩分组卷积来代替原本的分组卷积,包含分组数为\(G_1\)低秩pointwise分组卷积、深度卷积、以及分组数为\(G_2\)低秩pointwise分组卷积,两个低秩分组卷积分别用于扩展特征维度以及恢复特征维度到原始大小,可公式化为:
\(P^1\)和\(P^2\)为排序矩阵,\(W^1\)为\(3\times 3\)深度卷积,\(\hat{W}^0\)和\(W^2\)为低秩稀疏矩阵,矩阵结构如下:
\(\hat{W}^g_{j,k}\in R^C\)包含\(\frac{C}{G_1}\)个非零权值,对应首分组卷积的第\(g\)个分组里的第\(k\)个卷积核,用于扩展维度。\(W^2_g\)为第二个分组卷积(图2的第三个分组卷积)的第\(g\)个分组的卷积核,用于缩小维度到原始大小。
由于IGCV3的分组卷积的输入输出维度是不同的,这导致IGCV2提出的互补性原则不能满足(输入输出间存在多条连接路径),排序操作也不能像之前那样使用。为了解决这个问题,论文提出超维(super-channels)的概念,将输入\输出\中间维度分成\(C_s\)个超维,输入和输出的超维包含\(\frac{C}{C_s}\),中间特征的超维包含\(\frac{C_{int}}{C_s}\),如图2所示,以超维为单位满足互补性原则,并以此进行排序操作,即松弛互补性原则,定义如下:
Experiment
与前两个版本对比,IGCV3-D的\(G_1\)和\(G_2\)分别为1和2。
在ImageNet上与其它网络进行对比。
这里对ReLU的使用进行了实验,主要针对MobileNetV2的ReLU使用方法。
对不同的分组数进行对比。
Conclusion
IGCV3在IGCV2的基础上融合了MobileNetV2的主要结构,并且使用更狠的低秩稀疏分组卷积,在整体结构上和MobileNetV2十分接近,核心依然是在稀疏分组卷积以及排序操作,虽然性能比MobileNetV2有些许提升,但整体的创新性略显不足。
Conclustion
IGC系列网络的核心在分组卷积的极致运用,将常规卷积分解成多个分组卷积,能够减少大量参数,另外互补性原则和排序操作能够在最少的参数量情况下保证分组间的信息流通。但整体而言,虽然使用IGC模块后参数量和计算量降低了,但网络结构变得更为繁琐,可能导致在真实使用时速度变慢。
如果本文对你有帮助,麻烦点个赞或在看呗~
更多内容请关注 微信公众号【晓飞的算法工程笔记】
IGC系列:全分组卷积网络,分组卷积极致使用 | 轻量级网络的更多相关文章
- ESPNet/ESPNetV2:空洞卷积金字塔 | 轻量级网络
ESPNet系列的核心在于空洞卷积金字塔,每层具有不同的dilation rate,在参数量不增加的情况下,能够融合多尺度特征,相对于深度可分离卷积,深度可分离空洞卷积金字塔性价比更高.另外,HFF的 ...
- resnet18全连接层改成卷积层
想要尝试一下将resnet18最后一层的全连接层改成卷积层看会不会对网络效果和网络大小有什么影响 1.首先先对train.py中的更改是: train.py代码可见:pytorch实现性别检测 # m ...
- 对抗生成网络-图像卷积-mnist数据生成(代码) 1.tf.layers.conv2d(卷积操作) 2.tf.layers.conv2d_transpose(反卷积操作) 3.tf.layers.batch_normalize(归一化操作) 4.tf.maximum(用于lrelu) 5.tf.train_variable(训练中所有参数) 6.np.random.uniform(生成正态数据
1. tf.layers.conv2d(input, filter, kernel_size, stride, padding) # 进行卷积操作 参数说明:input输入数据, filter特征图的 ...
- 卷积神经网络特征图可视化(自定义网络和VGG网络)
借助Keras和Opencv实现的神经网络中间层特征图的可视化功能,方便我们研究CNN这个黑盒子里到发生了什么. 自定义网络特征可视化 代码: # coding: utf-8 from keras.m ...
- Android学习系列(9)--App列表之分组ListView
吸引用户的眼球,是我们至死不渝的追求: 第一时间呈现最有价值的信息,简明大方,告诉客户,你的选择是多么的明智,这正是你寻觅已久的东西. 分组的应用场合还是很多的,有数据集合的地方 ...
- 【python实现卷积神经网络】卷积层Conv2D反向传播过程
代码来源:https://github.com/eriklindernoren/ML-From-Scratch 卷积神经网络中卷积层Conv2D(带stride.padding)的具体实现:https ...
- Mybatis系列全解(五):全网最全!详解Mybatis的Mapper映射文件
封面:洛小汐 作者:潘潘 若不是生活所迫,谁愿意背负一身才华. 前言 上节我们介绍了 < Mybatis系列全解(四):全网最全!Mybatis配置文件 XML 全貌详解 >,内容很详细( ...
- [DL学习笔记]从人工神经网络到卷积神经网络_2_卷积神经网络
先一层一层的说卷积神经网络是啥: 1:卷积层,特征提取 我们输入这样一幅图片(28*28): 如果用传统神经网络,下一层的每个神经元将连接到输入图片的每一个像素上去,但是在卷积神经网络中,我们只把输入 ...
- 深度学习原理与框架-卷积神经网络基本原理 1.卷积层的前向传播 2.卷积参数共享 3. 卷积后的维度计算 4. max池化操作 5.卷积流程图 6.卷积层的反向传播 7.池化层的反向传播
卷积神经网络的应用:卷积神经网络使用卷积提取图像的特征来进行图像的分类和识别 分类 相似图像搜索 ...
- Convolution Network及其变种(反卷积、扩展卷积、因果卷积、图卷积)
今天,主要和大家分享一下最近研究的卷积网络和它的一些变种. 首先,介绍一下基础的卷积网络. 通过PPT上的这个经典的动态图片可以很好的理解卷积的过程.图中蓝色的大矩阵是我们的输入,黄色的小矩阵是卷积核 ...
随机推荐
- 老王电子的拆机 ESP32-SOLO-1 填坑报告
ESP32-SOLO-1 拆装 都是带板的, 长这个样子 需要用热风枪从背面吹, 因为中间有焊点, esp32朝下, 用280度大概2到3分钟, 四周需要均匀着风, 用镊子试探天线部分是否松动, 将外 ...
- Js中Reflect对象
Js中Reflect对象 Reflect是ES6起JavaScript内置的对象,提供拦截JavaScript操作的方法,这些方法与Proxy对象的handlers中的方法基本相同. 描述 Refle ...
- ckeditor实战总结
介绍 使用范围较广的富文本编辑器.官方文档 config.js的常用配置 参考:https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_conf ...
- 具备有效期的sessionStorage存储
具备有效期的sessionStorage存储 类方式 // 具备有效期的sessionStorage存储-类方式. class SessionStorageWrapper { // 存储数据到sess ...
- live555开发笔记(一):live555介绍、windows上msvc2017编译和工程模板
前言 在pc上搭建流媒体服务器软件,打开视频接受推流,使用live555方案. live555介绍 Live555是一个为流媒体提供解决方案的跨平台的C++开源项目,它实现了标准流媒体传输 ...
- 【LeetCode剑指offer 01】数组中重复的数字、两个栈实现队列
数组中重复的数字 数组中重复的数字 找出数组中重复的数字. 在一个长度为 n 的数组 nums 里的所有数字都在 0-n-1 的范围内.数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数 ...
- 【Azure 事件中心】Spring Cloud Stream Event Hubs Binder 发送Event Hub消息遇见 Spec. Rule 1.3 - onSubscribe, onNext, onError and onComplete signaled to a Subscriber MUST be signaled serially 异常
问题描述 开发Java Spring Cloud应用,需要发送消息到Azure Event Hub中.使用 Spring Cloud Stream Event Hubs Binder 依赖,应用执行一 ...
- 【Azure Redis 缓存】C#程序是否有对应的方式来优化并缩短由于 Redis 维护造成的不可访问的时间
问题描述 C#程序是否有对应的方式来优化并缩短由于 Redis 维护造成的不可访问的时间? Redis维护说明: Redis 服务维护时,会把副本节点提升为主节点,且旧主节点关闭现有连接时,这个时候, ...
- Java 异常处理(2) : 方法重写的规则之一:
1 package com.bytezero.throwable; 2 3 import java.io.FileNotFoundException; 4 import java.io.IOExcep ...
- 一文搞定POI,再也不怕excel导入导出了
写在前面 在Java日常开发过程中,实现Excel文件的导入导出功能是一项常见的需求. 通过使用相关的Java库,如Apache POI.EasyPoi或EasyExcel,可以轻松地实现Excel文 ...