未验证 提交 ca609b4b 编写于 作者: C cc 提交者: GitHub

[Doc][Cherry-pick] Update benchmark doc for v2.6, test=develop, test=document_fix (#3662)

* Update benchmark doc for v2.6, test=develop, test=document_fix (#3660)
* [Doc] Update shell for make benchmark_bin (#3661)
上级 fc60a3f8
...@@ -28,63 +28,64 @@ List of devices attached ...@@ -28,63 +28,64 @@ List of devices attached
执行以下命令,完成Benchmark: 执行以下命令,完成Benchmark:
```shell ```shell
wget -c https://paddle-inference-dist.bj.bcebos.com/PaddleLite/benchmark_0/run_benchmark.sh # Test v2.6 branch
wget -c https://paddle-inference-dist.bj.bcebos.com/PaddleLite/benchmark_2.6/run_benchmark.sh
sh run_benchmark.sh
# Test v2.3 branch
wget -c https://paddle-inference-dist.bj.bcebos.com/PaddleLite/benchmark_2.3/run_benchmark.sh
sh run_benchmark.sh sh run_benchmark.sh
``` ```
`run_benchmark.sh`脚本会: `run_benchmark.sh`脚本会:
1. 下载模型,并上传手机:包含mobilenetv1/v2、shufflenetv2、squeezenetv1.1、mnasnet 1. 下载模型,并上传手机:包含mobilenetv1、mobilenetv2、shufflenetv2、squeezenetv1.1、mnasnet、mobilenetv1_int8、mobilenetv2_int8
2. 下载pre-built android-armv7和android-armv8的可执行文件,并上传手机:`benchmark_bin_v7``benchmark_bin_v8` 2. 下载pre-built android-armv7和android-armv8的可执行文件,并上传手机:`benchmark_bin_v7``benchmark_bin_v8`
3. 自动执行另一个脚本`benchmark.sh`(多台手机连接USB,请在`benchmark.sh`脚本中对`adb`命令后加上测试手机的`serial number`); 3. 自动执行另一个脚本`benchmark.sh`(多台手机连接USB,请在`benchmark.sh`脚本中对`adb`命令后加上测试手机的`serial number`);
4. 从手机下载benchmark结果`result_armv7.txt``result_armv8.txt`,到当前目录,并显示Benchmark结果。 4. 从手机下载benchmark结果`result_armv7.txt``result_armv8.txt`,到当前目录,并显示Benchmark结果。
## 二. 逐步Benchmark ## 二. 逐步Benchmark
### 1. 获取benchmark可执行文件 ### 1. 编译benchmark可执行文件
benchmark_bin文件可以测试PaddleLite的性能,有下面两种方式获得。
#### 方式一:下载benchmark_bin可执行文件
```shell
# Download benchmark_bin for android-armv7
wget -c https://paddle-inference-dist.bj.bcebos.com/PaddleLite/benchmark_0/benchmark_bin_v7
# Download benchmark_bin for android-armv8
wget -c https://paddle-inference-dist.bj.bcebos.com/PaddleLite/benchmark_0/benchmark_bin_v8
```
#### 方式二:由源码编译benchmark_bin文件
根据[源码编译](../user_guides/source_compile)准备编译环境,拉取PaddleLite最新release发布版代码,并在仓库根目录下,执行: 根据[源码编译](../user_guides/source_compile)准备编译环境,拉取PaddleLite最新特定分支代码,并在仓库根目录下,执行:
```shell ```shell
########################################### ###########################################
# Build benchmark_bin for android-armv7 # # Build benchmark_bin for android-armv7 #
########################################### ###########################################
./lite/tools/ci_build.sh \
--arm_os="android" \ ./lite/tools/build.sh \
--arm_abi="armv7" \ --arm_os=android \
--arm_lang="gcc " \ --arm_abi=armv7 \
build_arm --arm_lang=gcc \
--android_stl=c++_static \
--build_extra=ON \
--with_log=OFF \
full_publish
# `benchmark_bin` 在: <paddle-lite-repo>/build.lite.android.armv7.gcc/lite/api/benchmark_bin # `benchmark_bin` 在: <paddle-lite-repo>/build.lite.android.armv7.gcc/lite/api/benchmark_bin
########################################### ###########################################
# Build benchmark_bin for android-armv8 # # Build benchmark_bin for android-armv8 #
########################################### ###########################################
./lite/tools/ci_build.sh \
--arm_os="android" \ ./lite/tools/build.sh \
--arm_abi="armv8" \ --arm_os=android \
--arm_lang="gcc " \ --arm_abi=armv8 \
build_arm --arm_lang=gcc \
--android_stl=c++_static \
--build_extra=ON \
--with_log=OFF \
full_publish
# `benchmark_bin` 在: <paddle-lite-repo>/build.lite.android.armv8.gcc/lite/api/benchmark_bin # `benchmark_bin` 在: <paddle-lite-repo>/build.lite.android.armv8.gcc/lite/api/benchmark_bin
``` ```
> **注意**:为了避免在docker内部访问不到手机的问题,建议编译得到benchmark_bin后退出到docker外面,并且将benchmark_bin文件拷贝到一个临时目录。然后在该临时目录下,按照下面步骤下载模型、拷贝脚本、测试。 > **注意**:为了避免在docker内部访问不到手机的问题,建议编译得到benchmark_bin后退出到docker外面,并且将benchmark_bin文件拷贝到一个临时目录。然后在该临时目录下,按照下面步骤下载模型、拷贝脚本、测试。
> **注意**:如果不是测试常见分类模型(单输入,输入shape是1x3x224x224),需要根据实际情况修改`/PaddleLite/lite/api/benchmark.cc`文件,然后编译得到可执行文件。
### 2. 准备模型 ### 2. 准备模型
PaddleLite为Benchmark准备好了[常见Benchmark模型](https://paddle-inference-dist.bj.bcebos.com/PaddleLite/benchmark_0/benchmark_models.tgz) PaddleLite为Benchmark准备好了[常见Benchmark模型](https://paddle-inference-dist.bj.bcebos.com/PaddleLite/benchmark_0/benchmark_models.tgz)
......
...@@ -22,7 +22,7 @@ ...@@ -22,7 +22,7 @@
## 2 产出量化模型 ## 2 产出量化模型
大家可以使用PaddlePaddle调用无校准数据训练后量化接口,得到量化模型。 因为目前该方法还没有在PaddleSlim中集成,大家可以使用PaddlePaddle调用无校准数据训练后量化接口,得到量化模型。
### 2.1 安装PaddlePaddle ### 2.1 安装PaddlePaddle
......
...@@ -51,6 +51,20 @@ cd build.lite.android.armv8.gcc/inference_lite_lib.android.armv8/demo/cxx/mask_d ...@@ -51,6 +51,20 @@ cd build.lite.android.armv8.gcc/inference_lite_lib.android.armv8/demo/cxx/mask_d
sh prepare.sh sh prepare.sh
``` ```
当然,大家也可以通过PaddleHub下载人脸检测模型和口罩佩戴判断模型,然后使用 `opt`工具转换,最后替换 `mask_demo` 文件中的模型文件。
```
# 参考[文档](https://github.com/PaddlePaddle/PaddleHub)安装PaddleHub
# 参考[文档](https://www.paddlepaddle.org.cn/hubdetail?name=pyramidbox_lite_mobile_mask&en_category=ObjectDetection)安装模型,执行 hub install pyramidbox_lite_mobile_mask==1.3.0
#通过python执行以下代码,将模型保存在test_program文件夹之中,人脸检测和口罩佩戴判断模型分别存储在pyramidbox_lite和mask_detector之中。文件夹中的__model__是模型结构文件,__param__文件是权重文件
import paddlehub as hub
pyramidbox_lite_mobile_mask = hub.Module(name="pyramidbox_lite_mobile_mask")
pyramidbox_lite_mobile_mask.processor.save_inference_model(dirname="test_program")
# 从PaddleHub下载的是预测模型,需要使用PaddleLite提供的 opt 对预测模型进行转换,请参考[模型转换文档](https://paddlepaddle.github.io/Paddle-Lite/v2.2.0/model_optimize_tool/)。
```
电脑连接安卓手机,在电脑shell端进入 `mask_demo` 目录。 电脑连接安卓手机,在电脑shell端进入 `mask_demo` 目录。
执行 `sh run.sh`,会将文件push到手机端、执行口罩检测、pull结果图片。 执行 `sh run.sh`,会将文件push到手机端、执行口罩检测、pull结果图片。
...@@ -59,17 +73,6 @@ sh prepare.sh ...@@ -59,17 +73,6 @@ sh prepare.sh
![test_mask_detection_result](https://user-images.githubusercontent.com/7383104/75131866-bae64300-570f-11ea-9cad-17acfaea1cfc.jpg) ![test_mask_detection_result](https://user-images.githubusercontent.com/7383104/75131866-bae64300-570f-11ea-9cad-17acfaea1cfc.jpg)
当然,大家也可以通过PaddleHub下载人脸检测模型和口罩佩戴判断模型。
```
# 下载paddlehub以后,通过python执行以下代码
import paddlehub as hub
pyramidbox_lite_mobile_mask = hub.Module(name="pyramidbox_lite_mobile_mask")
# 将模型保存在test_program文件夹之中
pyramidbox_lite_mobile_mask.processor.save_inference_model(dirname="test_program")
# 通过以上命令,可以获得人脸检测和口罩佩戴判断模型,分别存储在pyramidbox_lite和mask_detector之中。文件夹中的__model__是模型结构文件,__param__文件是权重文件。
# 从PaddleHub下载的是预测模型,需要使用PaddleLite提供的model_optimize_tools对预测模型进行转换,请参考[模型转换文档](https://paddlepaddle.github.io/Paddle-Lite/v2.2.0/model_optimize_tool/)。
```
注:mask_detetion.cc 中的缩放因子shrink, 检测阈值detect_threshold, 可供自由配置: 注:mask_detetion.cc 中的缩放因子shrink, 检测阈值detect_threshold, 可供自由配置:
- 缩放因子越大,模型运行速度越慢,检测准确率越高。 - 缩放因子越大,模型运行速度越慢,检测准确率越高。
- 检测阈值越高,人脸筛选越严格,检测出的人脸框可能越少。 - 检测阈值越高,人脸筛选越严格,检测出的人脸框可能越少。
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册