[论文笔记] MobileNets: Efficient Convolutional Neural Networks for Mobile VisionApplications

本文探讨了MobileNets和EfficientNet在轻量化网络设计中的关键区别,MobileNets通过深度wise卷积和缩放因子优化模型大小,EfficientNet则考虑了深度、宽度和分辨率的综合影响。实验结果显示了两者在参数减少与性能保持之间的平衡。

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

前言:

        本部分主要记录下我对MobileNets以及EfficientNet的个人理解(如果没有了解过EfficientNet,这部分可以忽略)。

        在读MobileNets论文的过程中,发现文中很大一部分与我之前读的EfficientNet(可能我阅读的顺序有点问题)有相似之处。首先,共同点两者都研究了网络的width(即输出的channel)以及分辨率(resolution)对网络性能的影响(包括参数量、计算量、准确率);不同点在于:(1)EfficientNet还深入研究了网络深度(depth)对网络性能影响,MobileNets只是在实验部分简单对比了更浅的网络和channel更窄的网络在参数量相同时哪个效果更好;(2)两者本质的目的不同:EfficientNet是在算力规定的前提下去寻找最优的深度、宽度以及分辨率优化网络的准确率;MobileNets是通过引入参数缩减因子来压缩模型,使得模型尽可能小同时保证输出效果变化不大,从而能够部署到一些嵌入式设备中。

目录

前言:

一、摘要

二、MobileNets网络结构

Depthwise Conv

三、缩放因子

四、实验验证

内部验证(与MobileNet自身相比)

外部验证(与别的网络作比较)


一、摘要

        作者提出了一种能够部署在设备上的网络结构MobileNets,这种网络使用了depthwise卷积,同时引入了两个超参数来权衡准确率和延迟。之后作者通过大量实验说明了MobileNets的有效性。

二、MobileNets网络结构

        

         MobileNets网络结构如上图所示,需要注意的是depthwise Conv结构中输入channel=输出channel,并且每个滤波器的channel都为1。

        MobileNets将传统的卷积分成了两步,首先通过Depthwise卷积对特征进行提取,输出的每个Feature map是原始图像单个channel的特征,之后通过1*1的卷积将各个channel的特征进行拼接(每个1*1的卷积核的channel等于Depthwise输出的Feature map的数量)。这一过程可以用下图

 进行表示:


 

Depthwise Conv

        传统卷积中每个滤波器的channel与输入特征图的channel相同,这种情况下参数量为D_{k}×D_{k} ×M×N,计算量为D_{k}× D_{k} × M× N ×D_{F} ×D_{F},(M为输入channel,DK为卷积核的尺寸,N为卷积核的个数,DF为输出特征图的尺寸);Depthwise Conv的参数量为DK ×DK ×M,计算量为D_{k}× D_{k} × M ×D_{F}×D_{F},之后紧接着1 x 1卷积的参数量为1 x 1 x M x N,计算量为1 x 1 x M x N x D_{F} x D_{F},这样采用两步卷积的方式总计算量为D_{k}× D_{k} × M ×D_{F} ×D_{F}+M x N x D_{F}x D_{F},相对传统卷积来说,计算量为原来的\frac{1}{​{D_{k}}^{2}}(即若Depthwise Conv卷积核尺寸为3 x3时候,计算量为原来的1/9)。

三、缩放因子

        作者引入了两个参数缩放因子\alpha\beta(均为小于等于1的数),分别来缩小网络的宽度(即channel,输入输出channel均要缩小)以及减小图片分辨率(resolution)。

        当单独对width进行缩小时,计算量变为 D_{k}× D_{k} ×\alpha M ×D_{F} ×D_{F}+\alphaM x\alpha N x D_{F}x D_{F} 

;当单独对resolution进行缩小时, 计算量变为 D_{k}× D_{k} ×\alpha M ×\betaD_{F} ×\betaD_{F}+\alphaM x\alpha N x \betaD_{F} x \betaD_{F} 。可以看出,通过引入这两个参数极大减少了计算量(参数量减少了,但网络的性能会不会变差很大,接下来就是实验验证)。

四、实验验证

内部验证(与MobileNet自身相比)

         实验一(验证Depthwise的可行性):

        作者对比了使用Depthwise 卷积与使用传统卷积的效果(参数量大约变为原来的1/8,但准确率却仅仅减少了1个点)。

         实验二(对比了channel和网络深度depth对准确率的影响):

        作者在参数个数类似的情况下,对比了channel和网络深度depth的影响,结果表明channel更窄的网络性能要比层数更浅的网络性能更好(即减小网络的深度对性能影响较大)。

        

         实验三(对比了不同width缩放因子对准确率的影响)

        

         可以看出,当\alpha取0.5、0.75时候,MobileNets在ImageNet数据集上准确率下降较为平滑,而取0.25时候,效果较差。

        实验四(对比了不同分辨率对准确率的影响)

        

外部验证(与别的网络作比较)

         

      

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

余额充值