卷积是数学中一个非常重要的运算 人工神经网络(ANN’s) . 卷积神经网络(CNN) 可用于学习特征,以及借助图像帧对数据进行分类。CNN有很多类型,其中一类是 深度可分离卷积神经网络 .
这些类型的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个卷积运算中的乘法数=滤波器的大小=Dk x Dk x M
因为有N个过滤器,每个过滤器垂直和水平滑动Dp次,
乘法总数变为nx Dp x Dp x(每个卷积的乘法数)
所以对于正常的卷积运算
乘法总数=N x Dp 2. x Dk 2. x M
深度可分卷积
现在来看深度方向的可分离卷积。该过程分为两个操作:
- 深度卷积
- 逐点卷积
- 深度卷积
在里面 深度操作 ,卷积应用于 单通道 在一个不同于标准CNN的时代,它是为所有M频道做的。因此,这里的过滤器/内核大小相同 Dk x Dk x 1 .如果输入数据中有M个通道,则需要M个此类过滤器。输出的大小将不同 Dp x Dp x M .
此操作的成本:
单个卷积运算需要Dk x Dk乘法。
由于滤波器在所有M通道上滑动Dp x Dp次,
乘法的总数等于M x Dp x Dp x Dk x Dk
所以对于深度卷积运算
乘法总数=M x Dk 2. x Dp 2.
- 逐点卷积
在 逐点操作 A. 1×1卷积 操作应用于M通道。因此,此操作的过滤器大小将为 1 x 1 x M .假设我们使用N个这样的过滤器,输出大小变为 Dp x Dp x N .
此操作的成本:
单个卷积运算需要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倍。
这意味着我们可以部署更快的卷积神经网络模型,而不会损失太多的准确性。