深度可分离卷积神经网络

卷积是数学中一个非常重要的运算 人工神经网络(ANN’s) . 卷积神经网络(CNN) 可用于学习特征,以及借助图像帧对数据进行分类。CNN有很多类型,其中一类是 深度可分离卷积神经网络 .

null

这些类型的CNN被广泛使用是因为以下两个原因——

  • 与标准的CNN相比,它们需要调整的参数更少,后者 减少过度装配
  • 他们是 计算上更便宜 因为计算量较少,因此适合移动视觉应用

这些CNN的一些重要应用是 MobileNet , 例外 (均由谷歌提出)

本文解释了深度可分离卷积网络的结构和操作,并推导了其相对于简单卷积神经网络的效率。

理解正常卷积运算

假设有一个大小为的输入数据 Df x Df x M ,其中Df x Df可以是图像大小,M是通道数(对于RGB图像为3)。假设有N个大小相同的过滤器/内核 Dk x Dk x M .如果完成了正常的卷积运算,则输出大小将为 Dp x Dp x N .

图片[1]-深度可分离卷积神经网络-yiteyi-C++库

1个卷积运算中的乘法数=滤波器的大小=Dk x Dk x M

因为有N个过滤器,每个过滤器垂直和水平滑动Dp次,

乘法总数变为nx Dp x Dp x(每个卷积的乘法数)

所以对于正常的卷积运算

乘法总数=N x Dp 2. x Dk 2. x M

深度可分卷积

现在来看深度方向的可分离卷积。该过程分为两个操作:

  1. 深度卷积
  2. 逐点卷积

  1. 深度卷积

    在里面 深度操作 ,卷积应用于 单通道 在一个不同于标准CNN的时代,它是为所有M频道做的。因此,这里的过滤器/内核大小相同 Dk x Dk x 1 .如果输入数据中有M个通道,则需要M个此类过滤器。输出的大小将不同 Dp x Dp x M .

    图片[2]-深度可分离卷积神经网络-yiteyi-C++库

    此操作的成本:

    单个卷积运算需要Dk x Dk乘法。

    由于滤波器在所有M通道上滑动Dp x Dp次,

    乘法的总数等于M x Dp x Dp x Dk x Dk

    所以对于深度卷积运算

    乘法总数=M x Dk 2. x Dp 2.

  2. 逐点卷积

    逐点操作 A. 1×1卷积 操作应用于M通道。因此,此操作的过滤器大小将为 1 x 1 x M .假设我们使用N个这样的过滤器,输出大小变为 Dp x Dp x N .

    图片[3]-深度可分离卷积神经网络-yiteyi-C++库

    此操作的成本:

    单个卷积运算需要1×M乘法。

    由于过滤器滑动Dp x Dp次,

    乘法总数等于M x Dp x Dp x(滤波器数量)

    所以对于逐点卷积运算

    乘法总数=M x Dp 2. x N

    所以, 对于整体操作:

    总乘法=深度转换乘法+点转换乘法

    总乘法=M*Dk 2. *Dp 2. +M*Dp 2. *N=M*Dp 2. *(丹麦) 2. +n)

    所以对于深度方向的可分离卷积运算

    乘法总数=M x Dp 2. x(Dk) 2. +N)

    比较这些卷积运算的复杂性

    卷积类型

    复杂性

    <

    标准

    N×Dp 2. x Dg 2. x M

    深度可分

    M x Dp 2. x(Dk) 2. +N)

      Complexity of depth wise separable convolutions 
    --------------------------------------------------   =  RATIO ( R )
           Complexity of standard convolution 
    

    解决后:

    比值(R)=1/N+1/Dk 2

    作为一个例子,考虑n=100和dk=512。那么比率R=0.010004

    这意味着,在本例中,深度可分离卷积网络执行的乘法比标准构成神经网络少100倍。

    这意味着我们可以部署更快的卷积神经网络模型,而不会损失太多的准确性。

© 版权声明
THE END
喜欢就支持一下吧
点赞5 分享