深度可分离卷积在谷歌的mobilenet和xception中得到的应用,比常规的卷积计算量少,提高了推理速度,并且可以抵抗overfitting. 那么计算量减少是如何做到的,或者说计算量的减少是指什么?今天我们来推导一下
现在推导一下一个标准卷积做了多少计算
计算输入数据的分辨率是DfXDf, 通道有M个,例如RGB3个通道 假设有N个filter, 每个filter的尺寸为DkXDkXM, 输出的尺寸为 DpXDPXN, 那么为了实现上图这个动作,需要的计算量为 DpXDpXNXDkXDkXM.
下面是深度可分离卷积的计算量推导.
第一步的计算量为 Dp*Dp*M*Dk*Dk
第二步的方法
通过N个 1X1XM 的filter, 得到 DpXDpXN的输出尺寸,计算量为 DpXDpXNXM
常规的计算量为DpXDpXNXDkXDkXM
新的卷积的计算量为 Dp*Dp*M*Dk*Dk + DpXDpXNXM = DpXDpXM(DkXDk + N)
显然新的卷积的计算量少.
我的总结:
*deep wise seperable convolutional* 通过把标准的卷积动作分为两步,实现了相同的输入输出分辨率,而且计算量少了不少,具体效果怎么样,google说效果很好,实际上效果也很好,我之前做过一个在手机上检测车辆的项目,使用mobilessd模型,在我的千元机上推理一张大约100毫秒左右,效果也很好.总之,如果为了提速,*deep wise seperable convolutional* 是你的测试的方案之一.
参考资料:
深度可分类卷积介绍
https://www.geeksforgeeks.org/depth-wise-separable-convolutional-neural-networks/
感慨:
刚才看了下,我的上一篇博客还是在2015年,5年过去了,物是人非啊.2015年的时候我换了一个城市工作,压力很大,几年来,有顺心的事,也有烦心的事,不过总体还不错,祝福一下自己.
最后的话:
我是一个工作10年的程序员,工作中经常会遇到需要查一些关键技术,但是很多技术名词的介绍都写的很繁琐,为什么没有一个简单的/5分钟能说清楚的博客呢. 我打算有空就写写这种风格的指南文档.CSDN上搜蓝色的杯子, 没事多留言,指出我写的不对的地方,写的排版风格之类的问题,让我们一起爱智求真吧.wisdomfriend@126.com是我的邮箱,也可以给我邮箱留言.