【轻量级网络系列三】MobileNetV2: Inverted Residuals and Linear Bottlenecks论文总结

本文主要是介绍【轻量级网络系列三】MobileNetV2: Inverted Residuals and Linear Bottlenecks论文总结,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

摘要

本文将介绍一种新型的适合移动端的网络MobileNetV2,在最近众多的tasks和benchmarks上都取得了最好的表现。它是建立在一种倒转的残差结构上面的,其中的短路连接建立在thin bottleneck layers之间。中间的扩展层使用lightweight depthwise convolutions 来对特征进行过滤来提升网络非线性能力。特别的是,我们发现去除狭窄层的非线性能力对于表现特征的能力是重要的。最后,我们的方法允许对于输入输出域去耦,这对于后面的研究分析提供了一个很轻便的网络。

一、介绍

近些年,神经网络使得许多方向的机器智能产生了革命性的变换,达到了超越人类的识别准确率。但是这些提高识别准确率的背后,这些网络需要大量的计算能力而无法在嵌入式设备和手机等移动设备上部署。

本篇文章介绍了一种新型的网络是为手机和受限制的环境量身定制的,此网络在达到同样的准确率下,大大的降低了网络的运算操作以及内存需要。主要贡献在于,提出一个the inverted residual with linear bottleneck(倒转线性残差块),这使得输入低维度的特征,可以先让其扩张成高维度的,然后使用轻量的depthwise convolution进行卷积。特征随后被使用一个a linear convolution
送回低纬度的表征里。

本模型可以适用于几乎所有的经典网络结构中,也在许多评价数据集上取得了很好的表现。它减少了在嵌入式设备上对于主存的访问,转而支持对于cache内存的访问,这样提高了访问速度。

二、相关工作 

介绍了下神经网络发展过程中的一些经典网络,介绍了ShuffleNet这种开始改变卷积内部的连接。作者也提到最近有一些使用强化学习来进行网络结构搜索的部分,来设计这种轻量级网络,但是本文是想从直观上的改变神经网络运算以及设计更简单得网络。然后提了下自己之前的工作MobileNetV1。

三、前期准备,讨论以及直觉

3.1 Depthwise Separable Convolutions

Depthwise Separable Convolutions是构建运算高效卷积神经网络的重要部分,很多工作都用了。其大概的思想就是把之前的一个卷积模块给替换成两个有着放缩因子的分离层。两个层也就是分组的卷积和1*1卷积,我在这篇文章中有写过。分组卷积是为了降低该部分操作的运算量,然后通过1*1卷积来弥补通道的不足。MobileNetV2是使用3*3的depthwise separable convolutions,所以减少的运算量在8-9倍。

3.2 Linear Bottlenecks

 

作者提出了在特征的通道低纬度的时候,ReLU激活函数会带来数据坍塌,而在高维度的时候就保留了其中大部分信息。为此,作者提出使用在低维度的时候不用ReLU,转而在其中加入线性变换。但是在这部分代码中,作者后面是将这个ReLU替换成ReLU,将大于6得输出不在增长,可以看一下pytorch给的图,比较清楚。

3.3 Inverted residuals

可以看到其的结构与普通残差块的结构差距,只是在于普通残差两头粗中间瘦(即通道数在残差块内缩小),而Inverted residuals是在块内对于通道数进行增加。作者说为什么把残差应用在其中,灵感来自于,为了让梯度不衰减。而且这样的设计可以更加高效使用内存。

3.4 信息流解释 

对于我们结构中,一个很有兴趣的属性,它提供了一种在构建块上自然的输入输出域分离和一个层,是一个非线性函数用来将输入转换为输出。前者可以被看作为网络每层的容量,后者可以看作网络的表现力。这在传统的常规和分离的卷积神经网络中是相矛盾的,当表现力和容量都纠缠在一起的时候,是输出层深度的函数。

特别的是,在我们的情况里,当内部深度为0时,底层的卷积为身份函数由于短路连接的存在。当ratio小于1的话,是常规的残差块,但我们展现出了当ratio大于1的时候,才是被最好利用的时候。

这个解释让我们允许我们可以它的容量中去单独研究网络的表现力,我们相信对于分离方面进一步的探索会给更好理解网络性质带来保证。

模型结构

