未验证 提交 f4f9139a 编写于 作者: C cnn 提交者: GitHub

update style of benchmark doc, test=fix_document (#2697)

上级 af8b4417
# 推理Benchmark
## 环境准备
- 测试环境:
## 一、环境准备
- 1、测试环境:
- CUDA 10.1
- CUDNN 7.6
- TensorRT-6.0.1
- PaddlePaddle v2.0.1
- GPU分别为: Tesla V100和Windows 1080Ti和TX2
- 测试方式:
- GPU分别为: Tesla V100和GTX 1080Ti和Jetson AGX Xavier
- 2、测试方式:
- 为了方便比较不同模型的推理速度,输入采用同样大小的图片,为 3x640x640,采用 `demo/000000014439_640x640.jpg` 图片。
- Batch Size=1
- 去掉前100轮warmup时间,测试100轮的平均时间,单位ms/image,包括网络计算时间、数据拷贝至CPU的时间。
- 采用Fluid C++预测引擎: 包含Fluid C++预测、Fluid-TensorRT预测,下面同时测试了Float32 (FP32) 和Float16 (FP16)的推理速度。
**注意:**TensorRT中固定尺寸和动态尺寸区别请参考文档[TENSOR教程](TENSOR_RT.md)。由于固定尺寸下对两阶段模型支持不完善,所以faster rcnn模型采用动态尺寸测试。固定尺寸和动态尺寸支持融合的OP不完全一样,因此同一个模型在固定尺寸和动态尺寸下测试的性能可能会有一点差异。
## 推理速度
### V100
| 模型 | 是否固定尺寸 | 入网尺寸 | paddle\_inference | trt\_fp32 | trt\_fp16 |
| ------------------------------------------ | ------ | -------- | ---------- | ---------- | ---------- |
| ppyolo\_r50vd\_dcn\_1x\_coco | 是 | 608x608 | 20.77 | 18.40443 | 13.532618 |
| yolov3\_mobilenet\_v1\_270e\_coco | 是 | 608x608 | 9.74 | 8.607459 | 6.275342 |
| ssd\_mobilenet\_v1\_300\_120e\_voc | 是 | 300x300 | 5.17 | 4.428614 | 4.292153 |
| ttfnet\_darknet53\_1x\_coco | 是 | 512x512 | 10.14 | 8.708397 | 5.551765 |
| fcos\_dcn\_r50\_fpn\_1x\_coco | 是 | 640x640 | 35.47 | 35.023315 | 34.24144 |
| faster\_rcnn\_r50\_fpn\_1x\_coco | 否 | 640x640 | 27.99 | 26.151001 | 21.922865 |
| yolov3\_darknet53\_270e\_coco | 是 | 608x608 | 17.84 | 15.431566 | 9.861447 |
| faster\_rcnn\_r50\_fpn\_1x\_coco(800x1312) | 否 | 800x1312 | 32.49 | 25.536572 | 21.696611 |
### Windows 1080Ti
| 模型 | 是否固定尺寸 | 入网尺寸 | paddle\_inference | trt\_fp32 | trt\_fp16 |
| ------------------------------------------ | ------ | -------- | ---------- | ---------- | --------- |
| ppyolo\_r50vd\_dcn\_1x\_coco | 是 | 608x608 | 38.06 | 31.401291 | 31.939096 |
| yolov3\_mobilenet\_v1\_270e\_coco | 是 | 608x608 | 14.51 | 11.22542 | 11.125602 |
| ssd\_mobilenet\_v1\_300\_120e\_voc | 是 | 300x300 | 16.47 | 13.874813 | 13.761724 |
| ttfnet\_darknet53\_1x\_coco | 是 | 512x512 | 21.83 | 17.144808 | 17.092379 |
| fcos\_dcn\_r50\_fpn\_1x\_coco | 是 | 640x640 | 71.88 | 69.930206 | 69.523048 |
| faster\_rcnn\_r50\_fpn\_1x\_coco | 否 | 640x640 | 50.74 | 57.172909 | 62.081978 |
| yolov3\_darknet53\_270e\_coco | 是 | 608x608 | 30.26 | 23.915573 | 24.019217 |
| faster\_rcnn\_r50\_fpn\_1x\_coco(800x1312) | 否 | 800x1312 | 50.31 | 57.613659 | 62.050724 |
### nv jetson
| 模型 | 是否固定尺寸 | 入网尺寸 | paddle\_inference | trt\_fp32 | trt\_fp16 |
| ------------------------------------------ | ------ | -------- | ---------- | ---------- | ---------- |
| ppyolo\_r50vd\_dcn\_1x\_coco | 是 | 608x608 | 111.80 | 99.40332 | 48.047401 |
| yolov3\_mobilenet\_v1\_270e\_coco | 是 | 608x608 | 48.76 | 43.832623 | 18.410919 |
| ssd\_mobilenet\_v1\_300\_120e\_voc | 是 | 300x300 | 10.52 | 8.840097 | 8.765652 |
| ttfnet\_darknet53\_1x\_coco | 是 | 512x512 | 73.77 | 64.025124 | 31.464737 |
| fcos\_dcn\_r50\_fpn\_1x\_coco | 是 | 640x640 | 217.11 | 214.381866 | 205.783844 |
| faster\_rcnn\_r50\_fpn\_1x\_coco | 否 | 640x640 | 169.45 | 158.919266 | 119.253937 |
| yolov3\_darknet53\_270e\_coco | 是 | 608x608 | 121.61 | 110.29866 | 42.379051 |
| faster\_rcnn\_r50\_fpn\_1x\_coco(800x1312) | 否 | 800x1312 | 228.07 | 156.393372 | 117.026932 |
**注意:** TensorRT中固定尺寸和动态尺寸区别请参考文档[TENSOR教程](TENSOR_RT.md)。由于固定尺寸下对两阶段模型支持不完善,所以faster rcnn模型采用动态尺寸测试。固定尺寸和动态尺寸支持融合的OP不完全一样,因此同一个模型在固定尺寸和动态尺寸下测试的性能可能会有一点差异。
## 二、推理速度
### 1、Linux系统
#### (1)Tesla V100
| 模型 | backbone | 是否固定尺寸 | 入网尺寸 | paddle_inference | trt_fp32 | trt_fp16 |
|-------------------------------|--------------|--------|----------|------------------|----------|----------|
| Faster RCNN FPN | ResNet50 | 否 | 640x640 | 27.99 | 26.15 | 21.92 |
| Faster RCNN FPN | ResNet50 | 否 | 800x1312 | 32.49 | 25.54 | 21.70 |
| YOLOv3 | Mobilenet\_v1 | 是 | 608x608 | 9.74 | 8.61 | 6.28 |
| YOLOv3 | Darknet53 | 是 | 608x608 | 17.84 | 15.43 | 9.86 |
| PPYOLO | ResNet50 | 是 | 608x608 | 20.77 | 18.40 | 13.53 |
| SSD | Mobilenet\_v1 | 是 | 300x300 | 5.17 | 4.43 | 4.29 |
| TTFNet | Darknet53 | 是 | 512x512 | 10.14 | 8.71 | 5.55 |
| FCOS | ResNet50 | 是 | 640x640 | 35.47 | 35.02 | 34.24 |
#### (2)Jetson AGX Xavier
| 模型 | backbone | 是否固定尺寸 | 入网尺寸 | paddle_inference | trt_fp32 | trt_fp16 |
|-------------------------------|--------------|--------|----------|------------------|----------|----------|
| Faster RCNN FPN | ResNet50 | 否 | 640x640 | 169.45 | 158.92 | 119.25 |
| Faster RCNN FPN | ResNet50 | 否 | 800x1312 | 228.07 | 156.39 | 117.03 |
| YOLOv3 | Mobilenet\_v1 | 是 | 608x608 | 48.76 | 43.83 | 18.41 |
| YOLOv3 | Darknet53 | 是 | 608x608 | 121.61 | 110.30 | 42.38 |
| PPYOLO | ResNet50 | 是 | 608x608 | 111.80 | 99.40 | 48.05 |
| SSD | Mobilenet\_v1 | 是 | 300x300 | 10.52 | 8.84 | 8.77 |
| TTFNet | Darknet53 | 是 | 512x512 | 73.77 | 64.03 | 31.46 |
| FCOS | ResNet50 | 是 | 640x640 | 217.11 | 214.38 | 205.78 |
### 2、Windows系统
#### (1)GTX 1080Ti
| 模型 | backbone | 是否固定尺寸 | 入网尺寸 | paddle_inference | trt_fp32 | trt_fp16 |
|-------------------------------|--------------|--------|----------|------------------|----------|----------|
| Faster RCNN FPN | ResNet50 | 否 | 640x640 | 50.74 | 57.17 | 62.08 |
| Faster RCNN FPN | ResNet50 | 否 | 800x1312 | 50.31 | 57.61 | 62.05 |
| YOLOv3 | Mobilenet\_v1 | 是 | 608x608 | 14.51 | 11.23 | 11.13 |
| YOLOv3 | Darknet53 | 是 | 608x608 | 30.26 | 23.92 | 24.02 |
| PPYOLO | ResNet50 | 是 | 608x608 | 38.06 | 31.40 | 31.94 |
| SSD | Mobilenet\_v1 | 是 | 300x300 | 16.47 | 13.87 | 13.76 |
| TTFNet | Darknet53 | 是 | 512x512 | 21.83 | 17.14 | 17.09 |
| FCOS | ResNet50 | 是 | 640x640 | 71.88 | 69.93 | 69.52 |
# PaddleDetection模型导出教程
## 模型导出
## 一、模型导出
本章节介绍如何使用`tools/export_model.py`脚本导出模型。
### 导出模输入输出说明
### 1、导出模输入输出说明
- `PaddleDetection`中输入变量以及输入形状如下:
| 输入名称 | 输入形状 | 表示含义 |
| :---------: | ----------- | ---------- |
......@@ -22,14 +22,14 @@
**注意**模型动转静导出不支持模型结构中包含numpy相关操作的情况。
### 启动参数说明
### 2、启动参数说明
| FLAG | 用途 | 默认值 | 备注 |
|:--------------:|:--------------:|:------------:|:-----------------------------------------:|
| -c | 指定配置文件 | None | |
| --output_dir | 模型保存路径 | `./output_inference` | 模型默认保存在`output/配置文件名/`路径下 |
### 使用示例
### 3、使用示例
使用训练得到的模型进行试用,脚本如下
......@@ -42,7 +42,7 @@ python tools/export_model.py -c configs/yolov3/yolov3_darknet53_270e_coco.yml --
预测模型会导出到`inference_model/yolov3_darknet53_270e_coco`目录下,分别为`infer_cfg.yml`, `model.pdiparams`, `model.pdiparams.info`, `model.pdmodel`。
### 设置导出模型的输入大小
### 4、设置导出模型的输入大小
使用Fluid-TensorRT进行预测时,由于<=TensorRT 5.1的版本仅支持定长输入,保存模型的`data`层的图片大小需要和实际输入图片大小一致。而Fluid C++预测引擎没有此限制。设置TestReader中的`image_shape`可以修改保存模型中的输入图片大小。示例如下:
......
......@@ -2,7 +2,7 @@
训练得到一个满足要求的模型后,如果想要将该模型部署到已选择的平台上,需要通过`tools/export_model.py`将模型导出预测部署的模型和配置文件。
并在同一文件夹下导出预测时使用的配置文件,配置文件名为`infer_cfg.yml`
## `PaddleDetection`目前支持的部署方式按照部署设备可以分为:
## 1、`PaddleDetection`目前支持的部署方式按照部署设备可以分为:
- 在本机`python`语言部署,支持在有`python paddle`(支持`CPU``GPU`)环境下部署,有两种方式:
- 使用`tools/infer.py`,此种方式依赖`PaddleDetection`代码库。
- 将模型导出,使用`deploy/python/infer.py`,此种方式不依赖`PaddleDetection`代码库,可以单个`python`文件部署。
......@@ -13,7 +13,7 @@
- `NV Jetson`嵌入式设备上部署
- `TensorRT`加速请参考文档[TensorRT预测部署教程](TENSOR_RT.md)
## 模型导出
## 2、模型导出
使用`tools/export_model.py`脚本导出模型已经部署时使用的配置文件,配置文件名字为`infer_cfg.yml`。模型导出脚本如下:
```bash
# 导出YOLOv3模型
......@@ -29,12 +29,12 @@ python tools/export_model.py -c configs/yolov3/yolov3_darknet53_270e_coco.yml -o
模型导出具体请参考文档[PaddleDetection模型导出教程](EXPORT_MODEL.md)
## 如何选择部署时依赖库的版本
## 3、如何选择部署时依赖库的版本
### CUDA、cuDNN、TensorRT版本选择
### (1)CUDA、cuDNN、TensorRT版本选择
由于CUDA、cuDNN、TENSORRT不一定都是向前兼容的,需要使用与编译Paddle预测库使用的环境完全一致的环境进行部署。
### 部署时预测库版本、预测引擎版本选择
### (2)部署时预测库版本、预测引擎版本选择
- Linux、Windows平台下C++部署,需要使用Paddle预测库进行部署。
(1)Paddle官网提供在不同平台、不同环境下编译好的预测库,您可以直接使用,请在这里[Paddle预测库](https://www.paddlepaddle.org.cn/documentation/docs/zh/guides/05_inference_deployment/inference/build_and_install_lib_cn.html) 选择。
......@@ -55,7 +55,7 @@ python tools/export_model.py -c configs/yolov3/yolov3_darknet53_270e_coco.yml -o
若列表中没有您需要的预测库,您可以在您的平台上自行编译,编译过程请参考[Paddle源码编译](https://www.paddlepaddle.org.cn/documentation/docs/zh/install/compile/linux-compile.html)
## 部署
## 4、部署
- C++部署,先使用跨平台编译工具`CMake`根据`CMakeLists.txt`生成`Makefile`,支持`Windows、Linux、NV Jetson`平台,然后进行编译产出可执行文件。可以直接使用`cpp/scripts/build.sh`脚本编译:
```buildoutcfg
cd cpp
......@@ -69,7 +69,7 @@ sh scripts/build.sh
- 手机移动端部署,请参考[Paddle-Lite-Demo](https://github.com/PaddlePaddle/Paddle-Lite-Demo)部署。
## 常见问题QA
## 5、常见问题QA
- 1、`Paddle 1.8.4`训练的模型,可以用`Paddle2.0`部署吗?
Paddle 2.0是兼容Paddle 1.8.4的,因此是可以的。但是部分模型(如SOLOv2)使用到了Paddle 2.0中新增OP,这类模型不可以。
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册