MobileNet V2论文阅读和代码解析

2024-02-04 03:48

本文主要是介绍MobileNet V2论文阅读和代码解析,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

论文阅读

代码解析

小结

 

论文阅读

1.前言

神经网络在机器智能的很多领域都有革命性的改进,在图像识别的领域精确度已经能够超过人类。然而,为了提高精确度常常会带来消耗,需要更高的计算资源,是很多手机和嵌入式设备所不具有的。这篇文章介绍了一个新神经网络结构,是专门为手机和资源有限的环境量身定制的。我们的网络通过减少计算次数和内存占用,推进了为移动设备量身定制的计算机视觉模型达到一个更先进的水平。

我们主要的贡献是具有线性瓶颈的倒置残差。这个模型对输入的低维度的表现先扩展到高维度,然后进行轻量级depthwise卷积运算,特征再进行一个线性的卷积回到低维度的表现。

2.细节讨论

2.1Depthwise Separable Convolutions

深度分离卷积块对很多高效的网络结构都是很关键的,在本篇论文的模型中也使用了这种结构。用分解成两层的卷积来替代原始的卷积。分解后的两层第一层叫做depthwise卷积,它的filter的参数很少,是对输入的每一个channel进行单独的卷积运算。第二层是一个1x1的卷积,叫做pointwise卷积,可以改变channel的个数。

对于标准的卷积运算,假设输入是h_i\times w_i\times d_i,卷积kernelK\in R^{k\times k\times d_i\times d_j},输出为h_i\times w_i\times d_j,那么需要消耗的计算量为h_i\times w_i\times d_i\times d_j\times k\times k,而如果是Depthwise separable卷积,需要的计算量为

如果标准卷积的k为3,那么用depthwise可以减少接近8/9的计算量而只会有些微的精度损失。

2.2 Linear Bottlenecks

当channel的个数比较少的时候,所有的信息都集中在比较窄的channel中,这这时候进行非线性激活比如RELU,会丢失很多信息。而在MobileNet V1中引入的一个超参数width multiplier会缩减channel,这样看起来就像一个瓶子的颈部一样。这种情况下用RELU激活机会丢失掉不少信息。

上图是作者展示用RELU激活时,当channel越小,丢失的信息越多,当channel越大,丢失的信息越少。其实不难理解,当channel为2时,信息都集中在这两个channel中,如果有部分数值小于0就会被RELU激活丢失掉。而如果channel为30,其实信息是分散的,而且具有了冗余,所以通过RELU激活后归于0的值可能并不会影响太多信息的存储。

所以作者建议对于channel数很少的那些层做线性激活。bottlenect就表示缩减的层,linear bottleneck表示对channel缩减的层做线性激活。如果要用RELU激活需要先增加channel数再做RELU激活。

2.3 Inverted residuals

因为channel比较少的tensor信息特别集中,而且使用非线性激活会损失信息,所以作者想到对channel比较少的tensor进行channel的扩张。而残差block是先进行channel缩减,然后扩张,这样可能会丢失信息。作者就想到了一种倒置的残差block,先进行channel扩张,然后进行channel缩减。如下图显示对比,虚线的tensor后进

这篇关于MobileNet V2论文阅读和代码解析的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

python常见环境管理工具超全解析

《python常见环境管理工具超全解析》在Python开发中,管理多个项目及其依赖项通常是一个挑战,下面:本文主要介绍python常见环境管理工具的相关资料,文中通过代码介绍的非常详细,需要的朋友... 目录1. conda2. pip3. uvuv 工具自动创建和管理环境的特点4. setup.py5.

全面解析HTML5中Checkbox标签

《全面解析HTML5中Checkbox标签》Checkbox是HTML5中非常重要的表单元素之一,通过合理使用其属性和样式自定义方法,可以为用户提供丰富多样的交互体验,这篇文章给大家介绍HTML5中C... 在html5中,Checkbox(复选框)是一种常用的表单元素,允许用户在一组选项中选择多个项目。本

Python实例题之pygame开发打飞机游戏实例代码

《Python实例题之pygame开发打飞机游戏实例代码》对于python的学习者,能够写出一个飞机大战的程序代码,是不是感觉到非常的开心,:本文主要介绍Python实例题之pygame开发打飞机... 目录题目pygame-aircraft-game使用 Pygame 开发的打飞机游戏脚本代码解释初始化部

Python包管理工具核心指令uvx举例详细解析

《Python包管理工具核心指令uvx举例详细解析》:本文主要介绍Python包管理工具核心指令uvx的相关资料,uvx是uv工具链中用于临时运行Python命令行工具的高效执行器,依托Rust实... 目录一、uvx 的定位与核心功能二、uvx 的典型应用场景三、uvx 与传统工具对比四、uvx 的技术实

SpringBoot排查和解决JSON解析错误(400 Bad Request)的方法

《SpringBoot排查和解决JSON解析错误(400BadRequest)的方法》在开发SpringBootRESTfulAPI时,客户端与服务端的数据交互通常使用JSON格式,然而,JSON... 目录问题背景1. 问题描述2. 错误分析解决方案1. 手动重新输入jsON2. 使用工具清理JSON3.

Java中Map.Entry()含义及方法使用代码

《Java中Map.Entry()含义及方法使用代码》:本文主要介绍Java中Map.Entry()含义及方法使用的相关资料,Map.Entry是Java中Map的静态内部接口,用于表示键值对,其... 目录前言 Map.Entry作用核心方法常见使用场景1. 遍历 Map 的所有键值对2. 直接修改 Ma

Redis过期删除机制与内存淘汰策略的解析指南

《Redis过期删除机制与内存淘汰策略的解析指南》在使用Redis构建缓存系统时,很多开发者只设置了EXPIRE但却忽略了背后Redis的过期删除机制与内存淘汰策略,下面小编就来和大家详细介绍一下... 目录1、简述2、Redis http://www.chinasem.cn的过期删除策略(Key Expir

Go学习记录之runtime包深入解析

《Go学习记录之runtime包深入解析》Go语言runtime包管理运行时环境,涵盖goroutine调度、内存分配、垃圾回收、类型信息等核心功能,:本文主要介绍Go学习记录之runtime包的... 目录前言:一、runtime包内容学习1、作用:① Goroutine和并发控制:② 垃圾回收:③ 栈和

Spring组件实例化扩展点之InstantiationAwareBeanPostProcessor使用场景解析

《Spring组件实例化扩展点之InstantiationAwareBeanPostProcessor使用场景解析》InstantiationAwareBeanPostProcessor是Spring... 目录一、什么是InstantiationAwareBeanPostProcessor?二、核心方法解

深入解析 Java Future 类及代码示例

《深入解析JavaFuture类及代码示例》JavaFuture是java.util.concurrent包中用于表示异步计算结果的核心接口,下面给大家介绍JavaFuture类及实例代码,感兴... 目录一、Future 类概述二、核心工作机制代码示例执行流程2. 状态机模型3. 核心方法解析行为总结:三