本文基于10-monkeys数据集进行分类实战
继续说深度可分离卷积原理:
一、过程
深度可分离卷积主要分为两个部分,第一个部分就是加入图片是3通道,把它depthwise,以前的卷积操作比如是一个立方体假如卷积核是5*5*3,图片是32*32*3,那么一次之后就变成1*1*1一个点,对于深度可分离卷积,为了降低参数量,第一步将卷积核看成1层的,每个通道分别去算,通道数有几个卷积核就有几个,不会把上面3*3*3个点一起来算,就是用每9个点用一个卷积核,只有二维的,这就和之前的卷积不一样。第一次depthwise是不会改变通道数的。
下一步就是pointwise,这个时候用的是1*1的卷积核,这个时候就是用立方体了,经过这一次计算,图像尺寸不会改变因为是1*1卷积核,但是输出的通道数,设置几个通道数,输出就是几个通道数,比如上图设置两个通道数,那么就输出两个通道数。
二、参数量
推荐博文:『高性能模型』深度可分离卷积和MobileNet_v1 - 叠加态的猫 - 博客园
那么对比原先的卷积,深度可分离卷积的参数量减少了多少呢?
假设卷积核的参数是Dk*Dk,输入的通道数是M,输出的通道数是N,那么参数量就是Dk*Dk*M*N,也就是某一层的参数量,对于计算量来说,还要乘以Df*Df,也就是输出尺寸,滑动次数。那么对于depthwise来说,输出通道数相当于1,所以参数量为普通CNN的N分之一。
对于pointwise来说,卷积核是1*1的,所以就没有Dk,前面变成1,那么参数量就是M*N,那么再乘以一个输入图像尺寸就是计算量。
注:卷积计算量多于参数量,因为要滑动