0. 参考资料
- Xception: Deep Learning with Depthwise Separable Convolutions. François Chollet, 2017.
- 如何评价谷歌的xception网络?
- MobileNet V2 论文初读
- 纵览轻量化卷积神经网络:SqueezeNet、MobileNet、ShuffleNet、Xception
- 无需数学背景,读懂 ResNet、Inception 和 Xception 三大变革性架构
- 王井东详解ICCV 2017入选论文:通用卷积神经网络交错组卷积
- 变形卷积核、可分离卷积?卷积神经网络中十大拍案叫绝的操作
- CNN中千奇百怪的卷积方式大汇总
- 对深度可分离卷积、分组卷积、扩张卷积、转置卷积(反卷积)的理解
- hellozting/InterleavedGroupConvolutions
- 可变形卷积网络:计算机新“视”界
对 CNN 的研究,目前集中在三个维度:
channel
,filter
,和residual
。
目标是把模型做小、做强、做到移动端,精度差点,没关系,可以加数据,离线多跑几轮。
1. Channel
无论 Xception
,还是 ResNeXt
,还有面向移动端的 ShuffleNet
和 MobileNet
。都是基于 Group Convolution
思想在 channel 维度进行“网络工程”,搭建新的模型。
Xception 的核心思想是:Depth-wise Separable Convolution
1.1 Group Convolution
推荐阅读:
Mathematicians call these abstract patterns groups. There is an entire field of math dedicated to them. Connections between a group and an object like the square are called group actions.
下图是一个变换群:
group 是相对于上一层的 channel 来说的。
假如 (group_{size} = N), 上一层的 (frac{Channel}{FeatureMap imes Filter}) 的数目为 (M)
简单的讲就是把 channel 做 (N) 等分,然后每一份(一个 group)分别与上一层的输出的(frac{M}{N}) 个 channel 独立连接,之后将每个 group 的输出叠在一起(concatenate),作为这一层的输出 channel。
Group Convolution 是指将 channels 细分成多个 group,然后再分组进行 Convolution。这种思想始于 2012 年 AlexNet 的双 GPU 架构设计,相当于把 channels 均分到两个 GPU,分组卷积:
如果对每个通道进行卷积,就是 Depthwise Convolution
。
1.2 Separable Convolution
在卷积层中间插入 (1 imes 1) 卷积,即 pointwise convolution
。举个例子,对经典的卷积操作,如果 OD 是 (256),ID 是 (128),卷积核大小 (3 imes3),需要的参数为 (128 imes 3 imes 3 imes 256=294912) 个参数,而 Spearable
卷积方法,假如 (DM=4),这样中间层的 channel 数为
(128 imes 4=512),再经过 (1 imes 1) 卷积降维到 (256) 个 channel,需要的总参数为:(128 imes 3 imes 3 imes 4 + 128 imes 4 imes 1 imes 1 imes 256=135680),参数量相当于普通卷积的 (46\%),还增加了通道数((128 imes 4=512))增强了特征表达能力。
所以说,理想的卷积 Block 应该是先用 (1 imes 1) 卷积核降 channel,然后再进行 (3 imes 3) 卷积提取特征,最后再用 (1 imes 1) 卷积核降 channel。
1.3 Xception
利用上述结构重新设计 Inception model block,就是 Xception;重新设计 Resnet,就是 ResNeXt 架构。以达到在减少参数量的情况下增加模型的层数,既减少了存储空间,还增强了模型的表达能力。
通常来讲,如果对 channel 进行分组卷积,各小组就分头行动,互相没有交流,这样显然没有充分利用 channel 的信息。ShuffleNet 在分组之前,先将 channel 随记打乱,这样对信息的利用更充分,因此可以通过设计降低模型参数量而不影响模型的表达能力。
2. Filter
2.1 Wavenet
经典 CNN 的 Filter 是在邻域内采样卷积,如 (3 imes 3) 卷积核是在 (8) 邻域采样。
但是,Filter 可以跨点采样进行卷积,从而可以利用更大范围内的信息,即 Dilated CNN,最早应用于图像语义分割,去年谷歌提出的 Wavenet 模型将 CNN 拓展到语音识别和语音合成。
2.2 Dilated Resnet
将 Dilated CNN 的思想应用到 Resnet 架构中,就是 CVPR 2017 的 “Dilated Residual Networks”
3. Connection
ResNet 的 Connection 方式是将输入和输出相加,形成一个残差 Block。DenseNet 则更进一步,在每个 Block 内,将输入和输出直接拼接,而且在每一层都和之前所有层的输出拼接,这样可以减少中间层的通道数。
而最新的 Dual Path Networks 模型,则是融合了 ResNet 和 DenseNet 的优点:特征重利用和特征重提取。采用了双通道架构:
可以预想,接下来,将会有模型融合以上三点的集大成者?
启发与思考
现在越来越多的 CNN 模型从巨型网络到轻量化网络一步步演变,模型准确率也越来越高。现在工业界追求的重点已经不是准确率的提升(因为都已经很高了),都聚焦于速度与准确率的 trade off,都希望模型又快又准。因此从原来 AlexNet、VGGnet,到体积小一点的 Inception、Resnet 系列,到目前能移植到移动端的 mobilenet、ShuffleNet(体积能降低到 (0.5) mb!),我们可以看到这样一些趋势:
卷积核方面:
- 大卷积核用多个小卷积核代替;
- 单一尺寸卷积核用多尺寸卷积核代替;
- 固定形状卷积核趋于使用可变形卷积核;
- 使用 (1 imes 1) 卷积核(bottleneck 结构)。
卷积层通道方面:
- 标准卷积用 depthwise 卷积代替;
- 使用分组卷积;
- 分组卷积前使用 channel shuffle;
- 通道加权计算。
卷积层连接方面:
- 使用 skip connection,让模型更深;
- densely connection,使每一层都融合上其它层的特征输出(DenseNet)
启发
类比到通道加权操作,卷积层跨层连接能否也进行加权处理?bottleneck + Group conv + channel shuffle + depthwise
的结合会不会成为以后降低参数量的标准配置?