卷积核的分解技巧

1、Bottleneck卷积核

  Bottleneck卷积核的特点是能够降低特征数据的维度减少计算量,增加模型的非线性表达能力。
Bottleneck卷积核可以改变原始输入数据的通道数,而3×3卷积核可以通过组合多个卷积核的方式实现大尺寸卷句话饿的卷积效果。
在卷积核大小和步长不变的情况下,连续使用两个3×3卷积核得到的特征图大小相当于使用1个5× 5卷积核得到的特征图大小。参数数量从26(5×5+1)降到20((3×3+1)×2),而且由两个3×3卷积核得到的网络层数更多。
假设图像大小为n×n,经过5×5卷积后:(n-5+1)/1=n-4,连续两个3×3的卷积:第一次:(n-3+1)/1=n-2,第二次:(n-2-3+1)/1=n-4
连续使用3个3×3卷积核得到的特征图大小相当于使用1个7×7卷积核得到的特征图大小。

在这里插入图片描述
  将一个5×5卷积核分成两个3×3卷积核的做法虽然可以降低参数个数,但是这属于用时间换空间的做法,不适用于内存充足、算力不足的情况。如果要追求模型的运算性能,则使用层数少、卷积核大的方案会优于层数多、卷积核小的方案,因为一个5×5 卷积核要比3×3卷积核涉及的运算量小。

2、在实际的卷积神经网络操作中,为了加快速度,可以对卷积核进行一些优化操作。

  例如,通过矩阵乘法把3×3卷积核分解成3×1和1×3卷积核,然后分别对原有输入进行卷积运算。
在GoogleNet系列的Inception-V3结构中使用过:
假设256个特征输入、256个特征输出,Inception层中智能执行3×3的卷积,你那么总共要完成256×256×3×3=589834次乘加运算。
假设现在需要减少执行卷积运算的特征数量,将其变为64(256/4)。这种情况下,首先进行 256 → 64 256\rightarrow 64 25664的1×1卷积,然后再所有的Inception分支上进行64次卷积,在使用一个来自 64 → 256 64\rightarrow 256 64256的特征进行1×1卷积,乘加运算的次数:256×64×1×1+64×64×3×3+64×256×1×1=69632次,接近原来的1/8。

3、可分离深度卷积核

  可分离深度卷积核分别作用于每个通道并行进行独立计算。从深度方向可以把不同通道独立开,先进行特征提取,再进行特征融合,这样做可以用更少的参数取得更好的效果。
具体实现:
  以深度卷积的结果作为输入,然后进行一次正常的卷积运算。因此,该函数需要以两个卷积核作为输入,分别是深度卷积的卷积核用于融合操作的普通卷积核
  对输入进行可分离深度卷积的具体步骤如下:
(1) 在模型内部对输入的数据进行深度卷积,得到in_channels(j卷积核个数)×channel_multiplier(卷积核个数)个通道的特征数据。
(2)以特征数据作为输入,再次使用普通卷积核执行一次卷积运算。

4、空洞卷积

  空洞卷积也称扩张卷积,在卷积层中引入空洞参数,该参数定义了卷积核计算数据时各个值的间距。
  空洞的好处是在不执行池化操作而导致损失信息的情况下,加大了卷积的感受野,让每个卷积的输出都包含更大范围的信息。
例如:对于一个3×3的2空洞卷积,卷积核大小还是3×3,但是空洞的大小是1×1。也就是说,对于7×7的图像块,只有9个红点和3×3卷积核进行运算,其余点不参加运算。也可以理解为卷积核的大小是7×7,但是只有9个点的权重不等于0,其余权重是0。卷积核大小是3×3,但感受野增大到了7×7。
关于更详细的空洞卷积可了解:如下博文

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

星光里

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

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

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

打赏作者

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

抵扣说明:

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

余额充值