轻量级网络:分组卷积&深度可分离卷积

本文简介轻量级网络中两种经典压缩方法:分组卷积(Group Convolution)深度可分离卷积(depthwise separable convolution)

参考文献:

0. 卷积

对于普通卷积而言,卷积层的filters决定了参数量,其中

  • 尺寸(h1,w1)与 input / output 的(H,W)有关
  • 通道数c1与 input 的通道数相同
  • 数量c2与 output 的通道数相同

从而,普通卷积层的参数量为: P 1 = h 1 × w 1 × C 1 × C 2 = k 2 C 1 C 2 P1 = h1×w1×C1×C2 = k^2C1C2 P1=h1×w1×C1×C2=k2C1C2
在这里插入图片描述

1. 分组卷积(Group Conv)

分组卷积的概念最先来源于AlexNet,其基本原理如下图。

当时是由于GTX580仅有3GB的memory,因此AlexNet在两块GPU上运行,才能满足其大参数量的需求

在这里插入图片描述

  • 将input/output按channels分成g组,每组维度即为(H1,W1,C1/g)和(H2,W2,C2/g)
  • 从而filters也为g组,每组C2/g个维度为(h1,w1,C1/g)的filters

其实就相当于将原来的卷积层拆分成了g个并行卷积层,其实我们的filters数量没有变化,只是每一个filter仅负责C1/g个通道信息了,从而参数量变为: P 2 = P 1 / g P2 = P1/g P2=P1/g

2. 深度可分离卷积(Depthwise Seperable Conv)

MobileNet中,将深度可分离卷积描述为两个步骤: 深度卷积(Depthwise Conv)和逐点卷积(Pointwise Conv)

  • 深度卷积,其实是上文中分组卷积的一个特例,令C2=C1,g=C1,分组卷积便变成了深度卷积。说白了,深度卷积就是对input的每一个通道单独做卷积,使(H1,W1, C1)→(H2,W2, C1)
  • 逐点卷积,其实就是普通卷积的一个特例,只是卷积核尺寸为1×1而已;说白了就是用1×1 filters做一次通道调整,使(H2,W2,C1)→(H2,W2,C2)

参数量计算:

  • 深度卷积参数量:h1×w1×1×C1
  • 驻点卷积参数量:1×1×C1×C2

因此, P 3 = k 2 C 1 + C 1 C 2 = ( 1 / C 2 + 1 / k 2 ) P 1 P3=k^2C1+C1C2=(1/C2+1/k^2)P1 P3=k2C1+C1C2=(1/C2+1/k2)P1
(若C2相对于k而言较大,那么 P 3 ≈ P 1 / k 2 P3≈P1/k^2 P3P1/k2
在这里插入图片描述
下图取自MobileNet-v1
在这里插入图片描述

3. 总结

  • 分组卷积:压缩效果 ∝ \propto g
  • 深度可分离卷积:压碎效果 ∝ \propto k 2 k^2 k2
  • 深度可分离卷积相当于分组卷积和普通卷积的结合,前者负责二维卷积,后者负责通道调整
  • 1×1 filter的使用应该可以追溯到NIN(2013),后来众多网络(包括GoogleNetResNet)将这种设计用到网络设计中(比如压缩参数量)
  • MoblieNet从V1到V3,对结构有所调整,具体请参见相关论文
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值