轻量级网络之mobilenet_v1详解

news/2024/7/24 13:21:08 标签: 深度学习, 神经网络

轻量级网络之mobilenet_v1详解

前言:学习网络结构有一段时间了,记录下mobilenet_v1的结构
论文地址:https://arxiv.org/pdf/1704.04861.pdf

一、mobilenet_v1 研究背景

1.随着Alexnet 获得2012年的 ILSVRC 2012的挑战冠军,通常的趋势是通过搭建更深的和更复杂的网络来获得更高的准确率。这些进步虽然可以提高精度,但在推理速度和模型大小却不一定是高效的。
2.考虑在有限算力的平台上需要实时获得识别任务, 提出在移动端或者嵌入式中的轻量级神经网络

二、如何实现轻量级神经网络

1.将标准的卷积核改成深度可分离卷积。

1.1 标准卷积(以3*3 为例子)
在这里插入图片描述

标准卷积计算量 = H * W * Dk * Dk * M * N

1.2 深度可分离卷积对比
在这里插入图片描述
参数计算量:包括深度卷积和逐点卷积
其中深度卷积计算量 = H * W * Dk * Dk * M
逐点卷积计算量 = M * N * 1 * 1 * H * W

1.3 标准卷积与深度可分离卷积计算量之比

倍率 = (H * W * Dk * Dk * M + M * N * 1 * 1 * H * W ) / (H * W * Dk * Dk * M * N )
= 1/N +1/( Dk * Dk)

1.4结论
深度可分离卷积的计算量是标准卷积 的 1/N +1/( Dk * Dk)倍。通常情况下,N (输出通道)远大于卷积核尺寸,故1/N +1/( Dk * Dk) 近似等于 1/( Dk * Dk)。当卷积核的大小为Dk =3 时,深度可分离卷积的计算量约为标准卷积的1/9倍。
在这里插入图片描述

2.提供宽度因子和图像分辨率因子来控制模型的大小及输入图片的大小。

2.1宽度因子
在有些应用场景中,可能需要更小的模型。因此引入了一个称为宽度因子的非常简单的参数α。宽度因子α的作用是在每层均匀地缩小网络。对于给定的层并且宽度乘法器α,那么输入通道M的数量变为αm,输出通道n的数量变为αn。α的取值范围通常为(0,1],当然大于1也可以。在速度、大小和精度上做权衡。
在这里插入图片描述

2.2图像分辨率因子
减少计算的第二个超参数,分辨率因子ρ。通过减少图片的输入尺寸来减少计算量。
原来图像大小为H * W,加入分辨率因子后图像大小为 ρH * ρW。通常取值范围为(0,1]
在这里插入图片描述
2.3 宽度因子和分辨率因子结合,深度可分离卷积的计算量如下所示

计算量 = DK · DK · αM · ρDF · ρDF + αM · αN · ρDF · ρDF。

三、网络结构介绍

1.mobilenet_v1 网络结构如下:
在这里插入图片描述
2.参数量如图所示
在这里插入图片描述

四、网络模块介绍

1.Conv (标准卷积)
在这里插入图片描述
2. Depthwise Conv + Pointwise Conv (深度可分离卷积)
在这里插入图片描述
3.Avg Pool (平均池化)
平均池化:计算图像区域的平均值作为该区域池化后的值。常规的平均池化计算过程如下图所示
在这里插入图片描述

注意:mobilenet_v1中平均池化采用的步长(stride =1)、卷积核尺寸为7*7。步长为1,平均池化后输入的特征图大小不变,依然为7 * 7 * 1024。

4.FC(全连接层)
在这里插入图片描述
全连接层将前面平均池化层的特征图拉成一维的向量:7 * 7 * 1024 ——> 1 * 1 * 50176
将一维向量 1 * 1 * 50176 乘以 权重,然后加上偏置,获得 1 * 1 * 1024 的向量。

5.SoftMax
将全连接层的一维向量 通过公式 获得每一类的分数,公式如下:
在这里插入图片描述
其中,Zi为第i个节点的输出值,C为输出节点的个数。通过以e为底数的Zi 次方,将第i 个节点的输出值(实数)映射到0到正无穷;通过归一化的方法,将映射的值转换成0-1的概率值,也就是类别的分数值。


http://www.niftyadmin.cn/n/1714886.html

相关文章

AttributeError: ‘NoneType‘ object has no attribute ‘fill_‘

AttributeError: ‘NoneType’ object has no attribute ‘fill_’ 前言:在使用pytorch搭建网络的过程中,出现AttributeError: ‘NoneType’ object has no attribute fill_的错误,记录下 一、搭建网络后,开始测试网络输出 mod…

轻量级网络之mobilenet_v1 pytorch实现

轻量级网络之mobilenet_v1 pytorch实现 前言:前面讲解了mobilenet 实现在移动端或者嵌入式中的轻量级网络,本文使用pytorch 搭建mobilenet_v1网络。 一、Mobilenet_v1 网络结构 1.Mobilenet_v1 网络结构如图所示 由此我们可以得出mobilenet_v1的网络…

RuntimeError: mat1 and mat2 shapes cannot be multiplied (1024x1 and 1024x3)

RuntimeError: mat1 and mat2 shapes cannot be multiplied (1024x1 and 1024x3) 前言:在学习pytorch 搭建神经网络的时候,测试网络发现出现RuntimeError: mat1 and mat2 shapes cannot be multiplied (1024x1 and 1024x3)的错误,记录下。 …

VS无法定位程序输入点于动态链接库

VS无法定位程序输入点于动态链接库 前言:今天调试vs2017 程序,出现无法定位程序输入点于动态链接库的错误。 一、问题排查 1.在debug 模式下,程序可以正常运行。 2.在release模式下,出现exe无法定位程序输入点于动态链接库的错…

The OutputPath property is not set for project ‘xxx.vcxproj‘

The OutputPath property is not set for project ‘xxx.vcxproj’ 前言:今天调试之前的代码,出现The OutputPath property is not set for project xxx.vcxproj’报错,并且头文件及命名空间报错。查看头文件目录均正确,排除路径…

C# 调用C++动态库Debug模式下运行正确,Release下报错

C# 调用C动态库Debug模式下运行正确,Release下报错 前言:在C# 调用C动态库时候,debug正常运行,release 下出错。 一、C# 调用C 动态库Release下报错 1.报错如下:System.DllNotFoundException:DLL xxx.dl…

错误LNK2001 无法解析的外部符号 main

错误LNK2001 无法解析的外部符号 main 前言:在拷贝项目源码的时候,生成代码的时候出现无法解析的外部符号 main。记录下问题 一、问题产生的原因 1.一般常见的无法解析的外部符号,都是头文件和lib文件的路径错误导致的。无法解析的外部符号…

Visual Studio 2017 调试全局变量

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录前言一、问题引出二、监控全局变量的数据前言 在Visual Studio 2017 调试代码的时候,出现无法查看全局变量。本文介绍如何查看全局变量的数据。 一、问题…