1. 摘要

作者提出了一个前所未有高效的新奇网络结构,称之为 CondenseNet,该结构结合了密集连接性和可学习的分组卷积模块。

密集连接性有利于网络中的特征复用,而可学习的分组卷积模块则可以移除多余的特征复用之间的连接。在测试的时候,训练好的模型可以使用标准的分组卷积来实现,在实际中计算非常高效。

2. 介绍和相关工作

深度学习模型一般都是在多个 GPU 上进行训练,然后再在计算资源有限的移动设备上进行部署。因此,一个好的网络结构应该允许训练阶段可以快速并行,而在测试的时候可以压缩。

一层一层堆叠卷积层的结构会使得网络需要通过学习来复制前面层的特征,而 DenseNet 通过直接将前面层的特征连接到后面的层来产生特征复用。尽管这很高效,但其实会产生一些冗余,也就是前面的一些特征在后面并不需要。因此,作者提出了一个方法来在训练阶段对这些多余的连接进行剪除,而在测试阶段则可以高效地通过分组卷积来实现。具体来说,作者将一层网络的卷积核分为几个组,然后逐渐移除每个组内不重要特征之间的连接。更重要的是,这些组不是预先定义好的,而是网络自己学出来的。

相较于以前的权重剪枝和量化,CondenseNet 有两个不同的地方:它是在训练的早期阶段进行剪枝的,这比在整个过程中使用 L1 正则化更加高效;训练好的 CondenseNet 具有更高的稀疏度,然而依旧可以产生高效的分组卷积。

标准的卷积层通过应用一个卷积核到所有的 \(R\) 个输入特征图来得到一个输出特征图,而分组卷积则将输入特征图分为 \(G\) 个组,一个输出特征图只与一个组内的输入特征图有关。

3. CondenseNet

下图左边为 DenseNet 中的一层,我们可以将分组卷积应用到 3×3 的卷积层,但是实验发现如果简单地将分组卷积应用到 1×1 的卷积层会导致准确率有很大的降低。输入到 1×1 卷积层的特征是上一层输出特征的拼接,它们有一个内在的顺序而且是非常多样化的,所以直接硬分组对特征复用是不利的。

因此,作者提出了一个方法,让网络在训练阶段自己学习对输入特征自动分组,让每个组的卷积核自己选取最相关的输入特征。而且,允许一个输入特征被多个组共享,也允许一个输入特征被所有组都忽略。

3.1. 可学习的分组卷积

分组卷积是通过多个阶段学习到的,如下图所示。训练的前一半迭代过程由 condensing 阶段组成的,我们重复地训练网络来修剪掉权值比较小的不重要卷积核,也就是针对某些输入特征的权重置为零。训练的后一半是优化阶段,我们固定学习到的分组卷积来学习卷积核参数。当进行剪枝的时候,我们确保同一组的稀疏模式相同,也就是同一个组的输入特征图是一样的。这样,在测试阶段,稀疏化的层就可以通过标准的分组卷积来实现,这可以大大地降低计算代价。

针对 1×1 的卷积,卷积核大小为 \(O×1×1×R\) 的矩阵 \(F\),\(O\) 是输出通道数,\(R\) 是输入通道数。在训练之前,我们将卷积核或者说是输出特征分为 \(G\) 个大小相同的组,每个组的卷积核表示为 \(F^1, \cdots, F^G\) ,每个 \(F^g\) 大小为 \(\frac{O}{G}×R\),\(F^g_{ij}\) 代表负责从第 j 个输入产生第 i 个输出的权重。

那么,第 j 个输入对当前分组内输出特征的重要性可以通过某一列权重的平均绝对值来表示,也即 \(\textstyle \sum^{O/G}_{i=1}|F^g_{ij}|\)。也就是说,我们移除 \(F^g\) 中的某一列(将这一列置为零),如果这一列的 \(L_1\) 范数比其它列的都小,实际上也就是第 j 个输入对当前组的输出特征不那么重要。这也就产生了结构上的稀疏性:同一个组内的卷积核接受同样的输入特征。

