手机CNN网络模型--MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications

MobileNets是一种专为移动设备设计的小型高效卷积神经网络。它利用Depthwise Separable Convolution显著减少计算量,适用于目标检测、细分类等多种视觉任务。网络结构可通过宽度和分辨率乘数调整。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications

https://arxiv.org/abs/1704.04861

https://github.com/hollance/MobileNet-CoreML
https://github.com/shicai/MobileNet-Caffe

本文是 Google 针对手机等嵌入式设备提出的一个小网络模型,叫 MobileNets,主要侧重于简单有效。

这个 MobileNets 可以干什么了?
这里写图片描述
目标检测、细分类、人脸属性分析、场景识别

3 MobileNet Architecture
这个模型主要依赖于 Depthwise Separable Convolution 来降低计算量

3.1. Depthwise Separable Convolution
我们首先来看看什么是 Depthwise Separable Convolution
一个标准的卷积层输入输出分别是:
输入特征图F尺寸假定为 F×F× M, 输出特征图 G 尺寸假定为 G×G× N,卷积层可以参数化为 K×K× N× N 卷积核,
这里写图片描述

这里写图片描述

标准卷积计算量为:
这里写图片描述

其实标准卷积一次性做了两件事:普通的卷积 和 特征数量的变化 。Depthwise separable convolution 主要是将这两件事分开做。分为 depthwise convolutions 和 pointwise convolutions
depthwise convolutions 就是使用 一个 滤波器对每个输入通道进行卷积,特征数量保持不变
Pointwise convolution 就是使用一个 1×1 卷积,将M个输入特征 变为 N个 输出特征

这里写图片描述

Depthwise separable convolutions 的计算量为:
这里写图片描述
上式加号左边为 Depthwise convolution 计算量, 右边是 Pointwise convolution 计算量。

通过比较两者的计算量我们得到节约了多少计算量,一般是 8-9倍:
这里写图片描述

3.2. Network Structure and Training
这里写图片描述

网络主体结构:
这里写图片描述

3.3. Width Multiplier: Thinner Models
如果我们想根据自己的意愿改变网络,这里只需要加入一个参数就可以了 width multiplier

3.4. Resolution Multiplier: Reduced Representation
这里又引入了第二个超参数可用于降低计算量 resolution multiplier

4 Experiments

这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

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、付费专栏及课程。

余额充值