Depthwise Separable Convolution

    分为Depthwise(DW)卷积PointWise(PW)卷积,参考Google的Xception。用于提取特征,相较于常规卷积操作,其参数量和运算成本较低。

    常规卷积计算公式:MobileNetv1、MobileNetv2、PW、DW - 图1
    image.png

    Depthwise Convolution:一个卷积核负责一个通道,即一个通道只被一个卷积核卷积。如:输入是5x5x3的RGB图像,DW Conv完全是在二维平面内进行,卷积核的数量与输入的通道数相同(输入通道数==输出通道数),故经过运算后得到三个feature map。其MobileNetv1、MobileNetv2、PW、DW - 图3
    image.png

    Pointwise Convolution:卷积核尺寸为1x1xMM为上一层通道数。该步骤的卷积运算会将上一步的feature map在深度方向进行加权组合,最终得到新的feature map。其MobileNetv1、MobileNetv2、PW、DW - 图5

    image.png

    MobileNet-V1 将VGG中的卷积替换成深度可分离卷积,及ReLu6(优点?)。 DW-Conv大大降低计算量,并且K*K DepthWise + 1*1 PointWise结构性能上也接近K*K Conv,但实际训练后发现Depthwise的部分kernel是空的(why?)。

    MobileNet-V2 轻量化卷积神经网络。

    • Inverted ResidualResNet中的Residual Block先经过1*1Conv、将feature map通道数“压”下来,再经过3*3Conv目的是特征提取,最后再经过1*1Conv,将feature map通道数再“扩张”回去。即先“压缩”,再“扩张”。而Inverted Residual就是先“扩张”,再“压缩”。扩张的目的是提升通道数以获取更多的特征。
    • Linear Bottleneck。为了避免Relu对特征的破坏,最后一层的Conv不再采用Relu而是Linear

    image.png

    MobileNet-V1 and MobileNet-V2:

    1. DW Conv前增加了1*1 Conv的“扩张”层,目的是提升通道数以获取更多特征;
    2. 使用Linear替换ReLU6,目的是防止ReLu破坏特征(由于其对于负输入,输出全是0,而本来的特征已经被“压缩”,再经过Relu的话又会“损失一部分”特征,故采用Linear);
    3. MobileNet-V1采用DepthWise Separable Convolution减少运算量及参数量,未采用shortcut的方式。而ResNet、DenseNet均采用shortcut模块,证明该模块的有效性,故MObileNet-V2也采用shortcut模块。
    4. 整个网络除去最后的avgpool,而是采用stride=2来进行下采用,此做法已经成为主流(why?)。

    image.png

    Bottlenck结构
    image.png
    image.png
    注:stride=2时,不采用shortcut

    注:t表示通道“扩张”倍数,c表示输出通道数,n表示重复次数,s表示步长。
    问题:第五行,stide=2,但输出分辨率未改变;只有17个bottleneck而不是19个。
    image.png