Bottleneck residual block由1*1卷积先提高通道数,在通过3*3卷积,之后通过1*1卷积降低通道维数。使用ReLU6替代ReLU的原因是,为了在不降低准确率的情况下减少计算量。

这篇关于【轻量级网络系列三】MobileNetV2: Inverted Residuals and Linear Bottlenecks论文总结的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/583478

相关文章

Python实现图片分割的多种方法总结

《Python实现图片分割的多种方法总结》图片分割是图像处理中的一个重要任务,它的目标是将图像划分为多个区域或者对象,本文为大家整理了一些常用的分割方法,大家可以根据需求自行选择... 目录1. 基于传统图像处理的分割方法(1) 使用固定阈值分割图片(2) 自适应阈值分割(3) 使用图像边缘检测分割(4)

Windows Docker端口占用错误及解决方案总结

《WindowsDocker端口占用错误及解决方案总结》在Windows环境下使用Docker容器时,端口占用错误是开发和运维中常见且棘手的问题,本文将深入剖析该问题的成因,介绍如何通过查看端口分配... 目录引言Windows docker 端口占用错误及解决方案汇总端口冲突形成原因解析诊断当前端口情况解

使用Python自建轻量级的HTTP调试工具

《使用Python自建轻量级的HTTP调试工具》这篇文章主要为大家详细介绍了如何使用Python自建一个轻量级的HTTP调试工具,文中的示例代码讲解详细,感兴趣的小伙伴可以参考一下... 目录一、为什么需要自建工具二、核心功能设计三、技术选型四、分步实现五、进阶优化技巧六、使用示例七、性能对比八、扩展方向建

Linux系统配置NAT网络模式的详细步骤(附图文)

《Linux系统配置NAT网络模式的详细步骤(附图文)》本文详细指导如何在VMware环境下配置NAT网络模式,包括设置主机和虚拟机的IP地址、网关,以及针对Linux和Windows系统的具体步骤,... 目录一、配置NAT网络模式二、设置虚拟机交换机网关2.1 打开虚拟机2.2 管理员授权2.3 设置子

揭秘Python Socket网络编程的7种硬核用法

《揭秘PythonSocket网络编程的7种硬核用法》Socket不仅能做聊天室,还能干一大堆硬核操作,这篇文章就带大家看看Python网络编程的7种超实用玩法,感兴趣的小伙伴可以跟随小编一起... 目录1.端口扫描器:探测开放端口2.简易 HTTP 服务器:10 秒搭个网页3.局域网游戏:多人联机对战4.

SpringBoot使用OkHttp完成高效网络请求详解

《SpringBoot使用OkHttp完成高效网络请求详解》OkHttp是一个高效的HTTP客户端,支持同步和异步请求,且具备自动处理cookie、缓存和连接池等高级功能,下面我们来看看SpringB... 目录一、OkHttp 简介二、在 Spring Boot 中集成 OkHttp三、封装 OkHttp

Linux系统之主机网络配置方式

《Linux系统之主机网络配置方式》:本文主要介绍Linux系统之主机网络配置方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、查看主机的网络参数1、查看主机名2、查看IP地址3、查看网关4、查看DNS二、配置网卡1、修改网卡配置文件2、nmcli工具【通用

java常见报错及解决方案总结

《java常见报错及解决方案总结》:本文主要介绍Java编程中常见错误类型及示例,包括语法错误、空指针异常、数组下标越界、类型转换异常、文件未找到异常、除以零异常、非法线程操作异常、方法未定义异常... 目录1. 语法错误 (Syntax Errors)示例 1:解决方案:2. 空指针异常 (NullPoi

使用Python高效获取网络数据的操作指南

《使用Python高效获取网络数据的操作指南》网络爬虫是一种自动化程序,用于访问和提取网站上的数据,Python是进行网络爬虫开发的理想语言,拥有丰富的库和工具,使得编写和维护爬虫变得简单高效,本文将... 目录网络爬虫的基本概念常用库介绍安装库Requests和BeautifulSoup爬虫开发发送请求解

Java反转字符串的五种方法总结

《Java反转字符串的五种方法总结》:本文主要介绍五种在Java中反转字符串的方法,包括使用StringBuilder的reverse()方法、字符数组、自定义StringBuilder方法、直接... 目录前言方法一:使用StringBuilder的reverse()方法方法二:使用字符数组方法三:使用自