为了减少权重剪枝对网络的准确性带来的负面影响,通常使用 \(L_1\) 正则化来产生稀疏性。针对 CondenseNet ,作者提出了一个组级别(group-level)的稀疏性,来在训练过程中加上一个正则项,这个正则项会让 \(F^g\) 中的某一列元素趋向于零。

在实际中,一个组内使用的输入特征比例不一定要是 \(1/G\),作者定义了一个 condensation 因子 $C $,每个分组卷积的输入特征数目为 \(\lfloor \frac{R}{C}\rfloor\)。

在训练阶段,每个组的卷积核最后只会有 \(1/C\) 得以保留,所以我们有 \(C-1\) 个 condensing 阶段,在每个阶段的最后面,我们修剪掉 \(1/C\) 的权重。修剪的操作是通过一个 mask 来实现的,那些修剪掉的权重在 mask 中对应的元素为 0 ,然后通过 mask 与权重进行一个逐元素的相乘,这样可以在 GPU 上高效地实现。作者在实验中设置每个 condensing 阶段的 \(epochs=\frac{M}{2(C-1)}\),这样总训练次数的前一半就用来产生稀疏的分组卷积。

作者采用余弦形状的学习率,一个训练过程中的损失函数和学习率变化情况如下图所示。迭代次数为 150 时损失函数的突然上升是因为移除了余下权重的一半,但是模型可以在优化阶段又逐渐恢复。

在测试阶段,我们需要一个 index layer 来对输入特征图进行一个选择和重新排序,从而使得分组卷积能够实现,如上图 3 右边所示。

3.2. 网络结构

作者对 DenseNet 做了两个改变,来更简化网络结构改进计算效率。

  • 指数增加的增长率

在原来的 DenseNet 中,每一层会产生 \(k\) 个特征图,\(k\) 是一个常数称之为增长率。网络中更深的层会更依赖一些高层信息,因此我们应该使得更近的特征图之间有更多的连接,也就是来自靠后面层特征的比例应该比来自更早层特征的比例多一些。作者设置更深的层增长率更大,\(k=2^{m-1}k_0\),其中 \(m\) 代表第几个密集块,\(k_0\) 是一个常数。

  • 全密集连接

为了更加鼓励特征复用,作者连接输入层到其后面的所有层,甚至是不同块的也进行连接。如果特征图的空间大小不一样,则对分辨率较大的特征图进行平均池化下采样。

另外,可学习的分组卷积只应用在每一个基本层的第一个 1×1 卷积上,然后会进行一个通道打乱操作,让特征图均匀分布在每一个组中,紧接着的 3×3 卷积是一个标准的分组卷积。

4. 实验结果

在 DenseNet 的基础上引入可学习的分组卷积后,测试误差大大降低,然后再加上指数级增加的增长率策略,模型的表现还可以进一步提高。

在 CIFAR 和 ImageNet 数据集上的表现分别如下所示。

分组卷积的组数和 condensation 因子的对比试验如下所示。

获取更多精彩,请关注「seniusen」!

