轻量化网络结构——MobileNetV3

《Searching for MobileNetV3》这篇论文详述了如何通过神经架构搜索(NAS)技术设计出适用于移动设备的高效模型——MobileNetV3。论文提出了两个版本的模型,即MobileNetV3-Large和MobileNetV3-Small,分别针对高资源和低资源场景。网络结构中结合了点卷积与SENet注意力模块,并引入了新的swish激活函数。MobileNetV3的优化集中在最后块的设计,旨在提高性能与效率的平衡。

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

论文:《Searching for MobileNetV3》

概述:
  该论文主要讲如何使用NAS搜索出适用于移动设备的轻型网络,提出了MobileNetV3-Large和MobileNetV3-Small两个模型。

基础结构:
  网络结构图如下所示,主要是在点向卷积后加了一个SENet的attention模块。
在这里插入图片描述

激活函数:
  另外用上了swish激活函数。给出了两种形式。
在这里插入图片描述
在这里插入图片描述

最终块的优化:
在这里插入图片描述
MobileNetV3的网络结构:
  MobileNetV3定义了两个模型: MobileNetV3-Large和MobileNetV3-Small。V3-Large是针对高资源情况下的使用,相应的,V3-small就是针对低资源情况下的使用。两者都是基于之前的简单讨论的NAS。
在这里插入图片描述

在这里插入图片描述

注:博众家之所长,集群英之荟萃。
### MobileNetV3轻量化设计原理 MobileNetV3 是一种高效的卷积神经网络架构,专为移动设备其他资源受限环境而设计。其核心目标是在保持高精度的同时减少计算复杂度模型大小。以下是 MobileNetV3 轻量化设计的主要原则技术: #### 1. **深度可分离卷积 (Depthwise Separable Convolution)** MobileNetV3 继承了前代版本的核心设计理念——深度可分离卷积。这种技术通过将标准卷积分解为两个更简单的操作来显著降低计算成本: - 首先执行逐通道卷积(depthwise convolution),即对每个输入通道单独应用卷积核。这一步减少了参数数量并降低了计算量。 - 接着进行逐点卷积(pointwise convolution),用于跨通道组合特征图的信息。 这种方法可以大幅减少乘法累加运算次数(MACs)。相比传统卷积,深度可分离卷积能够节省约8到9倍的计算开销[^1]。 #### 2. **Squeeze-and-Excitation (SE) 模块** 为了进一步提升性能,MobileNetV3 引入了 Squeeze-and-Excitation 模块。该模块允许网络自适应地重新校准通道间的权重分布,从而增强重要特征并抑制不重要的特征。具体过程如下: - **Squeeze**: 对全局空间信息进行压缩,生成描述各通道统计特性的向量。 - **Excitation**: 使用全连接层学习这些通道之间的关系,并生成激活权值。 - **Scale**: 将学到的权值作用于原始特征图上,调整各个通道的重要性。 尽管 SE 模块增加了少量额外计算,但它能有效提高分类准确性,在资源有限的情况下尤为有用。 #### 3. **H-Swish ReLU6 激活函数的选择** MobileNetV3 还优化了非线性激活函数的设计。对于高效推理场景,它采用了 H-Swish 函数作为默认激活方式。相比于 Swish 或其他复杂的激活形式,H-Swish 不仅具有更好的表达能力,而且可以通过硬件加速实现快速部署。此外,ReLU6 则被保留下来供低功耗需求的任务使用,因为它简单易实现且不会引入负梯度问题。 #### 4. **Neural Architecture Search (NAS)** MobileNetV3 的另一个亮点在于利用自动机器学习方法 NAS 来探索最佳结构配置。通过对大量候选模型进行评估筛选,最终得到两种变体:Large 版本适用于更高精度的需求;Small 版本则针对极端内存约束条件下的应用场景进行了特别裁剪。 ```python import tensorflow as tf from tensorflow.keras import layers, models def mobilenet_v3_block(inputs, filters, kernel_size, strides, use_se=True): x = layers.Conv2D(filters=filters, kernel_size=kernel_size, padding='same', activation=None)(inputs) # Depthwise Convolution x = layers.DepthwiseConv2D(kernel_size=(3, 3), strides=strides, padding="same")(x) if use_se: se = layers.GlobalAveragePooling2D()(x) se = layers.Dense(int(x.shape[-1]) // 4, activation="relu")(se) se = layers.Dense(x.shape[-1], activation="sigmoid")(se) se = layers.Reshape((1, 1, int(x.shape[-1])))(se) x = layers.Multiply()([x, se]) x = layers.BatchNormalization()(x) x = layers.Activation(tf.nn.hard_swish)(x) return x ``` 上述代码片段展示了如何构建一个基于 MobileNetV3 原理的基础单元,其中包含了深度可分离卷积以及可选的 SE 模块集成。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Peanut_范

您的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值