深度可分离卷积_如何理解深度可分离卷积Depthwise Separable Convolution

博客介绍了深度可分离卷积,它相比传统卷积能大幅减少参数量、提升计算速度且对精度影响小。阐述了传统卷积和可分离卷积的操作流程,通过假设示例计算出可分离卷积参数减少87%。还提及TensorFlow和Keras中封装的相关接口。
部署运行你感兴趣的模型镜像

深度可分离卷积相比于传统的卷积,参数量大大减少,从而提升了计算数据,但对精度的影响却很小。

首先我们来看传统神卷积操作流程:

9ce71c4333a177a08b9ef30a1b1a0f44.gif

这是cs231n的卷积动图,可以看到每个filter都需要用和输入通道相同的深度,如果输入通道特别大,那么每个filter在通道上的计算都会特别巨大,它同时考虑区域和通道;

可分离卷积在这个地方做不一样的处理,它将对区域和通道的计算分离开,把卷积分为两个步骤:

33699771ad08ee1affab1d9131a357d5.png

第一步让每个filter只用一个通道去分别和输入通道做卷积,输出为filter数量的单通道,

第二步,再在这个输出上用1x1x输出通道数量的filter做卷积

现在计算下传统卷积和可分离卷积的参数量

假设一个3×3大小的filter,其输入通道为32,输出通道为64

传统卷积的参数:3×3×32×64=18432

可分离卷积:

先考虑区域,即每个通道对应一个3×3×1大小的filter, 然后考虑通道对应64个1×1×32大小的filter

参数:3×3×1×32 + 1×1×32×64=2336

参数减少87%,大大提升了计算速度。

在TensorFlow中已经封装好了接口,主要有两个接口

tf.nn.depthwise_conv2d(input,filter,strides,padding,rate=None,name=None,data_format=None)

tf.nn.separable_conv2d(input,depthwise_filter,pointwise_filter,strides,padding,rate=None,name=None,data_format=None)

depthwise_conv2d 接口只做上文中的第一步,如果要完整的输出还需要在其输出后再使用1x1的卷积操作

tf.nn.conv2d(input=out_pre, filter=next_out_filter, strides=[1,1,1,1], padding='VALID')

separable_conv2d接口把上面两步一起完成

此外keras.layers里也封装了这两个接口

您可能感兴趣的与本文相关的镜像

TensorFlow-v2.15

TensorFlow-v2.15

TensorFlow

TensorFlow 是由Google Brain 团队开发的开源机器学习框架,广泛应用于深度学习研究和生产环境。 它提供了一个灵活的平台,用于构建和训练各种机器学习模型

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值