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

相关文章

全面解析Golang 中的 Gorilla CORS 中间件正确用法

《全面解析Golang中的GorillaCORS中间件正确用法》Golang中使用gorilla/mux路由器配合rs/cors中间件库可以优雅地解决这个问题,然而,很多人刚开始使用时会遇到配... 目录如何让 golang 中的 Gorilla CORS 中间件正确工作一、基础依赖二、错误用法(很多人一开

Mysql中设计数据表的过程解析

《Mysql中设计数据表的过程解析》数据库约束通过NOTNULL、UNIQUE、DEFAULT、主键和外键等规则保障数据完整性,自动校验数据,减少人工错误,提升数据一致性和业务逻辑严谨性,本文介绍My... 目录1.引言2.NOT NULL——制定某列不可以存储NULL值2.UNIQUE——保证某一列的每一

深度解析Nginx日志分析与499状态码问题解决

《深度解析Nginx日志分析与499状态码问题解决》在Web服务器运维和性能优化过程中,Nginx日志是排查问题的重要依据,本文将围绕Nginx日志分析、499状态码的成因、排查方法及解决方案展开讨论... 目录前言1. Nginx日志基础1.1 Nginx日志存放位置1.2 Nginx日志格式2. 499

MySQL CTE (Common Table Expressions)示例全解析

《MySQLCTE(CommonTableExpressions)示例全解析》MySQL8.0引入CTE,支持递归查询,可创建临时命名结果集,提升复杂查询的可读性与维护性,适用于层次结构数据处... 目录基本语法CTE 主要特点非递归 CTE简单 CTE 示例多 CTE 示例递归 CTE基本递归 CTE 结

Spring Boot 3.x 中 WebClient 示例详解析

《SpringBoot3.x中WebClient示例详解析》SpringBoot3.x中WebClient是响应式HTTP客户端,替代RestTemplate,支持异步非阻塞请求,涵盖GET... 目录Spring Boot 3.x 中 WebClient 全面详解及示例1. WebClient 简介2.

在MySQL中实现冷热数据分离的方法及使用场景底层原理解析

《在MySQL中实现冷热数据分离的方法及使用场景底层原理解析》MySQL冷热数据分离通过分表/分区策略、数据归档和索引优化,将频繁访问的热数据与冷数据分开存储,提升查询效率并降低存储成本,适用于高并发... 目录实现冷热数据分离1. 分表策略2. 使用分区表3. 数据归档与迁移在mysql中实现冷热数据分

C#解析JSON数据全攻略指南

《C#解析JSON数据全攻略指南》这篇文章主要为大家详细介绍了使用C#解析JSON数据全攻略指南,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录一、为什么jsON是C#开发必修课?二、四步搞定网络JSON数据1. 获取数据 - HttpClient最佳实践2. 动态解析 - 快速

Spring Boot3.0新特性全面解析与应用实战

《SpringBoot3.0新特性全面解析与应用实战》SpringBoot3.0作为Spring生态系统的一个重要里程碑,带来了众多令人兴奋的新特性和改进,本文将深入解析SpringBoot3.0的... 目录核心变化概览Java版本要求提升迁移至Jakarta EE重要新特性详解1. Native Ima

Python实现MQTT通信的示例代码

《Python实现MQTT通信的示例代码》本文主要介绍了Python实现MQTT通信的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一... 目录1. 安装paho-mqtt库‌2. 搭建MQTT代理服务器(Broker)‌‌3. pytho

spring中的@MapperScan注解属性解析

《spring中的@MapperScan注解属性解析》@MapperScan是Spring集成MyBatis时自动扫描Mapper接口的注解,简化配置并支持多数据源,通过属性控制扫描路径和过滤条件,利... 目录一、核心功能与作用二、注解属性解析三、底层实现原理四、使用场景与最佳实践五、注意事项与常见问题六