CondenseNet: An Efficient DenseNet using Learned Group Convolutions的更多相关文章

  1. 论文笔记-IGCV3:Interleaved Low-Rank Group Convolutions for Efficient Deep Neural Networks

    论文笔记-IGCV3:Interleaved Low-Rank Group Convolutions for Efficient Deep Neural Networks 2018年07月11日 14 ...

  2. IGC(Interleaved Group Convolutions)

    深度学习被引起关注是在2012年,用神经网络训练的一个分类模型在ImagNet上取得了第一名,而且其分类精度比第二名高出10多个点,当时所使用的模型为AlexNet,现在看来其为一个比较简单的网络,而 ...

  3. CondenseNet:可学习分组卷积,原作对DenseNet的轻量化改造 | CVPR 2018

    CondenseNet特点在于可学习分组卷积的提出,结合训练过程进行剪枝,不仅能准确地剪枝,还能继续训练,使网络权重更平滑,是个很不错的工作   来源:晓飞的算法工程笔记 公众号 论文:Neural ...

  4. Group Convolution分组卷积,以及Depthwise Convolution和Global Depthwise Convolution

    目录 写在前面 Convolution VS Group Convolution Group Convolution的用途 参考 博客:blog.shinelee.me | 博客园 | CSDN 写在 ...

  5. MySQL如何优化GROUP BY :松散索引扫描 VS 紧凑索引扫描

    执行GROUP BY子句的最一般的方法:先扫描整个表,然后创建一个新的临时表,表中每个组的所有行应为连续的,最后使用该临时表来找到组 并应用聚集函数.在某些情况中,MySQL通过访问索引就可以得到结果 ...

  6. ICCV 2017论文分析(文本分析)标题词频分析 这算不算大数据 第一步:数据清洗(删除作者和无用的页码)

    IEEE International Conference on Computer Vision, ICCV 2017, Venice, Italy, October 22-29, 2017. IEE ...

  7. AI:IPPR的数学表示-CNN稀疏结构进化(Mobile、xception、Shuffle、SE、Dilated、Deformable)

    接上一篇:AI:IPPR的数学表示-CNN基础结构进化(Alex.ZF.Inception.Res.InceptionRes). 抄自于各个博客,有大量修改,如有疑问,请移步各个原文.....  前言 ...

  8. 深度学习笔记(十一)网络 Inception, Xception, MobileNet, ShuffeNet, ResNeXt, SqueezeNet, EfficientNet, MixConv

    1. Abstract 本文旨在简单介绍下各种轻量级网络,纳尼?!好吧,不限于轻量级 2. Introduction 2.1 Inception 在最初的版本 Inception/GoogleNet, ...

  9. ShuffleNetV1/V2简述 | 轻量级网络

    ShuffleNet系列是轻量级网络中很重要的一个系列,ShuffleNetV1提出了channel shuffle操作,使得网络可以尽情地使用分组卷积来加速,而ShuffleNetV2则推倒V1的大 ...

随机推荐

  1. 多线程的些许理解(平台x86,具体考虑linux,windows)

    多线程的些许理解 一.体系架构 1.原子操作 1) 定义 不可中断的一个或者一系列操作,也就是不会被线程调度机制打断的操作,在运行期间不会有任何的上下文切换(context switch). 2) 我 ...

  2. Jdk1.8的安装(Linux和windows)

    1.1 JDK1.8下载地址 JDK下载:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151. ...

  3. Vue自行封装常用组件-弹出框

    使用方法: 1.在父组件中引入"box.vue" //import popUpBox from "./box.vue";   2.在父组件中注册 popUpBo ...

  4. 搭建CentOs7的WebServer

    CentOs7,在安装的时候,自己可以定义一些东西,包括硬盘分区,服务器角色等. 这一些就搭了一个BasicWebServer,这样的话,里面的很多勾选,包括Java,Perl,Python,php等 ...

  5. (转) Apache Shiro 使用手册(三)Shiro 授权

    解惑之处: 使用冒号分隔的权限表达式是org.apache.shiro.authz.permission.WildcardPermission 默认支持的实现方式. 这里分别代表了 资源类型:操作:资 ...

  6. 关于order_by

  7. oracle 环境变量问题

    ORACLE_HOME   配置为oracle   ..\dbhome_1      配置错误可能导致监听起不来  (也有可能是在装client时可能会更改了之前变量的值) TNS_ADMIN     ...

  8. UVA - 11107 Life Forms (广义后缀自动机+后缀树/后缀数组+尺取)

    题意:给你n个字符串,求出在超过一半的字符串中出现的所有子串中最长的子串,按字典序输出. 这道题算是我的一个黑历史了吧,以前我的做法是对这n个字符串建广义后缀自动机,然后在自动机上dfs,交上去AC了 ...

  9. 【BZOJ3143】【Luogu P3232】 [HNOI2013]游走 概率期望,图论

    期望\(DP\)入门题目. 关键思想:无向边的转移作为有向边考虑.其他的就是直接上全期望公式.由于这个题目不是有向无环图,所以需要高斯消元搞一搞. 设每个点的期望经过次数是\(g(x)\),那么有 \ ...

  10. PM、RD、QA、OP、CM、EPG 英文缩写是什么意思?

    1.PM: Product Manager,产品经理,又称品牌经理.举凡产品从创意到上市,所有相关的研发.调研.生产.编预算.广告.促销活动等等,都由产品经理掌控. 2.RD: Research an ...