MixNet学习笔记
最近,谷歌使用了AutoML,推出了一种新网络:MixNet,其论文为《MixNet: Mixed Depthwise Convolutional Kernels》。其主要创新点是,研究不同卷积核尺寸的影响和观察到组合不同尺寸的卷积核能提高准确率。作者将混合了不同尺寸的卷积核的卷积操作命名为MDConv,并将其使用在深度可分离卷积中,能提高显存的MobileNet的准确率。
3*3的卷积已经得到了广泛的实践应用了,但是随着近期部分网络的推出,5*5或者7*7的大卷积核有重新出现,例如EfficientNet,这些网络都证明了,大卷积核能提高模型的准确率和效率。但是否卷积核越大,准确率就越高呢?作者首先在mobilenet上分析了,不同尺寸的卷积核对准确率的影响,如Fig.1所示。可以看出,卷积核越大,模型的大小也随之增加;随着卷积核增加,准确率先上升,后下降。说明了,卷积核并不是越大越好,过大的卷积核会损伤模型的准确率。对比实验也表明了:我们需要大卷积核来高分辨率、小卷积核来适应低分辨率。

为了实现这一点,作者提出了mixed depthwise convolution(MDConv)模块,其实由多个不同尺寸的卷积核组成,如Fig.2所示。左图是深度可分离间距,其每个通道都是由同一尺寸的卷积核来进行运算;右图是MDConv模块,将通道分成若干组,每一组由同一尺寸的卷积核进行运算,每组的卷积核尺寸不同。最后通过MDConv计算后,将不同组的特征图进行concat起来。注意一点是,在每组中,每个通道都与这个卷积核进行depthwise convolution,而不是普通的convolution。

因此,如何这就有了几个可以讨论的点:
- MDConv该分成多少组呢?当组数为1时,就是普通的深度可分离卷积,显然,这不是作者想要的。根据实验,作者发现,组数=4时最适合mobilenet;但得益于神经搜索网络,组数从1到5比较能兼顾大部分模型的准确率和效率;
- 每一组的卷积核尺寸是多大呢?如果两组的卷积核尺寸相同,那么两组就会等价为1组,因此,作者限制每组的卷积核尺寸都不相同。作者从3*3的卷积核开始,第i组的卷积核尺寸为2i+1,也就是说,使用{3*3,5*5,7*7,...}之类的卷积核;
- 每组包含多少个通道数呢?作者考虑了两种通道分割的方法,均等分割和指数分割;
- 是否使用空洞卷积呢?大尺寸卷积核意味着更多参数和计算量,因此通常会考虑引入空洞卷积,这样能扩大感受野,而不耗费额外的参数和计算量。但是,从接下来的试验来看,空洞卷积通常会比大尺度卷积的效果要差。
作者用更大的卷积核或者MDConv来代替mobilenet中的3*3卷积核,在ImageNet上进行了试验,结果如Fig.4所示。可以看到:1)不同尺寸的卷积核能提高模型的准确率和效率;2)MDConv对大尺寸卷积核不太敏感,因此可以使用大卷积核来实现更加稳定的准确率。

作者对刚刚那4个问题作出了对比试验,得到如下结论,就不细说了:
- 平均分割和指数分割效果类似;
- 空洞卷积使用于小尺寸卷积核,但如果大卷积核使用空洞卷积,准确率会迅速恶化。作者认为,当大尺寸卷积核使用空洞卷积时,会错过很多局部信息。
作者使用了AutoML来对MDConv模块进行搜索,得到了MixNet网络,如Fig.8所示。该MixNet有3个不同尺寸的网络,分别是MixNet-S,MixNet-M,MixNet-L,对应于不同的MDConv中使用的卷积核的尺寸。

最后,作者使用MixNet网络,在ImageNet数据集上进行了测试,并与其他模型进行了对比,如Fig.7所示。可以看出在同等FLOPS下,MixNet网络比很多轻量化网络的准确率都要高。

