【论文复现】MobileOne:移动端仅需1ms的高性能主干!
CVPR 2023 | MobileOne:移动端仅需1ms的高性能主干!超越MobileViT!
★★★ 本文源自AlStudio社区精品项目,【点击此处】查看更多精品内容 >>>
MobileOne: An Improved One millisecond Mobile Backbone
一句话总结
MobileOne(≈MobileNetV1+RepVGG+训练Trick)是由Apple公司提出的一种基于iPhone12优化的超轻量型架构,在ImageNet数据集上以<1ms的速度取得了75.9%的Top1精度。
1 论文解读
1.1 论文目的
高效率网络具有更强的实用价值,但学术界的研究往往聚焦于FLOPs或者参数量的降低,而这两者与推理效率之间并不存在严格的一致性。比如,FLOPs并未考虑访存消耗与计算并行度,像无参操作(如跳过连接导致的Add、Concat等)会带来显著的访存消耗,导致更长推理耗时。
为更好的分析高效率网络的瓶颈所在,作者以iPhone12平台为基准,从不同维度进行了"瓶颈"分析,见上图。从中可以看到:
-
具有高参数量的模型也可以拥有低延迟,比如ShuffleNetV2;
-
具有高FLOPs的模型也可以拥有低延迟,比如MobileNetV1和ShuffleNetV2;
Type | Flops | Parameters |
---|---|---|
corr. p-value | corr. p-value | |
Mobile Latency | 0.47 0.03 | 0.30 0.18 |
CPU Latency | 0.06 0.80 | 0.07 0.77 |
上表从SRCC角度进行了分析,可以看到:
-
在移动端,延迟与FLOPs和参数量的相关性较弱;
-
在PC-CPU端,该相关性进一步弱化。
1.2 具体方案
基于上述洞察,作者从先两个主要效率"瓶颈"维度上进行了对比,然后对性能"瓶颈"进行了分析并提出相应方案。
Activation Functions:上表对比了不同激活函数对于延迟的影响,可以看到:尽管具有相同的架构,但不同激活函数导致的延迟差异极大。本文默认选择ReLU激活函数。
Architectural Block:上表对影响延迟的两个主要因素(访存消耗与计算并行度)进行了分析,见上表,可以看到:当采用单分支结构时,模型具有更快的速度。此外,为改善效率,作者在大模型配置方面有限的实用了SE模块。
基于上述分析,MobileOne的核心模块基于MobileNetV1而设计,同时吸收了重参数思想,得到上图所示的结构。注:这里的重参数机制还存在一个超参k用于控制重参数分支的数量(实验表明:对于小模型来说,该变种收益更大)。
在Model Scaling方面类似MobileNetV2,上表给出了MobileOne不同配置的参数信息。
在训练优化方面,小模型需要更少的正则,因此作者提出了Annealing的正则调整机制(可带来0.5%指标提升);此外,作者还引入渐进式学习机制(可带来0.4%指标提升);最后,作者还采用EMA机制,最终MobileOne-S2模型达到了77.4%的指标。
1.3 实验结果
上表给出了ImageNet数据集上不同轻量型方案的性能与效率对比,可以看到:
-
哪怕最轻量的Transformer也需要至少4ms,而MobileOne-S4仅需1.86ms即可达到79.4%的精度;
-
相比EfficientNet-B0,MobileOne-S3不仅具有指标高1%,同时具有更快的推理速度;
-
相比其他方案,在PC-CPU端,MobileOne仍具有非常明显的优势。
上表为MS-COCO检测、VOC分割以及ADE20K分割任务上的性能对比,很明显:
-
在MC-COCO任务上,MobileOne-S4比MNASNet指标高27.8%,比MobileViT高6.1%;
-
在VOC分割任务上,所提方案比MobileViT高1.3%,比MobileNetV2高5.8%;
-
在ADE20K任务上,所提最佳方案比MobileNetV2高12%,而MobileOne-S1仍比MobileNetV2高2.9%。
在文章最后,作者俏皮的提了一句:“Although, our models are state-of-the art within the regime of efficient architectures, the accuracy lags large models ConvNeXt and Swin Transformer”。
2 模型训练
2.1 查看飞桨版本
# 1.查看飞桨版本
import paddle
print(paddle.__version__)
2.4.0
2.2 安装PaddleClas环境
添加了MobilieOne的PaddleClas已打包至PaddleClas.zip中,通过解压进行环境安装
参考文档:https://github.com/PaddlePaddle/PaddleClas/blob/release/2.2/docs/en/tutorials/install_en.md
# !git clone https://github.com/PaddlePaddle/PaddleClas.git -b develop
!unzip PaddleClas.zip
%cd /home/aistudio/PaddleClas
!pip install --upgrade pip
!pip install --upgrade -r requirements.txt --user -i https://mirror.baidu.com/pypi/simple
2.3 了解PaddleClas深度学习套件
【官方文档】 :拥有图像识别、图像分类、特征学习等内容
2.4 PaddleClas全局配置
参数名称 | 具体含义 | 默认值 |
---|---|---|
checkpoints | 断点模型路径,用于恢复训练 | null |
pretrained_model | 预训练模型路径 | null |
output_dir | 保存模型路径 | “./output/” |
save_interval | 每隔多少个epoch保存模型 | 1 |
eval_during_train | 是否在训练时进行评估 | True |
eval_interval | 每隔多少个epoch进行模型评估 | 1 |
epochs | 训练总epoch数 | 无 |
print_batch_step | 每隔多少个mini-batch打印输出 | 10 |
use_visualdl | 是否是用visualdl可视化训练过程 | False |
image_shape | 图片大小 | [3,224,224] |
save_inference_dir | inference模型的保存路径 | “./inference” |
eval_mode | eval的模式 | “classification” |
注:
-
image_shape值除了默认还可以选择list, shape: (3,)
-
eval_mode除了默认值还可以选择"retrieval"
参考文档:
https://github.com/PaddlePaddle/PaddleClas/blob/release/2.2/docs/en/tutorials/config_description_en.md
3 数据集
3.1 官方分类尝试
下载并解压flowers102数据集,数据集中有:
-
train_list.txt:训练集,1020张图
-
val_list.txt: 验证集,1020张图
-
train_extra_list.txt:大的训练集,7169张图
# 1.修改当前路径
!mkdir /home/aistudio/dataset
%cd /home/aistudio/dataset
# 2.下载数据集
!wget https://paddle-imagenet-models-name.bj.bcebos.com/data/flowers102.zip
# 3.解压数据
!unzip flowers102.zip
4 模型训练
ImageNet-1K
Model | Top-1 Acc. | Latency* |
---|---|---|
MobileOne-S0 | 71.4 | 0.79 |
MobileOne-S1 | 75.9 | 0.89 |
MobileOne-S2 | 77.4 | 1.18 |
MobileOne-S3 | 78.1 | 1.53 |
MobileOne-S4 | 79.4 | 1.86 |
- Latency measured on iPhone 12 Pro.
这里我们选用复现好的MobileOne_S0网络模型的配置进行鲜花分类模型的训练
!python tools/train.py -c ppcls/configs/MobileOne/MobileOne_S0.yml
运行tools文件夹下的train.py文件
-
-c指的是训练使用的配置文件的路径为./ppcls/configs/ImageNet/VovNet/vovnet39_x1.0.yaml
-
-o表示的是是否使用预训练模型,可以是选择为True或False,也可以使用预训练模型存放路径。
# 切换目录到PaddleClas下
%cd /home/aistudio/PaddleClas
# 开始训练
!python tools/train.py \
-c ppcls/configs/MobileOne/MobileOne_S0.yml \
-o Global.pretrained_model=/home/aistudio/PaddleClas/pretrain/mobileone_s0
5 模型预测
-
-c为训练配置文件
-
-o Infer.infer_imgs=为预测的图片
-
-o Global.pretrained_model=为用于预测的模型
!python tools/infer.py -c ppcls/configs/MobileOne/MobileOne_S0.yml \
-o Infer.infer_imgs=/home/aistudio/dataset/flowers102/jpg/image_00001.jpg \
-o Global.pretrained_model=/home/aistudio/PaddleClas/output/MobileOne_S0/best_model
6 模型评估
import paddle
!python -m paddle.distributed.launch \
tools/eval.py \
-c ppcls/configs/MobileOne/MobileOne_S0.yml \
-o Global.pretrained_model=/home/aistudio/PaddleClas/output/MobileOne_S0/best_model
7 模型导出
!python tools/export_model.py \
-c ppcls/configs/MobileOne/MobileOne_S0.yml \
-o Global.pretrained_model=/home/aistudio/PaddleClas/output/MobileOne_S0/best_model \
-o Global.save_inference_dir=inference_output
8 paddle2onnx 模型转化与预测
# 1. 环境准备
!python3.7 -m pip install paddle2onnx
!python3.7 -m pip install onnxruntime
!mkdir models_onnx
# 2. 模型转换
!paddle2onnx --model_dir=/home/aistudio/PaddleClas/models_onnx/ \
--model_filename=/home/aistudio/PaddleClas/inference_output/inference.pdmodel \
--params_filename=/home/aistudio/PaddleClas/inference_output/inference.pdiparams \
--save_file=/home/aistudio/PaddleClas/models_onnx/inference.onnx \
--opset_version=10 \
--enable_onnx_checker=True
[Paddle2ONNX] Start to parse PaddlePaddle model...
[Paddle2ONNX] Model file path: /home/aistudio/PaddleClas/inference_output/inference.pdmodel
[Paddle2ONNX] Paramters file path: /home/aistudio/PaddleClas/inference_output/inference.pdiparams
[Paddle2ONNX] Start to parsing Paddle model...
[Paddle2ONNX] Use opset_version = 10 for ONNX export.
[Paddle2ONNX] PaddlePaddle model is exported as ONNX format now.
2023-05-09 18:29:27 [INFO] ===============Make PaddlePaddle Better!================
2023-05-09 18:29:27 [INFO] A little survey: https://iwenjuan.baidu.com/?code=r8hu2s
e=r8hu2s
9 总结
在本文中成功复现了MobileOne网络模型,并添加至PaddleClas中,完成对Flowers102数据集上的训练、评估以及预测。今后的工作将添加MobileOne至目标检测、图像分割的模型中作为backbone,更好的加快网络提取特征的速度和能力。
请点击此处查看本环境基本用法.
Please click here for more detailed instructions.
此文章为搬运
原项目链接
更多推荐
所有评论(0)