论文阅读——MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications

目录

前言

Abstract

1、Introduction

2、Prior Work

3、MobileNet Architecture

3.1、深度可分离卷积

3.2、网络结构和训练

3.3、宽度乘子:更窄的模型

3.4、分辨率乘子:减少表达

4、Experiments

4.1、模型选择

4.2减小模型中的超参数

4.3、细纹理识别

4.4、大范围地理定位

4.5、面部特征

4.6、目标检测

4.7、人脸识别

5、Conclusion


前言

之前有一段时间看了挺多深度学习方面的论文,但是由于时间方面的问题一直没来得及进行总结。最近一段时间突发奇想把自己看论文时的学习笔记给记录一下,由于之前没写过博文,所以排版可能会有点emmm...一言难尽。专业方面的知识,如果有理解不到位的地方欢迎各位大佬指教。

Abstract

本文的主要工作:

  • 提出了一个可在移动端应用的高效网络MobileNets,其使用深度可分类卷积使网络轻量化同时保证精度。
  • 引入两个全局超参数,让使用者可根据约束条件调整网络大小。
  • 在ImageNet分类集上与其他模型进行了广泛对比,验证了MobileNets的有效性。

1、Introduction

文章这一部分主要是简要介绍了一下,深度网络的发展和应用,并且引出自己提出的MobileNets网络,指出其在移动端应用方面的有效性。

2、Prior Work

文章的这一部分主要是介绍了对网络进行收缩和小型化的方法,以及相关的网络及研究成果。

1、相关网络:

  • Inception网络:使用深度可分离卷积减少前几层的计算量。
  •  Flattened网络:网络由完全分解的卷积构建。
  • Xception网络:演示了如何按比例扩展深度可分离卷积核。
  • Squeezenet网络:使用瓶颈方法设计了一个非常小的网络。

2、获得小型网络的方法:

  • 对预训练网络进行压缩:基于乘积量化、散列以及修剪、矢量量化和霍夫曼编码的压缩。
  • 蒸馏:使用较大的网络教授较小的网络。

3、MobileNet Architecture

3.1、深度可分离卷积

文章这一部分主要是介绍普通卷积和深度可分离卷积在计算方式上的差异,并且给出他们在所需计算量上的不同。假设F为输入特征图,D_{K}为卷积核的尺寸,D_{F}为输出特征图G的尺寸,M是输入通道数,N是输出通道数。

1、标准卷积

  • 假设步长为1,并且有填充,则标准卷积计算特征图的表达式如下所示:

  • 很明显,进行一次标准卷积的计算量如下:

  • 卷积一般有两个作用:1.使用卷积核(过滤器)对图中的特征进行提取。2.对提取的特征进行融合。在标准卷积中这两步一般是同时进行的,但是在深度可分离卷积中这两步是分开的。
标准卷积的卷积核

2、深度可分离卷积

  • 深度可分离卷积由两次卷积构成:深度分离卷积和逐点卷积。
  • 深度分离卷积:深度分离卷积把输入特征图的所有通道进行分离,每个通道对应一个卷积核对该通道的特征图进行单独的卷积操作(也就是说在深度分离卷积中,每个卷积核的深度固定为1)。因此深度分离卷积计算特征图的表达式和计算量如下:
MobileNets是由Google团队开发的一系列轻量级深度学习模型,专为移动设备和嵌入式视觉应用设计,旨在提供高效能的同时保持较小的计算资源消耗。它们基于深度可分离卷积(Depthwise Separable Convolutions),即将传统的卷积分为两个步骤:首先是一个深度卷积(只对输入通道做卷积),然后是一个点卷积(每个通道独立处理)。这种结构简化了网络,降低了模型复杂度。 要代码复现实现MobileNet模型,你可以选择Python语言,比如使用TensorFlow或PyTorch库。以下是一个简化的步骤概述: 1. **安装依赖**:如果你使用TensorFlow,先安装`tensorflow`和`tensorflow.keras`。对于PyTorch,安装`torch`。 ```shell pip install tensorflow keras # 或者 pip install torch torchvision ``` 2. **导入库**: ```python import tensorflow as tf # 或者 import torch, torchvision from tensorflow.keras.applications.mobilenet_v2 import MobileNetV2, preprocess_input # TensorFlow示例 # 或者 from torchvision.models import mobilenet_v2 # PyTorch示例 ``` 3. **加载预训练模型**: ```python # TensorFlow 示例 model = MobileNetV2(weights='imagenet') # PyTorch 示例 model = mobilenet_v2(pretrained=True) ``` 4. **前向传播**: ```python # 获取图像数据并预处理 input_data = ... # 图像数组或张量 output = model(input_data) # 对图像进行分类 # 获取模型输出层 last_layer = model.get_layer('out') if TensorFlow else model[-1] features = last_layer(output).detach().numpy() # 对特征进行操作 ``` 5. **定制或微调模型**: 如果你想调整模型的某些部分,可以解冻特定层进行训练,或者替换掉最后一层以适应新的任务。 ```python # TensorFlow 示例(假设我们要修改最后两层) for layer in model.layers[:-2]: layer.trainable = False # 训练新添加的层 new_model.compile(optimizer='adam', loss='categorical_crossentropy') # 调整模型后部 custom_head = tf.keras.Sequential([...]) output = custom_head(model.output) # 然后继续训练 new_model.fit(...) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值