CondenseNet: An Efficient DenseNet using Learned Group Convolutions
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的更多相关文章
- 论文笔记-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 ...
- IGC(Interleaved Group Convolutions)
深度学习被引起关注是在2012年,用神经网络训练的一个分类模型在ImagNet上取得了第一名,而且其分类精度比第二名高出10多个点,当时所使用的模型为AlexNet,现在看来其为一个比较简单的网络,而 ...
- CondenseNet:可学习分组卷积,原作对DenseNet的轻量化改造 | CVPR 2018
CondenseNet特点在于可学习分组卷积的提出,结合训练过程进行剪枝,不仅能准确地剪枝,还能继续训练,使网络权重更平滑,是个很不错的工作 来源:晓飞的算法工程笔记 公众号 论文:Neural ...
- Group Convolution分组卷积,以及Depthwise Convolution和Global Depthwise Convolution
目录 写在前面 Convolution VS Group Convolution Group Convolution的用途 参考 博客:blog.shinelee.me | 博客园 | CSDN 写在 ...
- MySQL如何优化GROUP BY :松散索引扫描 VS 紧凑索引扫描
执行GROUP BY子句的最一般的方法:先扫描整个表,然后创建一个新的临时表,表中每个组的所有行应为连续的,最后使用该临时表来找到组 并应用聚集函数.在某些情况中,MySQL通过访问索引就可以得到结果 ...
- ICCV 2017论文分析(文本分析)标题词频分析 这算不算大数据 第一步:数据清洗(删除作者和无用的页码)
IEEE International Conference on Computer Vision, ICCV 2017, Venice, Italy, October 22-29, 2017. IEE ...
- AI:IPPR的数学表示-CNN稀疏结构进化(Mobile、xception、Shuffle、SE、Dilated、Deformable)
接上一篇:AI:IPPR的数学表示-CNN基础结构进化(Alex.ZF.Inception.Res.InceptionRes). 抄自于各个博客,有大量修改,如有疑问,请移步各个原文..... 前言 ...
- 深度学习笔记(十一)网络 Inception, Xception, MobileNet, ShuffeNet, ResNeXt, SqueezeNet, EfficientNet, MixConv
1. Abstract 本文旨在简单介绍下各种轻量级网络,纳尼?!好吧,不限于轻量级 2. Introduction 2.1 Inception 在最初的版本 Inception/GoogleNet, ...
- ShuffleNetV1/V2简述 | 轻量级网络
ShuffleNet系列是轻量级网络中很重要的一个系列,ShuffleNetV1提出了channel shuffle操作,使得网络可以尽情地使用分组卷积来加速,而ShuffleNetV2则推倒V1的大 ...
随机推荐
- Freemarker生成word文档的时的一些&,>,<报错
替换模板ftl中的内容的时候,一些特殊的字符需要转移,例如: &,<,> value为字符串 value.replace("&","& ...
- LeetCode——等差数列划分
题目: 如果一个数列至少有三个元素,并且任意两个相邻元素之差相同,则称该数列为等差数列. 例如,以下数列为等差数列: 1, 3, 5, 7, 97, 7, 7, 73, -1, -5, -9 以下数列 ...
- oracle数据泵expdp和impdp使用
expdp和impdp优缺点 优点: expdp/impdp命令,我们也通常称之为“数据泵(DataPump)”,它具有以下优点: l 在性能上,具有并行处理能力,因此可以获得性能上的优势,加快导入导 ...
- 查看Linux服务器硬件信息
一:查看cpu# 总核数 = 物理CPU个数 X 每颗物理CPU的核数 # 总逻辑CPU数 = 物理CPU个数 X 每颗物理CPU的核数 X 超线程数# 查看物理CPU个数cat /proc/cpui ...
- Java定义队结构,实现入队、出队操作
package com.example.demo; import java.util.ArrayList; public class Queue { ArrayList<Object> l ...
- Inception网络模型
最近在研究inception模型,将v1到v4版本的论文都研读了一下,这里做一下总结. 这里推荐一下这个GitHub,博主将常见的论文都做了翻译,大家可以参考中文来加深理解. 1.Inception ...
- 4.(基础)tornado应用安全与认证
这一节我们介绍应用安全与认证,其实中间省略了一个数据库.对于tornado来说,读取数据库的数据,性能的瓶颈还是在数据库上面.关于数据库,我在<>中介绍了sqlalchemy,这是一个工业 ...
- WinRAR去广告
许多解压软件的广告看着令人头疼,今天我就给大家分享一个把WinRAR软件的广告去掉的方法. 环境: win rar restorator 2007(腾讯软件直接下载即可) 步骤: 首先 ...
- PAT Basic 1011 A+B 和 C (15 分)
给定区间 [−] 内的 3 个整数 A.B 和 C,请判断 A+B 是否大于 C. 输入格式: 输入第 1 行给出正整数 T (≤),是测试用例的个数.随后给出 T 组测试用例,每组占一行,顺序给出 ...
- Mongodb操作-更新操作符
1.$inc 用法:{$inc:{field:value}} 作用:对一个数字字段的某个field增加value 示例:将name为chenzhou的学生的age增加5 > db.student ...