Skip to content

Latest commit

 

History

History
168 lines (114 loc) · 12 KB

MobileNetV3.md

File metadata and controls

168 lines (114 loc) · 12 KB

MobileNetV3 系列


目录

1. 模型介绍

1.1 模型简介

MobileNetV3 是 Google 于 2019 年提出的一种基于 NAS 的新的轻量级网络,为了进一步提升效果,将 relu 和 sigmoid 激活函数分别替换为 hard_swish 与 hard_sigmoid 激活函数,同时引入了一些专门减小网络计算量的改进策略。

目前 PaddleClas 开源的的移动端系列的预训练模型一共有 35 个,其指标如图所示。从图片可以看出,越新的轻量级模型往往有更优的表现,MobileNetV3 代表了目前主流的轻量级神经网络结构。在 MobileNetV3 中,作者为了获得更高的精度,在 global-avg-pooling 后使用了 1x1 的卷积。该操作大幅提升了参数量但对计算量影响不大,所以如果从存储角度评价模型的优异程度,MobileNetV3 优势不是很大,但由于其更小的计算量,使得其有更快的推理速度。此外,我们模型库中的 ssld 蒸馏模型表现优异,从各个考量角度下,都刷新了当前轻量级模型的精度。由于 MobileNetV3 模型结构复杂,分支较多,对 GPU 并不友好,GPU 预测速度不如 MobileNetV1。GhostNet 于 2020 年提出,通过引入 ghost 的网络设计理念,大大降低了计算量和参数量,同时在精度上也超过前期最高的 MobileNetV3 网络结构。

1.2 模型指标

Models Top1 Top5 Reference
top1
Reference
top5
FLOPs
(G)
Params
(M)
MobileNetV3_large_
x1_25
0.764 0.930 0.766 0.714 7.440
MobileNetV3_large_
x1_0
0.753 0.923 0.752 0.450 5.470
MobileNetV3_large_
x0_75
0.731 0.911 0.733 0.296 3.910
MobileNetV3_large_
x0_5
0.692 0.885 0.688 0.138 2.670
MobileNetV3_large_
x0_35
0.643 0.855 0.642 0.077 2.100
MobileNetV3_small_
x1_25
0.707 0.895 0.704 0.195 3.620
MobileNetV3_small_
x1_0
0.682 0.881 0.675 0.123 2.940
MobileNetV3_small_
x0_75
0.660 0.863 0.654 0.088 2.370
MobileNetV3_small_
x0_5
0.592 0.815 0.580 0.043 1.900
MobileNetV3_small_
x0_35
0.530 0.764 0.498 0.026 1.660
MobileNetV3_small_
x0_35_ssld
0.556 0.777 0.498 0.026 1.660
MobileNetV3_large_
x1_0_ssld
0.790 0.945 0.450 5.470
MobileNetV3_large_
x1_0_ssld_int8
0.761
MobileNetV3_small_
x1_0_ssld
0.713 0.901 0.123 2.940

1.3 Benchmark

1.3.1 基于 SD855 的预测速度和存储大小

Models SD855 time(ms)
bs=1, thread=1
SD855 time(ms)
bs=1, thread=2
SD855 time(ms)
bs=1, thread=4
Storage Size(M)
MobileNetV3_large_x1_25 24.52 14.76 9.89 29.000
MobileNetV3_large_x1_0 16.55 10.09 6.84 21.000
MobileNetV3_large_x0_75 11.53 7.06 4.94 16.000
MobileNetV3_large_x0_5 6.50 4.22 3.15 11.000
MobileNetV3_large_x0_35 4.43 3.11 2.41 8.600
MobileNetV3_small_x1_25 7.88 4.91 3.45 14.000
MobileNetV3_small_x1_0 5.63 3.65 2.60 12.000
MobileNetV3_small_x0_75 4.50 2.96 2.19 9.600
MobileNetV3_small_x0_5 2.89 2.04 1.62 7.800
MobileNetV3_small_x0_35 2.23 1.66 1.43 6.900
MobileNetV3_small_x0_35_ssld 6.900
MobileNetV3_large_x1_0_ssld 16.56 10.10 6.86 21.000
MobileNetV3_large_x1_0_ssld_int8 10.000
MobileNetV3_small_x1_0_ssld 5.64 3.67 2.61 12.000

1.3.2 基于 V100 GPU 的预测速度

