[网络模型]MixNet——MixConv: Mixed Depthwise Convolutional Kernels

MixConv: Mixed Depthwise Convolutional Kernels
  论文地址:MixConv: Mixed Depthwise Convolutional Kernels
  这篇论文由Google Brain发表,主要讨论了深度可分离卷积中被忽略的一个问题:卷积核的尺寸大小。在这篇文章中,作者系统性的分析了不同卷积核大小的影响,并且观察到有效的结合不同尺寸的卷积核可以同时提升模型的准确性和效率。在此基础上,提出了混合深度可分离卷积(MixConv)——在单个卷积操作中使用多尺寸混合卷积核。最后,将其嵌入到AutoML框架中,使用AutoML搜索出了MixNets模型家族,其模型效果超过了MobileNetV2(ImageNet top-1 accuracy +4.2%),ShuffleNetV2(+3.5%),MnasNet (+1.3%),ProxylessNAS (+2.2%), FBNet (+2.0%). 特别的是,在移动模型设置限制下(<600M FLOPS)实现了78.9% 的ImageNet top-1 accuracy。

卷积核大小对模型的影响
  作者分析了一个基本的问题“do larger kernels always achievehigher accuracy? 在我们常识里,越大的卷积核虽然会带来更多的参数和计算量,但也会包含更多的细节信息,但是是否会提升模型的准确性?作者在MobileNets上做了对比试验:

  结果发现,在MobileNetV1中,当卷积核达到99时,准确率明显下降;在MobileNetV2中,当卷积核达到1111时,准确率明显下降。(其实从另一个角度也可以解释,当卷积核尺寸达到极端值时,就相当于全连接层了,在DenseNet中已经证明了,这是次优的)

MixNet
  因此,作者提出,我们既需要小的卷积核也需要更大的卷积核,来同时提升模型的准确率和效率。通过将多个不同尺寸的卷积核混合到单个的深度可分离卷积OP单元中,将单个深度可分离卷积通道分组,不同的组采用不同尺寸的卷积核,最终将不同组的卷积结果进行Concate连接,实现MixNet。如下图所示:

  在这里,作者进一步讨论了分组方式与卷积核大小的选择。
分组方式
  通过实验发现,对于MobileNets而言,分为4组是个安全的选择;在AutoML的帮助下,分组为(1-5)之间的变量可以获得更高的准确度和效率。
  而对于每组所包含的通道数,作者分析了 两种方法:1)等分,不同的组含有相同数量的卷积核数目;2)指数划分,第i-th个group含有2**(-i)比例的通道数。例如,对于4-group,32通道,采用方式1),将通道数分为(8,8,8,8),采用方式2),将通道数划分为(16,8,4,4)。
卷积核大小
  对于每组中卷积核的尺寸设置,从33开始,对于第i-th组,卷积核大小为(2i-1)(2i-1);对于4组MixConv,卷积核大小便是(33,55,77,99)。
  在这里,作者还尝试了使用膨胀卷积来代替大尺寸的卷积核,但由于膨胀卷积存在丢失局部细节的缺点,因此效果并不好。
实验结果如下图所示:

  最终,作者在AutoML设计中,仅仅采用了等分的方法(并没有采用指数划分和膨胀卷积)。
AutoML__MixNets
  以下是AutoML搜索出的网络模型在ImageNet2012上的效果,根据FLOPS大小分为MixNet-S/MixNet-M/MixNet-L(具体的模型细节,参考原论文):

总结
  在这篇论文中,作者首先分析了不同卷积核大小对深度可分离卷积的影响,证明了传统的深度可分离卷积受到了单一卷积和大小的限制;其次,作者提出了混合深度可分离卷积(MixNet);最后,将MixNet嵌入AutoML框架中,通过神经网络搜索技术,得到了MixNets模型家族,实验结果显示,相比于最近的移动网络模型,在ImageNet分类数据集和4个广泛使用的迁移学习数据集上具有更好的准确性和效率。

代码

#论文中的代码
def mixconv(x, filters, **args):
	# x: input features with shape [N,H,W,C]
	# filters: a list of filters with shape [K_i, K_i,C_i,M_i] for i-th group.
    G = len(filters)
    y = []
    for xi, fi in zip(tf.split(x, G, axis=-1), filters):
        y.append(tf.nn.depthwise_conv2d(xi, fi, **args))
    return tf.concat(y, axis=-1)
  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值