Explorar o código

Merge pull request #481 from syyxsxx/jetson_docker

add doc for jetson deloly using docker
Jason %!s(int64=4) %!d(string=hai) anos
pai
achega
f455144e11

+ 2 - 2
README_cn.md

@@ -57,7 +57,7 @@ pip install paddlex -i https://mirror.baidu.com/pypi/simple
 
 3. **PaddleX Restful:**  
   使用基于RESTful API开发的GUI与Web Demo实现远程的深度学习全流程开发;同时开发者也可以基于RESTful API开发个性化的可视化界面
-- 前往[PaddleX RESTful API使用教程](./docs/restful/introduction.md)  
+- 前往[PaddleX RESTful API使用教程](./docs/gui/restful/introduction.md)  
 
 
 ## 产品模块说明
@@ -81,7 +81,7 @@ pip install paddlex -i https://mirror.baidu.com/pypi/simple
 - [10分钟快速上手系列教程](https://paddlex.readthedocs.io/zh_CN/develop/quick_start.html)
 - [PaddleX模型训练教程集合](https://paddlex.readthedocs.io/zh_CN/develop/train/index.html)
 - [PaddleX API接口说明](https://paddlex.readthedocs.io/zh_CN/develop/apis/index.html)
-- [PaddleX RESTful API说明](https://paddlex.readthedocs.io/zh_CN/develop/restful/introduction.html)
+- [PaddleX RESTful API说明](https://paddlex.readthedocs.io/zh_CN/develop/gui/restful/introduction.html)
 
 ### 在线项目示例
 

+ 2 - 2
deploy/cpp/scripts/jetson_build.sh

@@ -1,5 +1,5 @@
 # 是否使用GPU(即是否使用 CUDA)
-WITH_GPU=OFF
+WITH_GPU=ON
 # 使用MKL or openblas
 WITH_MKL=OFF
 # 是否集成 TensorRT(仅WITH_GPU=ON 有效)
@@ -7,7 +7,7 @@ WITH_TENSORRT=OFF
 # TensorRT 的路径,如果需要集成TensorRT,需修改为您实际安装的TensorRT路径
 TENSORRT_DIR=/root/projects/TensorRT/
 # Paddle 预测库路径, 请修改为您实际安装的预测库路径
-PADDLE_DIR=/root/projects/fluid_inference
+PADDLE_DIR=/root/projects/paddle_inference
 # Paddle 的预测库是否使用静态库来编译
 # 使用TensorRT时,Paddle的预测库通常为动态库
 WITH_STATIC_LIB=OFF

BIN=BIN
docs/deploy/images/container.png


BIN=BIN
docs/deploy/images/images.png


+ 1 - 1
docs/deploy/index.rst

@@ -9,8 +9,8 @@
    export_model.md
    hub_serving.md
    server/index
-   nvidia-jetson.md
    paddlelite/index
    openvino/index
    raspberry/index
+   jetson/index
    opencv.md

+ 10 - 0
docs/deploy/jetson/index.rst

@@ -0,0 +1,10 @@
+Jetson部署
+=======================================
+
+
+.. toctree::
+   :maxdepth: 1
+   :caption: 文档目录:
+
+   nvidia-jetson.md
+   jetson-docker.md

+ 121 - 0
docs/deploy/jetson/jetson-docker.md

@@ -0,0 +1,121 @@
+# Nvidia Jetson开发板Docker部署
+本文档介绍了如何用Docker在Jetson开发板上部署PaddleX模型,通过Docker的方式部署,用户可以有效的避免可能因为系统环境导致编译或者运行的错误  
+
+提供了在Jeston上用于编译或者运行PaddleX部署代码的Docker,主要有如下功能:
+- 编译PaddleX部署代码:用户可以通过Docker编译PaddleX部署代码
+- 部署PaddleX模型:通过Docker使用编译好的可执行文件部署
+
+**注意**:NVIDIA JetPack在v4.2.1版本以上(含v4.2.1)才能支持通过Docker部署
+
+## 准备工作
+在编译与运行之前的准备工作,主要是下载Docker与创建容器  
+
+### Step1: 下载Jetson开发板Docker
+运行如下命令下载Docker  
+
+```
+sudo docker pull paddlex/jetson:1.0
+```  
+
+下载成功后,通过如下命令查看docker的镜像
+
+```
+sudo docker images
+```
+可以看到,存在一个REPOSITORY为`paddlex/jetson`、TAG为`1.0`的docker镜像
+![](../images/images.png)  
+
+### Step2: 容器创建
+创建容器之前,需要先准备好需要编译的部署代码与训练好的PaddleX部署模型
+
+建议用户在HOME目录下创建infer文件夹,将需要部署的代码与模型拷贝到该目录下用于挂载到容器内  
+
+本文档以PaddleX提供的jetson部署代码为示例:
+```
+#通过如下命令下载代码,Jetson部署代码在 `PaddleX/deploy/cpp` 目录下面
+git clone https://github.com/PaddlePaddle/PaddleX.git
+
+#在HOME目录下创建infer文件夹,将cpp文件夹拷贝到infer目录下面
+mkdir ~/infer
+cp -r PaddleX/deploy/cpp ~/infer/
+```
+
+**创建容器**:通过如下命令创建容器,同时将HOME目录下包含部署代码的infer文件夹挂载到容器内
+ ```
+ sudo docker create -it -v ~/infer/:/infer -v /tmp/.X11-unix:/tmp/.X11-unix -e DISPLAY=$DISPLAY --net=host --name paddlex --runtime nvidia paddlex/jetson:1.0 /bin/bash
+ ```
+查看创建的容器
+ ```
+ sudo docker ps -a
+ ```  
+
+ ![](../images/container.png)  
+
+
+创建好容器后需要运行容器
+```
+sudo docker start paddlex
+```
+
+## 编译
+通过如下命令可以编译infer文件夹内的部署代码
+```
+sudo docker exec -it paddlex /bin/bash -c 'cd /infer/cpp && sh scripts/jetson_build.sh'
+```
+**注意**:
+- `cd /infer/cpp`表示进入到部署代码目录,用户需要根据实际情况自己修改
+
+
+## 部署
+对于图片预测,编译的可执行文件在`/infer/cpp/build/demo/detector`,`/infer/cpp/build/demo/classifier`,`/infer/cpp/build/demo/segmenter`,其主要命令参数说明如下:
+
+|  参数   | 说明  |
+|  ----  | ----  |
+| model_dir  | 导出的预测模型所在路径 |
+| image  | 要预测的图片文件路径 |
+| image_list  | 按行存储图片路径的.txt文件 |
+| use_gpu  | 是否使用 GPU 预测, 支持值为0或1(默认值为0) |
+| use_trt  | 是否使用 TensorRT 预测, 支持值为0或1(默认值为0) |
+| gpu_id  | GPU 设备ID, 默认值为0 |
+| save_dir | 保存可视化结果的路径, 默认值为"output",**classfier无该参数** |
+| batch_size | 预测的批量大小,默认为1 |
+| thread_num | 预测的线程数,默认为cpu处理器个数 |  
+
+对于视频预测,编译的可执行文件在`/infer/cpp/build/demo/video_detector`,`/infer/cpp/build/demo/video_classifier`,`/infer/cpp/build/demo/video_segmenter`,其主要命令参数说明如下:
+
+|  参数   | 说明  |
+|  ----  | ----  |
+| model_dir  | 导出的预测模型所在路径 |
+| use_camera | 是否使用摄像头预测,支持值为0或1(默认值为0) |
+| camera_id | 摄像头设备ID,默认值为0 |
+| video_path | 视频文件的路径 |
+| use_gpu  | 是否使用 GPU 预测, 支持值为0或1(默认值为0) |
+| use_trt  | 是否使用 TensorRT 预测, 支持值为0或1(默认值为0) |
+| gpu_id  | GPU 设备ID, 默认值为0 |
+| show_result | 对视频文件做预测时,是否在屏幕上实时显示预测可视化结果(因加入了延迟处理,故显示结果不能反映真实的帧率),支持值为0或1(默认值为0) |
+| save_result | 是否将每帧的预测可视结果保存为视频文件,支持值为0或1(默认值为1) |
+| save_dir | 保存可视化结果的路径, 默认值为"output" |
+
+**设置show_result为1之前请执行如下命令确保容器有显示权限**
+```
+sudo xhost +
+```  
+
+**注意:若系统无GUI,则不要将show_result设置为1。当使用摄像头预测时,按`ESC`键可关闭摄像头并推出预测程序。**
+
+**对于使用用户编译的可执行文件进行部署的命令如下:**  
+```
+sudo docker exec -it paddlex /bin/bash -c 'cd [部署代码目录] && .build/demo/[可执行文件名] [命令参数]'
+```
+
+### 样例
+在用户编译完部署代码后,可按如下流程运行测试模型样例
+
+- 1)下载PaddleX预训练模型及测试图片[下载地址](https://paddlex.readthedocs.io/zh_CN/develop/train/prediction.html),本文档下载了YOLOv3-MobileNetV1模型与测试图片  
+- 2)将模型导出为部署模型格式 [导出部署模型步骤](https://paddlex.readthedocs.io/zh_CN/develop/deploy/export_model.html)
+- 3)将部署模型和测试图片copy到`~/infer`文件夹
+- 4)使用如下命令,通过容器进行预测
+
+```
+sudo docker exec -it paddlex /bin/bash -c 'cd /infer/cpp && ./build/demo/detector --model_dir /infer/yolov3_mobilenetv1_coco --image /infer/yolov3_mobilenetv1_coco/test.jpg --use_gpu 1'
+```

+ 1 - 1
docs/deploy/nvidia-jetson.md → docs/deploy/jetson/nvidia-jetson.md

@@ -1,4 +1,4 @@
-# Nvidia Jetson开发板
+# Nvidia Jetson开发板本地部署
 
 ## 说明
 本文档在基于Nvidia Jetpack 4.4的`Linux`平台上使用`GCC 7.4`测试过,如需使用不同G++版本,则需要重新编译Paddle预测库,请参考: [NVIDIA Jetson嵌入式硬件预测库源码编译](https://www.paddlepaddle.org.cn/documentation/docs/zh/develop/advanced_guide/inference_deployment/inference/build_and_install_lib_cn.html#id12)。

+ 1 - 6
docs/gui/index.rst

@@ -73,12 +73,7 @@ PaddleX RESTful API 二次开发
    download.md
    usage/index
    faq.md
-   introduction.md
-   restful.md
-   quick_start.md
-   restful_api.md
-   data_struct.md
-   tree.md
+   restful/index
 
 
 * PaddleX GUI版本: v1.0

+ 0 - 0
docs/restful/data_struct.md → docs/gui/restful/data_struct.md


+ 0 - 0
docs/restful/img/classify_help.jpg → docs/gui/restful/img/classify_help.jpg


+ 0 - 0
docs/restful/img/detect_help.jpg → docs/gui/restful/img/detect_help.jpg


+ 0 - 0
docs/restful/img/framework.png → docs/gui/restful/img/framework.png


+ 0 - 0
docs/restful/img/gui_use.png → docs/gui/restful/img/gui_use.png


+ 0 - 0
docs/restful/img/ins_seg_help.jpg → docs/gui/restful/img/ins_seg_help.jpg


+ 0 - 0
docs/restful/img/restful_api.png → docs/gui/restful/img/restful_api.png


+ 0 - 0
docs/restful/img/seg_help.jpg → docs/gui/restful/img/seg_help.jpg


BIN=BIN
docs/gui/restful/img/start_restful.png


+ 0 - 0
docs/restful/img/web_demo.png → docs/gui/restful/img/web_demo.png


+ 1 - 6
docs/restful/index.rst → docs/gui/restful/index.rst

@@ -31,7 +31,7 @@ PaddleX RESTful API 二次开发
 
 
 .. toctree::
-   :maxdepth: 2
+   :maxdepth: 1
    :caption: 文档目录
    
    introduction.md
@@ -42,11 +42,6 @@ PaddleX RESTful API 二次开发
    tree.md
 
 
-* 项目官网: http://www.paddlepaddle.org.cn/paddle/paddlex  
-* 项目GitHub: https://github.com/PaddlePaddle/PaddleX/tree/develop  
-* 官方QQ用户群: 1045148026  
-* GitHub Issue反馈: http://www.github.com/PaddlePaddle/PaddleX/issues
-
 
 
 

+ 0 - 0
docs/restful/introduction.md → docs/gui/restful/introduction.md


+ 0 - 0
docs/restful/quick_start.md → docs/gui/restful/quick_start.md


+ 0 - 0
docs/restful/restful.md → docs/gui/restful/restful.md


+ 0 - 0
docs/restful/restful_api.md → docs/gui/restful/restful_api.md


+ 0 - 0
docs/restful/tree.md → docs/gui/restful/tree.md


+ 3 - 15
docs/index.rst

@@ -50,7 +50,7 @@ PaddleX是基于飞桨核心框架、开发套件和工具组件的深度学习
    deploy/export_model.md
    deploy/hub_serving.md
    deploy/server/index
-   deploy/nvidia-jetson.md
+   deploy/jetson/index
    deploy/paddlelite/android.md
    deploy/raspberry/index
    deploy/openvino/index
@@ -74,24 +74,12 @@ PaddleX是基于飞桨核心框架、开发套件和工具组件的深度学习
    gui/download.md
    gui/how_to_use.md
    gui/FAQ.md
+   gui/restful/index
 
 
 .. toctree::
    :maxdepth: 1
-   :caption: 8. RESTful API使用
-
-   
-   restful/introduction.md
-   restful/restful.md
-   restful/quick_start.md
-   restful/restful_api.md
-   restful/data_struct.md
-   restful/tree.md
-
-
-.. toctree::
-   :maxdepth: 1
-   :caption: 9. 附录
+   :caption: 8. 附录
 
    apis/index.rst
    appendix/model_zoo.md