前言
大家想着看这篇博客,大多是因为看完MobileNet后,对其原理理解不清楚。MoblieNet是基于深度可分离卷积,所以想弄明白MobileNet就必须深入了解深度可分离卷积。话不多说,进入正题。
深度可分离卷积
深度可分离卷积由深度卷积(Deepwise convolution)+点卷积组成(Pointwise convolution)
深度可分离卷积和普通卷积的区别
这里事先申明一下,卷积提取特征的过程,默认假定卷积步长1、填充为0
一、普通卷积
普通卷积主要是通过卷积核来提取给定输入的特征,所以理解普通卷积的核心在于理解卷积核。卷积核是由卷积核的大小、通道数、个数三部分构成,其中卷积核的大小的取决于输出特征图的大小(卷积后输出特征图的计算公式我就不列举出来了),卷积核的通道数由输入特征的通道数决定,卷积核的个数是由输出特征图的通道数决定。
举个例子:要用普通的卷积提取给定输入特征图(假如是28x28x3的图片),输出的大小为26x26x256的图片,问卷积核的大小、通道数、个数分别是多少。答案是卷积核的大小是3、通道数是3、个数是256。具体过程是:一个卷积核首先会与给定的输入特征的通道数(这个例子中是3)进行同步,然后分别与给定的输入特征进行一对一相乘,对所有结果进行相加,形成成一个通道数为1、大小为26x26的特征图,这样的操作会依次被其余255个卷积核执行255次,最后也就生成256个特征图,这256个特征图也就是输出的结果。(图解到时候找到合适在往上补)
二、深度可分离卷积
深度可分离卷积由深度卷积和点卷积组成。深度卷积与普通卷积不同的是, 个数与给定输入特征图的通道数一致,大小则是由输出特征图来确定。这样就会使输出特征图的通道数与给定输入特征图的通道数一致。逐点积就是卷积核大小为1x1的普通卷积,目的就是对特征图进行升维和降维。
深度可分离卷积和普通卷积参数大小比较
假设输入特征图为H x W x C卷积核的大小都为Dk x Dk,通道数为N,输出特征图的大小为F x G,通道数为M。
普通卷积:
计算量为:Dk x Dk x N x F x G x M
参数量为Dk x Dk x N x M
深度可分离卷积:
计算量为:Dk x Dk x F x G x M + 1 x 1 x N x F x G x M
参数量为:Dk x Dk x C + 1 x 1 x N x M
相比于普通卷积,深度可分离卷积计算量和参数量都为普通卷积的
结语
分享就到这里了,欢迎大家给出自己的见解和意见!