目标检测 --- Depthwise Convolution(深度可分离卷积)原理与思考

目标检测 — Depthwise Convolution(深度可分离卷积)原理与思考

最近在研究mobilenet,其中有一层网络结构–Depthwise Convolution(深度可分离卷积),然后就拎出来仔细研究下~

参考:https://cloud.tencent.com/developer/article/1453992
https://www.zhihu.com/question/265434464

一、算法原理

1、先说一下常规的卷积操作
在这里插入图片描述
假设输入的feature map的shape为(64,64,3),想经过卷积之后得到的feature map的channels为4。那么常规的卷积就是利用4组(3,3,3)的卷积核进行卷积,那么最终所需要的参数大小为:

Convolution参数大小为:3 * 3 * 3 * 4 = 108

2、Depthwise Convolution(深度可分离卷积)
还是用上述的例子~
在这里插入图片描述
首先,先用一个3 * 3 * 3的卷积核在二维平面channels维度上依次与input feature map进行卷积,那么这个时候,output feature map的w和h已经与目标的feature map相同了,但是channels并没有达到目标,生成的feature map的channels还是3。
在这里插入图片描述
然后,基于上述生成的feature map,利用4组1 * 1 * 3的卷积核进行卷积,目的当然是改变channel为4(这一步其实还是常规的卷积操作,只不过卷积核的w和h都是1,这一点比较特殊)。
最后,生成的feature map与常规的卷积生成的feature map的shape完全相同。让我们来看下Depthwise Convolution(深度可分离卷积)所需要的参数大小:

Depthwise Convolution参数大小:3 * 3 * 3 + 1 * 1 * 3 * 4 = 27 + 12 = 39

相同的输入,同样是得到4张Feature map,Depthwise Convolution的参数个数是常规卷积的约1/3。因此,在参数量相同的前提下,采用Depthwise Depthwise 的神经网络层数可以做的更深。

二、思考

最开始的时候,我并没有用Depthwise Convolution层(下载地址:https://github.com/yonghenglh6/DepthwiseConvolution.git)进行实现,是用常规的Convolution中group近似替代的。但是训练速度就超级超级慢~然后在知乎上一顿搜索,看看大神咋说的。最后,总结了几点:

1.caffe-ssd源码支持group convolution(即用group近似支持Depthwise Convolution),但是速度极慢,因为Depthwise Convolution在进行上述第一步的时候,是在channels维度进行for循环遍历将每一个channel进行卷积(理论上来说是可以用gpu实现for循环,但是作者并没有这么做,我也不清楚原因是为啥)
2.如果用Depthwise Convolution层去实现的话,速度大概会较group convolution提升4倍左右。

  • 12
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

进我的收藏吃灰吧~~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值