未验证 提交 004e4c4d 编写于 作者: littletomatodonkey's avatar littletomatodonkey 提交者: GitHub

fix link (#5464)

上级 99a1c805
...@@ -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>
......
# Mobilenet_v3 在 ARM CPU 上部署示例 # Mobilenet_v3 基于 ARM CPU 部署
# 目录 # 目录
......
...@@ -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=./mobilenetv3_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
...@@ -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.
先完成此消息的编辑!
想要评论请 注册