探索与实现 MobileNet V3 网络结构

本文介绍了Google在2019年提出的MobileNetV3网络架构,包含Large和Small两个子版本。阐述了其整体架构,分为起始、中间和最后部分,详细讲解了h-switch和h-sigmoid激活函数、卷积计算公式、MobileBlock步骤、SE和残差结构等,还提及提前Avg Pooling等优化。

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

MobileNetV3是由Google在2019年3月21日提出的网络架构,参考arXiv论文,其中包括两个子版本,即Large和Small。

源码参考:https://github.com/SpikeKing/mobilenet_v3/blob/master/mn3_model.py

重点:

  1. PyTorch实现MobileNetV3架构;
  2. h-swish和h-sigmoid的设计;
  3. 新的MobileNet单元;
  4. SE结构和Residual结构;
  5. Last Stage:提前Avg Pooling,和使用1x1卷积;

网络结构:
网络结构


整体架构

MobileNetV3的网络结构可以分为三个部分:

  • 起始部分:1个卷积层,通过3x3的卷积,提取特征;
  • 中间部分:多个卷积层,不同Large和Small版本,层数和参数不同;
  • 最后部分:通过两个1x1的卷积层,代替全连接,输出类别;

网络框架如下,其中参数是Large体系:
Large

源码如下:

def forward(self, x):
    # 起始部分
    out = self.init_conv(x)

    # 中间部分
    out = self.block(out)

    # 最后部分
    out = self.out_conv1(out)
    batch, channels, height, width = out.size()
    out = F.avg_pool2d(out, kernel_size=[height, width])
    out = self.out_conv2(out)

    out = out.view(batch, -1)
    return out

起始部分

起始部分,在Large和Small中均相同,也就是结构列表中的第1个卷积层,其中包括3个部分,即卷积层、BN层、h-switch激活层。

起始

源码如下:

init_conv_out = _make_divisible(16 * multiplier)
self.init_conv = nn.Sequential(
    nn.Conv2d(in_channels=3, out_channels=init_conv_out, kernel_size=3, stride=2, padding=1),
    nn.BatchNorm2d(init_conv_out),
    h_swish(inplace=True),
)

h-switch 和 h-sigmoid

h-switch是非线性激活函数,公式如下:
h-switch

图形如下:
h-switch图形

源码:

out = F.relu6
### MobileNet 架构概述 MobileNet系列作为轻量化神经网络的代表,在设计上注重减少计算成本和参数数量,同时保持较高的预测准确性。该家族中的不同版本通过引入新的组件和技术不断优化这一目标。 #### MobileNet V1 特征 最初的MobileNet (V1) 使用了深度可分离卷积(depthwise separable convolutions),这种技术将标准二维卷积操作分解为两个更简单的步骤:首先是针对每个输入通道单独执行的空间滤波器应用(即depthwise convolution),其次是跨所有通道组合这些过滤后的结果(pointwise convolution)。这种方法显著降低了所需的乘法次数[^1]。 ```python import tensorflow as tf from tensorflow.keras import layers, models def create_mobilenet_v1(input_shape=(224, 224, 3), num_classes=1000): model = models.Sequential() # Initial layer with depthwise and pointwise convolutions. model.add(layers.DepthwiseConv2D(kernel_size=3, strides=2, padding='same', input_shape=input_shape)) model.add(layers.BatchNormalization()) model.add(layers.ReLU()) # Add more blocks... return model ``` #### MobileNet V2 改进 MobileNet V2 引入了倒残差结构(Inverted Residuals) 和线性瓶颈(Linear Bottlenecks)。此架构允许在网络内部维持较高维度的信息流,仅在必要时压缩表示空间,从而提高了效率并增强了表达能力。 #### MobileNet V3 进一步增强 到了第三代,除了继承前两代的优点外,还加入了高效的挤压激励(Squeeze-and-Excitation, SE)模块用于自适应调整特征图的重要性权重,并替换了原有的ReLU6激活函数为H-Swish[^3]: \[ \text{HSwish}(x)=\begin{cases} x & x>0 \\ 0 & otherwise \end{cases} \] 这使得模型能够在资源受限环境下更好地捕捉细微模式变化。 #### MobileNet V4 的探索 最新一代MobileNetV4则继续推进自动化机器学习(AutoML)方向的研究成果,采用交叉阶段部分网络(Cross-stage partial networks)的设计理念来构建下一代移动视觉应用程序的理想解决方案[^2]。 虽然具体的架构细节会随具体实现有所差异,但上述描述概括了各代MobileNet的主要创新点和发展趋势。 ### MobileNet 架构可视化示意 对于获取详细的MobileNet架构图表,建议查阅官方文档或学术论文附带的插图资料。通常情况下,这类图形展示包括但不限于: - 各层类型的名称及其连接方式; - 输入输出张量大小的变化情况; - 关键超参数设置如kernel size、stride等。 ![MobileNet Architecture](https://miro.medium.com/max/700/1*mk1-6aYaf_Bes1E3ObzUWQ.png) 请注意,实际使用的图片链接应指向权威来源提供的高质量图像文件。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

ManonLegrand

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

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

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

打赏作者

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

抵扣说明:

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

余额充值