对 CNN 的研究,目前集中在三个维度:
channel
,filter
,和residual
。
目标是把模型做小、做强、做到移动端,精度差点,没关系,可以加数据,离线多跑几轮。
无论 Xception
,还是 ResNeXt
,还有面向移动端的 ShuffleNet
和 MobileNet
。都是基于 Group Convolution
思想在 channel 维度进行“网络工程”,搭建新的模型。
Xception 的核心思想是:Depth-wise Separable 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 来说的。
假如 ??????????????????=??groupsize=N, 上一层的 ?????????????????????????????????×????????????ChannelFeatureMap×Filter 的数目为 ??M
简单的讲就是把 channel 做 ??N 等分,然后每一份(一个 group)分别与上一层的输出的????MN 个 channel 独立连接,之后将每个 group 的输出叠在一起(concatenate),作为这一层的输出 channel。
Group Convolution 是指将 channels 细分成多个 group,然后再分组进行 Convolution。这种思想始于 2012 年 AlexNet 的双 GPU 架构设计,相当于把 channels 均分到两个 GPU,分组卷积:
如果对每个通道进行卷积,就是 Depthwise Convolution
。
在卷积层中间插入 1×11×1 卷积,即 pointwise convolution
。举个例子,对经典的卷积操作,如果 OD 是 256256,ID 是 128128,卷积核大小 3×33×3,需要的参数为 128×3×3×256=294912128×3×3×256=294912 个参数,而 Spearable
卷积方法,假如 ????=4DM=4,这样中间层的 channel 数为
128×4=512128×4=512,再经过 1×11×1 卷积降维到 256256 个 channel,需要的总参数为:128×3×3×4+128×4×1×1×256=135680128×3×3×4+128×4×1×1×256=135680,参数量相当于普通卷积的 46%46%,还增加了通道数(128×4=512128×4=512)增强了特征表达能力。
所以说,理想的卷积 Block 应该是先用 1×11×1 卷积核降 channel,然后再进行 3×33×3 卷积提取特征,最后再用 1×11×1 卷积核降 channel。
利用上述结构重新设计 Inception model block,就是 Xception;重新设计 Resnet,就是 ResNeXt 架构。以达到在减少参数量的情况下增加模型的层数,既减少了存储空间,还增强了模型的表达能力。
通常来讲,如果对 channel 进行分组卷积,各小组就分头行动,互相没有交流,这样显然没有充分利用 channel 的信息。ShuffleNet 在分组之前,先将 channel 随记打乱,这样对信息的利用更充分,因此可以通过设计降低模型参数量而不影响模型的表达能力。
经典 CNN 的 Filter 是在邻域内采样卷积,如 3×33×3 卷积核是在 88 邻域采样。
但是,Filter 可以跨点采样进行卷积,从而可以利用更大范围内的信息,即 Dilated CNN,最早应用于图像语义分割,去年谷歌提出的 Wavenet 模型将 CNN 拓展到语音识别和语音合成。
将 Dilated CNN 的思想应用到 Resnet 架构中,就是 CVPR 2017 的 “Dilated Residual Networks”
ResNet 的 Connection 方式是将输入和输出相加,形成一个残差 Block。DenseNet 则更进一步,在每个 Block 内,将输入和输出直接拼接,而且在每一层都和之前所有层的输出拼接,这样可以减少中间层的通道数。
而最新的 Dual Path Networks 模型,则是融合了 ResNet 和 DenseNet 的优点:特征重利用和特征重提取。采用了双通道架构:
可以预想,接下来,将会有模型融合以上三点的集大成者?
现在越来越多的 CNN 模型从巨型网络到轻量化网络一步步演变,模型准确率也越来越高。现在工业界追求的重点已经不是准确率的提升(因为都已经很高了),都聚焦于速度与准确率的 trade off,都希望模型又快又准。因此从原来 AlexNet、VGGnet,到体积小一点的 Inception、Resnet 系列,到目前能移植到移动端的 mobilenet、ShuffleNet(体积能降低到 0.50.5 mb!),我们可以看到这样一些趋势:
类比到通道加权操作,卷积层跨层连接能否也进行加权处理?bottleneck + Group conv + channel shuffle + depthwise
的结合会不会成为以后降低参数量的标准配置?
原文:https://www.cnblogs.com/timssd/p/12577424.html