Models Size Latency(ms)
bs=1
Latency(ms)
bs=4
Latency(ms)
bs=8
MobileNetV3_large_x1_25 224 1.75 2.87 4.23
MobileNetV3_large_x1_0 224 1.37 2.67 3.46
MobileNetV3_large_x0_75 224 1.37 2.23 3.17
MobileNetV3_large_x0_5 224 1.10 1.85 2.69
MobileNetV3_large_x0_35 224 1.01 1.44 1.92
MobileNetV3_small_x1_25 224 1.20 2.04 2.64
MobileNetV3_small_x1_0 224 1.03 1.76 2.50
MobileNetV3_small_x0_75 224 1.04 1.71 2.37
MobileNetV3_small_x0_5 224 1.01 1.49 2.01
MobileNetV3_small_x0_35 224 1.01 1.44 1.92
MobileNetV3_small_x0_35_ssld 224
MobileNetV3_large_x1_0_ssld 224 1.35 2.47 3.72
MobileNetV3_large_x1_0_ssld_int8 224
MobileNetV3_small_x1_0_ssld 224 1.06 1.89 2.48

备注: 精度类型为 FP32,推理过程使用 TensorRT。

2. 模型快速体验

安装 paddlepaddle 和 paddleclas 即可快速对图片进行预测,体验方法可以参考ResNet50 模型快速体验

3. 模型训练、评估和预测

此部分内容包括训练环境配置、ImageNet数据的准备、该模型在 ImageNet 上的训练、评估、预测等内容。在 ppcls/configs/ImageNet/MobileNetV3/ 中提供了该模型的训练配置,启动训练方法可以参考:ResNet50 模型训练、评估和预测

4. 模型推理部署

4.1 推理模型准备

Paddle Inference 是飞桨的原生推理库, 作用于服务器端和云端,提供高性能的推理能力。相比于直接基于预训练模型进行预测,Paddle Inference可使用 MKLDNN、CUDNN、TensorRT 进行预测加速,从而实现更优的推理性能。更多关于Paddle Inference推理引擎的介绍,可以参考Paddle Inference官网教程

Inference 的获取可以参考 ResNet50 推理模型准备

4.2 基于 Python 预测引擎推理

PaddleClas 提供了基于 python 预测引擎推理的示例。您可以参考ResNet50 基于 Python 预测引擎推理

4.3 基于 C++ 预测引擎推理

PaddleClas 提供了基于 C++ 预测引擎推理的示例,您可以参考服务器端 C++ 预测来完成相应的推理部署。如果您使用的是 Windows 平台,可以参考基于 Visual Studio 2019 Community CMake 编译指南完成相应的预测库编译和模型预测工作。

4.4 服务化部署

Paddle Serving 提供高性能、灵活易用的工业级在线推理服务。Paddle Serving 支持 RESTful、gRPC、bRPC 等多种协议,提供多种异构硬件和多种操作系统环境下推理解决方案。更多关于Paddle Serving 的介绍,可以参考Paddle Serving 代码仓库

PaddleClas 提供了基于 Paddle Serving 来完成模型服务化部署的示例,您可以参考模型服务化部署来完成相应的部署工作。

4.5 端侧部署

Paddle Lite 是一个高性能、轻量级、灵活性强且易于扩展的深度学习推理框架,定位于支持包括移动端、嵌入式以及服务器端在内的多硬件平台。更多关于 Paddle Lite 的介绍,可以参考Paddle Lite 代码仓库

PaddleClas 提供了基于 Paddle Lite 来完成模型端侧部署的示例,您可以参考端侧部署来完成相应的部署工作。

4.6 Paddle2ONNX 模型转换与预测

Paddle2ONNX 支持将 PaddlePaddle 模型格式转化到 ONNX 模型格式。通过 ONNX 可以完成将 Paddle 模型到多种推理引擎的部署,包括TensorRT/OpenVINO/MNN/TNN/NCNN,以及其它对 ONNX 开源格式进行支持的推理引擎或硬件。更多关于 Paddle2ONNX 的介绍,可以参考Paddle2ONNX 代码仓库

PaddleClas 提供了基于 Paddle2ONNX 来完成 inference 模型转换 ONNX 模型并作推理预测的示例,您可以参考Paddle2ONNX 模型转换与预测来完成相应的部署工作。