Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
PaddlePaddle
models
提交
004e4c4d
M
models
项目概览
PaddlePaddle
/
models
大约 1 年 前同步成功
通知
222
Star
6828
Fork
2962
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
602
列表
看板
标记
里程碑
合并请求
255
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
M
models
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
602
Issue
602
列表
看板
标记
里程碑
合并请求
255
合并请求
255
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
未验证
提交
004e4c4d
编写于
1月 24, 2022
作者:
littletomatodonkey
提交者:
GitHub
1月 24, 2022
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
fix link (#5464)
上级
99a1c805
变更
4
显示空白变更内容
内联
并排
Showing
4 changed file
with
48 addition
and
82 deletion
+48
-82
tutorials/mobilenetv3_prod/Step6/README.md
tutorials/mobilenetv3_prod/Step6/README.md
+18
-5
tutorials/mobilenetv3_prod/Step6/deploy/lite_infer_cpp_arm_cpu/README.md
...enetv3_prod/Step6/deploy/lite_infer_cpp_arm_cpu/README.md
+17
-17
tutorials/mobilenetv3_prod/Step6/deploy/onnx_python/README.md
...rials/mobilenetv3_prod/Step6/deploy/onnx_python/README.md
+11
-24
tutorials/mobilenetv3_prod/Step6/deploy/onnx_python/infer.py
tutorials/mobilenetv3_prod/Step6/deploy/onnx_python/infer.py
+2
-36
未找到文件。
tutorials/mobilenetv3_prod/Step6/README.md
浏览文件 @
004e4c4d
...
@@ -23,8 +23,6 @@
...
@@ -23,8 +23,6 @@
MobileNetV3 是 2019 年提出的一种基于 NAS 的新的轻量级网络,为了进一步提升效果,将 relu 和 sigmoid 激活函数分别替换为 hard_swish 与 hard_sigmoid 激活函数,同时引入了一些专门减小网络计算量的改进策略,最终性能超越了当时其他的轻量级骨干网络。
MobileNetV3 是 2019 年提出的一种基于 NAS 的新的轻量级网络,为了进一步提升效果,将 relu 和 sigmoid 激活函数分别替换为 hard_swish 与 hard_sigmoid 激活函数,同时引入了一些专门减小网络计算量的改进策略,最终性能超越了当时其他的轻量级骨干网络。
**论文:**
[
Searching for MobileNetV3
](
https://arxiv.org/abs/1905.02244
)
**论文:**
[
Searching for MobileNetV3
](
https://arxiv.org/abs/1905.02244
)
**参考repo:**
[
https://github.com/pytorch/vision
](
https://github.com/pytorch/vision
)
**参考repo:**
[
https://github.com/pytorch/vision
](
https://github.com/pytorch/vision
)
...
@@ -50,7 +48,8 @@ MobileNetV3 是 2019 年提出的一种基于 NAS 的新的轻量级网络,为
...
@@ -50,7 +48,8 @@ MobileNetV3 是 2019 年提出的一种基于 NAS 的新的轻量级网络,为
| 模型 | top1/5 acc (参考精度) | top1/5 acc (复现精度) | 下载链接 |
| 模型 | top1/5 acc (参考精度) | top1/5 acc (复现精度) | 下载链接 |
|:---------:|:------:|:----------:|:----------:|
|:---------:|:------:|:----------:|:----------:|
| MobileNetV3_small | 0.602/ | 0.601/0.826 |
[
预训练模型
](
https://paddle-model-ecology.bj.bcebos.com/model/mobilenetv3_reprod/mobilenet_v3_small_pretrained.pdparams
)
\|
[
Inference模型
](
https://paddle-model-ecology.bj.bcebos.com/model/mobilenetv3_reprod/mobilenet_v3_small_infer.tar
)
\|
[
日志
](
https://paddle-model-ecology.bj.bcebos.com/model/mobilenetv3_reprod/train_mobilenet_v3_small.log
)
|
| MobileNetV3_small | 0.602/- | 0.601/0.826 |
[
预训练模型
](
https://paddle-model-ecology.bj.bcebos.com/model/mobilenetv3_reprod/mobilenet_v3_small_pretrained.pdparams
)
\|
[
Inference模型
](
https://paddle-model-ecology.bj.bcebos.com/model/mobilenetv3_reprod/mobilenet_v3_small_infer.tar
)
\|
[
日志
](
https://paddle-model-ecology.bj.bcebos.com/model/mobilenetv3_reprod/train_mobilenet_v3_small.log
)
|
<a
name=
"3"
></a>
<a
name=
"3"
></a>
...
@@ -168,7 +167,14 @@ python3 -m paddle.distributed.launch --gpus="0,1,2,3" train.py --data-path="./IL
...
@@ -168,7 +167,14 @@ python3 -m paddle.distributed.launch --gpus="0,1,2,3" train.py --data-path="./IL
更多配置参数可以参考
[
train.py
](
./train.py
)
的
`get_args_parser`
函数。
更多配置参数可以参考
[
train.py
](
./train.py
)
的
`get_args_parser`
函数。
DCU运行需要设置环境变量
`export HIP_VISIBLE_DEVICES=0,1,2,3`
,启动命令与Linux GPU完全相同。
*
注意:本文档主要介绍Linux上的基础训练推理过程,如果希望获得更多方法的训练方法,可以参考:
*
[
混合精度训练教程
](
docs/train_amp_infer_python.md
)
*
[
多机多卡训练教程
](
docs/train_fleet_infer_python.md
)
*
[
PACT在线量化训练教程
](
docs/train_pact_infer_python.md
)
*
[
Windows平台训练教程
](
docs/windows_train_infer_python.md
)
*
DCU设备上运行需要设置环境变量
`export HIP_VISIBLE_DEVICES=0,1,2,3`
,其余训练评估预测命令与Linux GPU完全相同。
<a
name=
"4.2"
></a>
<a
name=
"4.2"
></a>
...
@@ -218,7 +224,14 @@ python tools/predict.py --pretrained=./mobilenet_v3_small_pretrained.pdparams --
...
@@ -218,7 +224,14 @@ python tools/predict.py --pretrained=./mobilenet_v3_small_pretrained.pdparams --
## 5. 模型推理部署
## 5. 模型推理部署
coming soon!
*
基于Paddle Inference的推理过程可以参考:
[
MobilenetV3 的 Inference 推理教程
](
./deploy/inference_python/README.md
)
。
*
基于Paddle Serving的服务化部署过程可以参考:
[
MobilenetV3 的 Serving 服务化部署
](
./deploy/serving_python/README.md
)
。
*
基于Paddle Lite的推理过程可以参考
[
MobilenetV3 基于 ARM CPU 部署急教程
](
./deploy/lite_infer_cpp_arm_cpu/README.md
)
。
*
基于Paddle2ONNX的推理过程可以参考:
[
MobilenetV3 基于 Paddle2ONNX 的推理教程
](
./deploy/onnx_python/README.md
)
。
*
基于PaddleSlim的离线量化过程可以参考:
[
MobilenetV3 离线量化教程
](
./deploy/ptq_python/README.md
)
<a
name=
"6"
></a>
<a
name=
"6"
></a>
...
...
tutorials/mobilenetv3_prod/Step6/deploy/lite_infer_cpp_arm_cpu/README.md
浏览文件 @
004e4c4d
# Mobilenet_v3
在 ARM CPU 上部署示例
# Mobilenet_v3
基于 ARM CPU 部署
# 目录
# 目录
...
...
tutorials/mobilenetv3_prod/Step6/deploy/onnx_python/README.md
浏览文件 @
004e4c4d
...
@@ -66,15 +66,15 @@ mobilenet_v3_small_infer
...
@@ -66,15 +66,15 @@ mobilenet_v3_small_infer
使用 Paddle2ONNX 将Paddle静态图模型转换为ONNX模型格式:
使用 Paddle2ONNX 将Paddle静态图模型转换为ONNX模型格式:
```
```
paddle2onnx --model_dir=./mobilenet
v3_model
/ \
paddle2onnx --model_dir=./mobilenet
_v3_small_infer
/ \
--model_filename=inference.pdmodel \
--model_filename=inference.pdmodel \
--params_filename=inference.pdiparams \
--params_filename=inference.pdiparams \
--save_file=./inference/mobilenetv3_model/model.onnx \
--save_file=./inference/mobilenetv3_model/model.onnx \
--opset_version=10 \
--opset_version=10 \
--enable_onnx_checker=True
--enable_onnx_checker=True
```
```
执行完毕后,ONNX 模型会被保存在
`./inference/mobilenetv3_model/`
路径下
执行完毕后,ONNX 模型会被保存在
`./inference/mobilenetv3_model/`
路径下
,文件名为
`model.onnx`
。
更多关于参数的用法,可参考
[
Paddle2ONNX官方教程
](
https://github.com/PaddlePaddle/Paddle2ONNX/blob/develop/README_zh.md
)
更多关于参数的用法,可参考
[
Paddle2ONNX官方教程
](
https://github.com/PaddlePaddle/Paddle2ONNX/blob/develop/README_zh.md
)
...
@@ -94,11 +94,10 @@ ONNX模型测试步骤如下:
...
@@ -94,11 +94,10 @@ ONNX模型测试步骤如下:
执行如下命令:
执行如下命令:
```
```
bash
python3 deploy/onnx_python/infer.py
\
python3 deploy/onnx_python/infer.py
\
--onnx_file ./inference/mobilenetv3_model/model.onnx \
--onnx_file
./inference/mobilenetv3_model/model.onnx
\
--params_file ./mobilenet_v3_small_pretrained.pdparams \
--img_path
./images/demo.jpg
--img_path ./images/demo.jpg
```
```
在
`ONNXRuntime`
输出结果如下。
在
`ONNXRuntime`
输出结果如下。
...
@@ -109,18 +108,6 @@ ONNXRuntime predict:
...
@@ -109,18 +108,6 @@ ONNXRuntime predict:
class_id: 8, prob: 0.9091270565986633
class_id: 8, prob: 0.9091270565986633
```
```
表示预测的类别ID是
`8`
,置信度为
`0.909`
,该结果与基于训练引擎的结果完全一致
表示预测的类别ID是
`8`
,置信度为
`0.909`
,该结果与基于推理引擎的结果完全一致。
`ONNXRuntime`
预测结果和
`Paddle Inference`
预测结果对比,如下。
```
ONNXRuntime and Paddle Inference result diff:
The difference of results between ONNXRuntime and Paddle looks good!
max_abs_diff: 1.5646219e-07
```
从
`ONNXRuntime`
和
`Paddle Inference`
的预测结果diff可见,两者的结果几乎完全一致
## 3. FAQ
## 3. FAQ
tutorials/mobilenetv3_prod/Step6/deploy/onnx_python/infer.py
浏览文件 @
004e4c4d
...
@@ -13,6 +13,8 @@
...
@@ -13,6 +13,8 @@
# limitations under the License.
# limitations under the License.
import
os
import
os
import
sys
sys
.
path
.
insert
(
0
,
"."
)
import
argparse
import
argparse
import
numpy
as
np
import
numpy
as
np
from
PIL
import
Image
from
PIL
import
Image
...
@@ -52,37 +54,6 @@ def infer():
...
@@ -52,37 +54,6 @@ def infer():
print
(
"ONNXRuntime predict: "
)
print
(
"ONNXRuntime predict: "
)
print
(
f
"class_id:
{
class_id
}
, prob:
{
prob
}
"
)
print
(
f
"class_id:
{
class_id
}
, prob:
{
prob
}
"
)
# Step2:ONNXRuntime预测结果和Paddle Inference预测结果对比
# 实例化 Paddle 模型
model
=
mobilenet_v3_small
(
pretrained
=
FLAGS
.
params_file
)
model
=
nn
.
Sequential
(
model
,
nn
.
Softmax
())
# 将模型设置为推理状态
model
.
eval
()
# 对比ONNXRuntime和Paddle预测的结果
paddle_outs
=
model
(
paddle
.
to_tensor
(
img
))
diff
=
ort_outs
[
0
]
-
paddle_outs
.
numpy
()
max_abs_diff
=
np
.
fabs
(
diff
).
max
()
print
(
"ONNXRuntime and Paddle Inference result diff: "
)
if
max_abs_diff
<
1e-05
:
print
(
"The difference of results between ONNXRuntime and Paddle looks good!"
)
else
:
relative_diff
=
max_abs_diff
/
np
.
fabs
(
paddle_outs
.
numpy
()).
max
()
if
relative_diff
<
1e-05
:
print
(
"The difference of results between ONNXRuntime and Paddle looks good!"
)
else
:
print
(
"The difference of results between ONNXRuntime and Paddle looks bad!"
)
print
(
'relative_diff: '
,
relative_diff
)
print
(
'max_abs_diff: '
,
max_abs_diff
)
if
__name__
==
'__main__'
:
if
__name__
==
'__main__'
:
parser
=
argparse
.
ArgumentParser
(
description
=
__doc__
)
parser
=
argparse
.
ArgumentParser
(
description
=
__doc__
)
...
@@ -91,11 +62,6 @@ if __name__ == '__main__':
...
@@ -91,11 +62,6 @@ if __name__ == '__main__':
type
=
str
,
type
=
str
,
default
=
"model.onnx"
,
default
=
"model.onnx"
,
help
=
"onnx model filename"
)
help
=
"onnx model filename"
)
parser
.
add_argument
(
'--params_file'
,
type
=
str
,
default
=
"model.pdparams"
,
help
=
"params filename"
)
parser
.
add_argument
(
parser
.
add_argument
(
'--img_path'
,
type
=
str
,
default
=
"image.jpg"
,
help
=
"image filename"
)
'--img_path'
,
type
=
str
,
default
=
"image.jpg"
,
help
=
"image filename"
)
parser
.
add_argument
(
'--crop_size'
,
default
=
256
,
help
=
'crop_szie'
)
parser
.
add_argument
(
'--crop_size'
,
default
=
256
,
help
=
'crop_szie'
)
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录