总结
作者重新思考了不同卷积核对模型的影响效果,并分析了卷积核尺寸对准确率的影响,进而提出了MDConv来混合不同尺寸的卷积核。但是,这个网络的实际速度speed不一定会快,因为该网络存在过多的分组、平行度也被破坏,不符合shufflenet中提出的4条轻量化原则。所以准确率可能会有所提高,实际速度可能会更加慢。
MixNet学习笔记的更多相关文章
- js学习笔记:webpack基础入门(一)
之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...
- PHP-自定义模板-学习笔记
1. 开始 这几天,看了李炎恢老师的<PHP第二季度视频>中的“章节7:创建TPL自定义模板”,做一个学习笔记,通过绘制架构图.UML类图和思维导图,来对加深理解. 2. 整体架构图 ...
- PHP-会员登录与注册例子解析-学习笔记
1.开始 最近开始学习李炎恢老师的<PHP第二季度视频>中的“章节5:使用OOP注册会员”,做一个学习笔记,通过绘制基本页面流程和UML类图,来对加深理解. 2.基本页面流程 3.通过UM ...
- 2014年暑假c#学习笔记目录
2014年暑假c#学习笔记 一.C#编程基础 1. c#编程基础之枚举 2. c#编程基础之函数可变参数 3. c#编程基础之字符串基础 4. c#编程基础之字符串函数 5.c#编程基础之ref.ou ...
- JAVA GUI编程学习笔记目录
2014年暑假JAVA GUI编程学习笔记目录 1.JAVA之GUI编程概述 2.JAVA之GUI编程布局 3.JAVA之GUI编程Frame窗口 4.JAVA之GUI编程事件监听机制 5.JAVA之 ...
- seaJs学习笔记2 – seaJs组建库的使用
原文地址:seaJs学习笔记2 – seaJs组建库的使用 我觉得学习新东西并不是会使用它就够了的,会使用仅仅代表你看懂了,理解了,二不代表你深入了,彻悟了它的精髓. 所以不断的学习将是源源不断. 最 ...
- CSS学习笔记
CSS学习笔记 2016年12月15日整理 CSS基础 Chapter1 在console输入escape("宋体") ENTER 就会出现unicode编码 显示"%u ...
- HTML学习笔记
HTML学习笔记 2016年12月15日整理 Chapter1 URL(scheme://host.domain:port/path/filename) scheme: 定义因特网服务的类型,常见的为 ...
- DirectX Graphics Infrastructure(DXGI):最佳范例 学习笔记
今天要学习的这篇文章写的算是比较早的了,大概在DX11时代就写好了,当时龙书11版看得很潦草,并没有注意这篇文章,现在看12,觉得是跳不过去的一篇文章,地址如下: https://msdn.micro ...
随机推荐
- Message 消息提示
常用于主动操作后的反馈提示.与 Notification 的区别是后者更多用于系统级通知的被动提醒. 基础用法 从顶部出现,3 秒后自动消失. Message 在配置上与 Notification 非 ...
- 从 ssh private key 中重新生成 public key
Use the -y option to ssh-keygen: ssh-keygen -f ~/.ssh/id_rsa -y > ~/.ssh/id_rsa.pub From the 'man ...
- java:面向对象(接口(续),Compareble重写,Comparator接口:比较器的重写,内部类,垃圾回收机制)
接口: *接口定义:使用interface关键字 * [修饰符] interface 接口名 [extends 父接口1,父接口2...]{ * //常量的声明 * //方法的声明 * } *接口成员 ...
- jvm的学习笔记:二、类的初始化,代码实战(1)
对于静态字段来说,直接定义该字段的类才会被初始化 System.out.println(MyChild1.str); 输出: myParent1 static block hello myParent ...
- linux系统查看当前正在运行的服务
--查看当前服务器所有服务 service --status-all -- 查看当前所有正在运行的服务 service --status-all | grep running --查看指定服务运行状态 ...
- 【Python开发】使用pyplot模块绘图
快速绘图 使用pyplot模块绘图¶ matplotlib的pyplot模块提供了和MATLAB类似的绘图API,方便用户快速绘制二维图表.我们先看一个简单的例子: 05-matplotlib/mat ...
- 单例模式(一)static、final和单例模式
static 那天我朋友问了我个问题,static和单例模式有什么区别,所以我觉得static可以讲一下 他的问题是,把对象弄成static是不是就不变了 显然,这是还没弄清楚引用和对象的区别 其实存 ...
- Django2.2 连接mySQL数据库
一.Django2.2连接数据库(踩雷) 首先,Django2.2自带的是sqlite3数据库,但我们学的是mysql,因此学着连接(在mysql环境搭建成功的情况下)---参考博客: https:/ ...
- PTA(Basic Level)1015.德才论
宋代史学家司马光在<资治通鉴>中有一段著名的"德才论":"是故才德全尽谓之圣人,才德兼亡谓之愚人,德胜才谓之君子,才胜德谓之小人.凡取人之术,苟不得圣人,君子 ...
- Dubbo使用Sentinel来对服务进行降级与限流
一.Sentinel 是什么 Sentinel 是阿里中间件团队开源的,面向分布式服务架构的轻量级流量控制产品,主要以流量为切入点,从流量控制.熔断降级.系统负载保护等多个维度来帮助用户保护服务的稳定 ...