- 论文地址:Searching for MobileNetV3
- Pytorch 实现代码:
- https://github.com/WZMIAOMIAO/deep-learning-for-image-processing/tree/master/pytorch_segmentation/lraspp
- MobileNet v3 LR-ASPP
这篇论文就是 MobileNet v3 的论文 😂,LR-ASPP 指的是 “Lite Reduced Atrous Spatial Pyramid Pooling”,是 MobileNetV3 中用于语义分割任务的一种高效分割解码器。
LR-ASPP:Lite Reduced Atrous Spatial Pyramid Pooling,轻量化简减少空洞空间金字塔池化
0. LR-ASPP 概况
LR-ASPP 和 DeepLab V3 中的 ASPP 都是用于语义分割任务的分割解码器,但它们在一些方面有不同的创新点和设计思路。
-
简化结构:LR-ASPP 相对于传统的 ASPP 结构进行了简化。传统的 ASPP 通常包含多个并行的卷积分支(DeepLab v2 中有 4 个,DeepLab v3 中有 5 个),每个分支使用不同膨胀率的膨胀卷积来捕捉不同尺度的上下文信息。而 LR-ASPP 通过减少分支数量和膨胀卷积的膨胀率,降低了计算复杂性,使得模型更适合在资源受限的移动设备上使用。
-
节省计算资源:由于在移动设备上计算资源有限,LR-ASPP 的设计考虑了计算效率的问题。相比于 DeepLab V3 中的 ASPP,LR-ASPP 在保持一定的性能的前提下,减少了计算量,使得模型能够更好地适应移动设备的硬件限制。
-
高效的语义分割:LR-ASPP 在移动设备上表现出较好的分割性能。它能够有效地捕捉不同尺度的上下文信息,从而更准确地对图像中的像素进行语义分类。同时,由于其计算效率的优势,LR-ASPP 在移动设备上可以实现实时的语义分割,适用于许多实际应用场景。
总体而言,LR-ASPP 是 MobileNetV3 中的一项创新,它在计算效率和性能之间取得了良好的平衡,为移动设备上的语义分割任务提供了高效而有效的解决方案。而 DeepLab V3 中的 ASPP 则是传统 ASPP 的一种改进版本,它在大规模计算资源的情况下可以取得较好的性能。
- ASPP:运算量大
- LR-ASPP:运算量小
0. Abstract
我们提出了下一代基于互补搜索技术(complementary search techniques)和新颖架构设计的 MobileNets。MobileNetV3 通过硬件感知的网络架构搜索(NAS)和 NetAdapt 算法的结合,以及新颖的架构优化,针对移动手机 CPU 进行了优化。
本文探讨了自动化搜索算法和网络设计如何共同发挥作用,以提高整体的技术水平。通过这个过程,我们发布了两个新的 MobileNet 模型:①MobileNetV3-Large和 ②MobileNetV3-Small,分别用于高资源和低资源使用情况。然后,我们对这些模型进行了调整,并应用到目标检测和语义分割任务中。
对于语义分割任务(或任何密集像素预测任务),我们提出了一种新的高效分割解码器 —— Lite Reduced Atrous Spatial Pyramid Pooling(LR-ASPP)。在移动分类、检测和分割任务中,我们实现了新的技术水平。
- 【分类任务】与 MobileNetV2 相比,MobileNetV3-Large 在 ImageNet 分类上的准确率提高了 3.2%,同时减少了 15% 的延迟。MobileNetV3-Small 在准确率提高了 4.6% 的同时,减少了 5% 的延迟。
- 【目标检测】在 COCO 检测任务中,MobileNetV3-Large 的检测速度比 MobileNetV2 快 25%,准确率大致相同。
- 【语义分割】在 Cityscapes 分割任务中,MobileNetV3-Large LR-ASPP 的速度比 MobileNetV2 R-ASPP 快 30%,准确率相似。
- NAS(Neural Architecture Search,神经网络结构搜索)算法是一种自动化搜索神经网络结构的方法。它旨在通过计算机程序自动探索和优化神经网络的结构,以获得更好的性能和效率。
传统上,神经网络的结构是由人工设计的,通常需要领域专家根据经验和直觉进行手动设计。然而,随着深度学习的发展,神经网络结构日益复杂,人工设计变得愈发困难且耗时。为了解决这个问题,> NAS算法应运而生。
NAS算法通过以下步骤来搜索和优化神经网络结构:①搜索空间定义;②架构评估;③搜索策略;④结果评估与迭代。
- NetAdapt是一种用于神经网络模型自动压缩和优化的算法,旨在根据设备的资源限制自动适应网络结构,以实现更高效的推断过程。该算法由Google Brain团队提出,为移动设备和嵌入式系统等资源受限的环境下,深度学习模型的应用提供了更好的解决方案。它的主要步骤为:①搜索空间定义;②模型评估;③网络修剪;④微调和重复。通过这样的迭代搜索和优化过程,NetAdapt能够自动化地找到在给定资源约束下的最优神经网络结构,从而在移动设备上实现更高效的推断和运行。
1. 前言
Model | mIoU | Global Pixel Acc | Inference on CPU (sec) | Params (M) |
---|---|---|---|---|
LR-ASPP MobileNetV3-Large | 57.9 | 91.2 | 0.3278 | 3.22 |
DeepLabV3 MobileNetV3-Large | 60.3 | 91.2 | 0.5869 | 11.03 |
FCN MobileNetV3-Large (not released) | 57.8 | 90.9 | 0.3702 | 5.05 |
DeepLabV3 ResNet50 | 66.4 | 92.4 | 6.3531 | 39.64 |
FCN ResNet50 | 60.5 | 91.4 | 5.0146 | 32.96 |
数据来源:Everything you need to know about TorchVision’s MobileNetV3 implementation
- 从推理时间我们可以看到,以 ResNet-50 为 Backbone 的模型在 CPU 设备上的推理时间都很长,大约需要 5 ~ 6 秒,而一旦将 Backbone 替换为 MobileNet v3 系列,推理时间可以实现大幅度降低,只需要 0.3 ~ 0.6 秒,速度提升了大约 10 ~ 16 倍。
- 从 mean IoU 指标上看,我们发现即便将 Backbone 替换为更轻量化的模型,mIoU 并没有大幅度降低,二者中的最佳模型 mIoU 相差仅 6.1%,最差模型的 mIoU 相差 2.7%,说明 MobileNet v3 作为 Backbone 在语义分割任务中表现相当不错。
综合来看,LR-ASPP MobileNetV3-Large 模型在资源受限的情况下能够在语义分割任务中取得相对较好的性能,并且具有更快的推断速度和较小的模型尺寸,适合在移动设备等资源有限的场景中使用。而使用 ResNet50 的 DeepLabV3 和 FCN 模型在性能上更优秀,但计算复杂度和模型尺寸较大,适用于性能要求较高且资源充裕的环境。
2. LR-ASPP 架构
MobileNet v3 的网络我们在之前有讲过,所以在此就不再赘述了,详情见 MobileNet系列 (v1 ~ v3) 理论讲解。在语义分割任务中,Backbone 为 MobileNet v3,但进行了一些改动:
- Backbone 不再进行 32 倍下采样,而是仅进行 16 倍下采样
- Backbone 中最后的几个 BottleNet 中使用膨胀卷积
在一般的语义分割任务,Backbone 通常会进行 8 倍下采样,而 MobileNet v3 LR-ASPP 为了使模型更加轻量化,于是进行了 16 倍 下采样。
接下来我们看一下分割头(Segmentation Head),也就是 LR-ASPP。在 Backbone 输出上分成了两个分支,如上图所示:
- 【第一个分支】上面的分支通过一个简单的
1
×
1
1 \times 1
1×1 卷积(
bias=False
)汉堡包结构,即Conv -> BN -> ReLU
,得到一个输出特征图 F 1 \mathcal{F}_1 F1 - 【第二个分支】第二分支通过一个 核大小为
49
×
49
49 \times 49
49×49,步长为
[
16
,
20
]
[16, 20]
[16,20] 的全局平均池化层(AvgPooling Layer),之后再通过一个
1
×
1
1 \times 1
1×1 的普通卷积(
bias=False
) + Sigmoid,得到一个输出特征图 F 2 \mathcal{F}_2 F2
注意❗️:
- 根据观察源码,
F
1
\mathcal{F}_1
F1 分支中的
ReLU
就是普通的ReLU
而非ReLU6
-
F
2
\mathcal{F}_2
F2 分支中的
Bilinear Upsample
其实是不需要的(正常来说,通过 Sigmoid 层后得到的就是长度为 128 的向量) -
F
2
\mathcal{F}_2
F2 分支中的
AdaptiveAvgPool2d -> 1×1 Conv -> Sigmoid
与 MobileNet v3 中提出的 Squeeze-and-Excitation(SE)注意力模块非常相似
- 【第一次融合】 F 1 ⊗ F 2 \mathcal{F}_1 \otimes \mathcal{F}_2 F1⊗F2 之后,经过双线性插值进行 2 倍上采样,之后再经过普通的 1 × 1 1 \times 1 1×1 卷积,得到输出特征图 F 3 \mathcal{F}_3 F3
- 【第三个分支】将 Backbone 中经过 8 倍下采样的特征图拿出来,经过 普通的 1 × 1 1 \times 1 1×1 卷积得到输出特征图 F 4 \mathcal{F}_4 F4
- 【第二次融合】 F 3 ⊕ F 4 = F 5 \mathcal{F}_3 \oplus \mathcal{F}_4 = \mathcal{F}_{5} F3⊕F4=F5,得到 LR-ASPP 的输出特征图。
- 之后需要进行 8 倍双线性插值上采样得到和我输入图片一样大小的单通道图片,即 F o u t \mathcal{F}_{\mathrm{out}} Fout
3. MobileNet v3 Large LR-ASPP 网络模型
在 Backbone 中不同字母的含义如下:
Input
:输入特征图大小Operator
:算子名称exp size
:Bneck 中 Channel 提升大小#out
:输出特征图 Channel 大小SE
:是否使用 SE 注意力模块NL
:使用哪种激活函数HS
:Hard SigmoidRE
:ReLU
s
:stride 步长大小s=1
:不进行下采样s=2
:进行 2 倍下采样
d
:Bneck 中的膨胀系数d=1
:普通卷积d=2
:膨胀卷积(dilate=2
)
4. LR-ASPP 模型训练效果
学习率设置可能有些问题,跑了 100 个Epoch(没有使用预训练模型),mIoU 不太行。
知识来源
- https://www.bilibili.com/video/BV1LS4y1M76E