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 ...
随机推荐
- mysql 安装 和 mysql 远程连接
一.mysql安装 1.下载MySQL数据库可以访问官方网站:https://www.mysql.com/ 2.点击DOWNLOADS模块下的Community模块下的MySQL Community ...
- [zookeeper]ZooInspector的使用
一.背景 Zookeeper作为常用的集群协调者组件被广泛应用,尤其是在大数据生态圈中: Zookeeper集群存储各个节点信息,包括:Hadoop.Hbase.Storm.Kafka等等: ...
- 七十二:flask钩子函数之关于errorhandler的钩子函数
errorhandler:在发生一些异常的时候,如404.500,如果要自定义处理这些错误,就可以使用errorhandler来处理,使用errorhandler需要注意几点: 1.在errorhan ...
- FAQ_2
FAQ-2 1.LoadRunner超时错误: 在录制Web服务器端,如果超过120秒服务器协议脚本回放时超时情况经常出现,产生错误的原因也有很多,解决的方法也不同. 错误现象1:Action.c(1 ...
- java源码-ConcurrentHashMap分析-1
ConcurrentHashMap源码分析 版本jdk8 摈弃了jdk7之前的segement段锁: 首先分析一下put方法,大致的流程就是首先对key取hash函数 判断是否first节点是否存在 ...
- Field in required a single bean, but 2 were found:
我在其他类注入的时候出现以下错误 @Autowired NodeAgentService nodeAgentService; 异常 Description: Field mibService in c ...
- linux下解决80端口被占用
安装一个nginx服务,在启动的时候报80端口被占用了,我们来检查一下有哪些服务占用了80端口 首先我们查一下占用80端口的有哪些服务,netstat -lnp|grep 80 查看80端口被那些服务 ...
- java:WebService
1.WebService就是应用之间的远程调用,可以跨语言调用,为甚么可以跨语言调用,是因为其实依赖与xml语言,xml语言依赖http协议,http协议底层也是socket.
- C语言:二维数组,(杨辉三角)
二维数组:一维数组中的元素又是一个数组.声明的语法:数据类型 数组名[一维长度][二维长度]; int num[3][2]; 注意:int[][2];正确 int[2][];错误 二维数组中: 一维可 ...
- java程序 避免重复启动的方法
http://www.cppblog.com/biao/archive/2010/12/23/137254.html package swingtest; import java.io.File; i ...