深入浅出谈谈深度可分离卷积
1 简介
深度可分离卷积的核心思想就是将普通N个通道为M的卷积拆分成1个通道为M的卷积(这个卷积进行单通道滤波操作,区别于普通卷积滤波后通道相加)和N个1×1×M的卷积,其作用在于减少运行的参数量。如果采用 3 × 3 的卷积,那么采用深度可分离卷积后,参数将变成原来的1/8~1/9。
2 原理
2.1 普通卷积
对于普通卷积而言,一个边长为Dk,通道为M的卷积核(N个卷积),处理一个输入矩阵(通道为M),得到一个宽为Dw,高为Dh,通道为N的输出特征图(上图)。
仅仅考虑乘加计算,其参数量为:
计算量为:
2.2 深度可分离卷积
对于普通卷积而言,一个边长为Dk,通道为M的卷积核,处理一个输入矩阵(通道为M),得到一个宽为Dw,高为Dh,通道为M的中间特征图。为了获得和普通卷积一样的深度,通过N个通道为M的单位卷积核,得到宽为Dw,高为Dh,通道为N的输出特征图(上图)。
与普通卷积相比,最大特点在于通道M的深度可分离卷积核进行的是单个通道的点乘计算,所以一个卷积核处理后得到的中间特征图的通道依旧是M,而一个普通卷积核处理后得到的特征图的通道是1。
仅仅考虑乘加计算,其参数量为:
计算量为:
2.3 效率比较
=
提高计算效率显著。
3 点评
没看MobileNet论文原文,推测深度可分离卷积的思想源于卷积中很多参数为0或者接近0,不然这样压缩参数岂不是有很大损失?倘若很多参数不中用,目测直接压缩网络也可以了吧。
做了些实际的DL工程项目,不禁好奇对于一个特定的任务而言,多少参数或者说网络结构是合理的问题,似乎很难回答。