瀏覽代碼

Merge pull request #433 from syyxsxx/doc_rasp

Doc rasp
Jason 5 年之前
父節點
當前提交
7a428cbae0

+ 1 - 1
deploy/cpp/cmake/yaml-cpp.cmake

@@ -4,7 +4,7 @@ message("${CMAKE_BUILD_TYPE}")
 
 ExternalProject_Add(
         ext-yaml-cpp
-        URL https://bj.bcebos.com/paddlex/deploy/deps/yaml-cpp.zip
+	URL https://bj.bcebos.com/paddlex/deploy/deps/yaml-cpp.zip
         URL_MD5 9542d6de397d1fbd649ed468cb5850e6
         CMAKE_ARGS
         -DYAML_CPP_BUILD_TESTS=OFF

+ 1 - 2
deploy/openvino/CMakeLists.txt

@@ -9,7 +9,6 @@ SET(OPENVINO_DIR "" CACHE PATH "Location of libraries")
 SET(OPENCV_DIR "" CACHE PATH "Location of libraries")
 SET(GFLAGS_DIR "" CACHE PATH "Location of libraries")
 SET(NGRAPH_LIB "" CACHE PATH "Location of libraries")
-SET(ARCH "" CACHE PATH "Location of libraries")
 
 include(cmake/yaml-cpp.cmake)
 
@@ -96,7 +95,7 @@ if(WIN32)
     set(DEPS ${OPENVINO_DIR}/lib/intel64/Release/inference_engine${CMAKE_STATIC_LIBRARY_SUFFIX})
     set(DEPS ${DEPS} ${OPENVINO_DIR}/lib/intel64/Release/inference_engine_legacy${CMAKE_STATIC_LIBRARY_SUFFIX})
 else()
-    if (ARCH STREQUAL "armv7")
+    if (${ARCH} STREQUAL "armv7")
         set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -march=armv7-a")
         if(WITH_STATIC_LIB)
             set(DEPS ${OPENVINO_DIR}/lib/armv7l/libinference_engine${CMAKE_STATIC_LIBRARY_SUFFIX})

+ 1 - 2
deploy/openvino/cmake/yaml-cpp.cmake

@@ -5,8 +5,7 @@ message("${CMAKE_BUILD_TYPE}")
 
 ExternalProject_Add(
         ext-yaml-cpp
-        URL https://bj.bcebos.com/paddlex/deploy/deps/yaml-cpp.zip
-        URL_MD5 9542d6de397d1fbd649ed468cb5850e6
+        URL ${CMAKE_CURRENT_SOURCE_DIR}/deps/yaml-cpp.zip
         CMAKE_ARGS
         -DYAML_CPP_BUILD_TESTS=OFF
         -DYAML_CPP_BUILD_TOOLS=OFF

+ 10 - 1
deploy/openvino/scripts/install_third-party.sh

@@ -2,7 +2,7 @@
 if [ ! -d "./deps" ]; then
     mkdir deps
 fi
-if [ ! -d "./deps/gflag" ]; then
+if [ ! -d "./deps/gflags" ]; then
     cd deps
     git clone https://github.com/gflags/gflags
     cd gflags
@@ -12,6 +12,15 @@ if [ ! -d "./deps/gflag" ]; then
     cd ..
 fi
 
+# install yaml
+YAML_URL=https://bj.bcebos.com/paddlex/deploy/deps/yaml-cpp.zip
+if [ ! -f "./deps/yaml-cpp.zip" ]; then
+    cd deps
+    wget -c ${YAML_URL}
+    cd ..
+fi
+
+
 if [ "$ARCH" = "x86" ]; then
     OPENCV_URL=https://bj.bcebos.com/paddlex/deploy/x86opencv/opencv.tar.bz2
 else

+ 31 - 38
deploy/raspberry/CMakeLists.txt

@@ -4,11 +4,11 @@ project(PaddleX CXX C)
 
 option(WITH_STATIC_LIB "Compile demo with static/shared library, default use static."   OFF)
 
+
 SET(CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake" ${CMAKE_MODULE_PATH})
 SET(LITE_DIR "" CACHE PATH "Location of libraries")
 SET(OPENCV_DIR "" CACHE PATH "Location of libraries")
-SET(NGRAPH_LIB "" CACHE PATH "Location of libraries")
-
+SET(GFLAGS_DIR "" CACHE PATH "Location of libraries")
 
 include(cmake/yaml-cpp.cmake)
 
@@ -39,9 +39,13 @@ if (NOT DEFINED GFLAGS_DIR OR ${GFLAGS_DIR} STREQUAL "")
     message(FATAL_ERROR "please set GFLAGS_DIR with -DGFLAGS_DIR=/path/gflags")
 endif()
 
+if (NOT DEFINED ARCH OR ${ARCH} STREQUAL "")
+    message(FATAL_ERROR "please set ARCH with ARCH=armv7 or ARCH=armv8")
+endif()
 
-
-
+if (NOT DEFINED LITE OR ${LITE} STREQUAL "")
+    message(FATAL_ERROR "Please set LITE with LITE=light or LITE=full")
+endif()
 
 link_directories("${LITE_DIR}/lib")
 include_directories("${LITE_DIR}/include")
@@ -53,52 +57,41 @@ include_directories("${GFLAGS_DIR}/include")
 
 
 
-
-if (WIN32)
-  find_package(OpenCV REQUIRED PATHS ${OPENCV_DIR}/build/ NO_DEFAULT_PATH)
-  unset(OpenCV_DIR CACHE)
-else ()
-	find_package(OpenCV REQUIRED PATHS ${OPENCV_DIR}/share/OpenCV NO_DEFAULT_PATH)
-endif ()
-
+find_package(OpenCV REQUIRED PATHS ${OPENCV_DIR}/share/OpenCV NO_DEFAULT_PATH)
 include_directories(${OpenCV_INCLUDE_DIRS})
 
-if (WIN32)
-    set(CMAKE_C_FLAGS_DEBUG   "${CMAKE_C_FLAGS_DEBUG} /bigobj /MTd")
-    set(CMAKE_C_FLAGS_RELEASE  "${CMAKE_C_FLAGS_RELEASE} /bigobj /MT")
-    set(CMAKE_CXX_FLAGS_DEBUG  "${CMAKE_CXX_FLAGS_DEBUG} /bigobj /MTd")
-    set(CMAKE_CXX_FLAGS_RELEASE   "${CMAKE_CXX_FLAGS_RELEASE} /bigobj /MT")
-    if (WITH_STATIC_LIB)
-        safe_set_static_flag()
-        add_definitions(-DSTATIC_LIB)
-    endif()
-else()
-    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mfloat-abi=hard -mfpu=neon-vfpv4 -g -o2 -fopenmp -std=c++11")
+if (${ARCH} STREQUAL "armv7")
+    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -march=armv7-a -mfloat-abi=hard -mfpu=neon-vfpv4 -g -o2 -fopenmp -std=c++11")
+    set(CMAKE_STATIC_LIBRARY_PREFIX "")
+elseif(${ARC}H STREQUAL "armv8")
+    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}  -march=armb8-a -g -o2 -fopenmp -std=c++11")
     set(CMAKE_STATIC_LIBRARY_PREFIX "")
+else()
+    message(FATAL_ERROR "Unknown arch abi ${ARCH}, only support armv8 and armv7")
 endif()
 
 
 if(WITH_STATIC_LIB)
+    if(${LITE} STREQUAL "full")
 	set(DEPS ${LITE_DIR}/lib/libpaddle_full_api_shared${CMAKE_STATIC_LIBRARY_SUFFIX})
+    elseif(${LITE} STREQUAL "light")
+	set(DEPS ${LITE_DIR}/lib/libpaddle_light_api_shared${CMAKE_STATIC_LIBRARY_SUFFIX})
+    else()
+	message(FATAL_ERROR "Unkown LITE release ${LITE}, only support light and full")
+    endif()
 else()
+    if(${LITE} STREQUAL "full")
 	set(DEPS ${LITE_DIR}/lib/libpaddle_full_api_shared${CMAKE_SHARED_LIBRARY_SUFFIX})
+    elseif(${LITE} STREQUAL "light")
+        set(DEPS ${LITE_DIR}/lib/libpaddle_light_api_shared${CMAKE_SHARED_LIBRARY_SUFFIX})
+    else()
+	message(FATAL_ERROR "Unkown LITE release ${LITE}, only support light and full")
+    endif()
 endif()
 
-if (NOT WIN32)
-    set(DEPS ${DEPS}
-        gflags yaml-cpp
-        )
-else()
-    set(DEPS ${DEPS}
-        gflags_static libprotobuf zlibstatic xxhash libyaml-cppmt)
-    set(DEPS ${DEPS} libcmt shlwapi)
-endif(NOT WIN32)
-
-
-if (NOT WIN32)
-    set(EXTERNAL_LIB "-ldl -lrt -lgomp -lz -lm -lpthread")
-    set(DEPS ${DEPS} ${EXTERNAL_LIB})
-endif()
+set(DEPS ${DEPS} gflags yaml-cpp)
+set(EXTERNAL_LIB "-ldl -lrt -lgomp -lz -lm -lpthread")
+set(DEPS ${DEPS} ${EXTERNAL_LIB})
 
 set(DEPS ${DEPS} ${OpenCV_LIBS})
 add_executable(classifier demo/classifier.cpp src/transforms.cpp src/paddlex.cpp)

+ 2 - 2
deploy/raspberry/cmake/yaml-cpp.cmake

@@ -2,11 +2,11 @@
 include(ExternalProject)
 
 message("${CMAKE_BUILD_TYPE}")
+message(${CMAKE_CURRENT_SOURCE_DIR})
 
 ExternalProject_Add(
         ext-yaml-cpp
-        URL https://bj.bcebos.com/paddlex/deploy/deps/yaml-cpp.zip
-        URL_MD5 9542d6de397d1fbd649ed468cb5850e6
+	URL ${CMAKE_CURRENT_SOURCE_DIR}/deps/yaml-cpp.zip
         CMAKE_ARGS
         -DYAML_CPP_BUILD_TESTS=OFF
         -DYAML_CPP_BUILD_TOOLS=OFF

+ 1 - 1
deploy/raspberry/include/paddlex/visualize.h

@@ -22,7 +22,7 @@
 #include <io.h>
 #else  // Linux/Unix
 #include <dirent.h>
-#include <sys/io.h>
+#include <sys/uio.h>
 #include <sys/stat.h>
 #include <sys/types.h>
 #include <unistd.h>

+ 11 - 3
deploy/raspberry/scripts/build.sh

@@ -6,8 +6,15 @@ GFLAGS_DIR=$(pwd)/deps/gflags
 
 # opencv预编译库的路径, 如果使用自带预编译版本可不修改
 OPENCV_DIR=$(pwd)/deps/opencv
+
+# arm处理器架构,默认为armv7若CPU为armv8请修改为ARCH=armv8
+ARCH=armv7
+
+# 采用lite的版本,可选为full 与 light,默认为full版
+LITE=full
+
 # 下载自带预编译版本
-exec $(pwd)/scripts/install_third-party.sh
+bash $(pwd)/scripts/install_third-party.sh
 
 rm -rf build
 mkdir -p build
@@ -16,5 +23,6 @@ cmake .. \
     -DOPENCV_DIR=${OPENCV_DIR} \
     -DGFLAGS_DIR=${GFLAGS_DIR} \
     -DLITE_DIR=${LITE_DIR} \
-    -DCMAKE_CXX_FLAGS="-march=armv7-a"  
-make
+    -DARCH=${ARCH} \
+    -DLITE=${LITE}
+make -j4

+ 12 - 1
deploy/raspberry/scripts/install_third-party.sh

@@ -2,7 +2,8 @@
 if [ ! -d "./deps" ]; then
     mkdir deps
 fi
-if [ ! -d "./deps/gflag" ]; then
+
+if [ ! -d "./deps/gflags" ]; then
     cd deps
     git clone https://github.com/gflags/gflags
     cd gflags
@@ -11,6 +12,16 @@ if [ ! -d "./deps/gflag" ]; then
     cd ..
     cd ..
 fi
+
+# install yaml
+YAML_URL=https://bj.bcebos.com/paddlex/deploy/deps/yaml-cpp.zip
+if [ ! -f "./deps/yaml-cpp.zip" ]; then
+    cd deps
+    wget -c ${YAML_URL}
+    cd ..
+fi
+
+# install opencv
 OPENCV_URL=https://bj.bcebos.com/paddlex/deploy/armlinux/opencv.tar.bz2
 if [ ! -d "./deps/opencv" ]; then
     cd deps

+ 2 - 1
docs/deploy/openvino/export_openvino_model.md

@@ -7,7 +7,8 @@
 * PaddleX 1.2+
 * OpenVINO 2021.1+
 
-**说明**:PaddleX安装请参考[PaddleX](https://paddlex.readthedocs.io/zh_CN/develop/install.html) , OpenVINO安装请参考[OpenVINO](https://docs.openvinotoolkit.org/latest/index.html),ONNX请安装1.6.0以上版本否则会出现转模型错误。
+**说明**:PaddleX安装请参考[PaddleX](https://paddlex.readthedocs.io/zh_CN/develop/install.html) , OpenVINO安装请参考[OpenVINO](https://docs.openvinotoolkit.org/latest/index.html),ONNX请安装1.6.0以上版本否则会出现转模型错误。  
+**注意**:安装OpenVINO时请务必安装官网教程初始化OpenVINO运行环境,并安装相关依赖  
 
 请确保系统已经安装好上述基本软件,**下面所有示例以工作目录 `/root/projects/`演示**。
 

+ 3 - 1
docs/deploy/openvino/introduction.md

@@ -1,6 +1,8 @@
 # OpenVINO部署简介
 PaddleX支持将训练好的Paddle模型通过OpenVINO实现模型的预测加速,OpenVINO详细资料与安装流程请参考[OpenVINO](https://docs.openvinotoolkit.org/latest/index.html),本文档使用OpenVINO 2020.4与2021.1测试通过。  
-**注意**:由于PaddleX分割模型使用了ReSize-11 Op,OpenVINO 2021.1版本开始支持支持Resize-11 ,请务必下载OpenVINO 2021.1+版本  
+**注意**:
+- 由于PaddleX分割模型使用了ReSize-11 Op,OpenVINO 2021.1版本开始支持支持Resize-11 ,请务必下载OpenVINO 2021.1+版本  
+- 安装OpenVINO过程中请务必参考OpenVINO官网教程,初始化OpenVINO使用环境,以及安装OpenVINO相关依赖  
 
 
 ## 部署支持情况

+ 1 - 1
docs/deploy/openvino/python.md

@@ -18,7 +18,7 @@
 | --model_dir  | 模型转换生成的.xml文件路径,请保证模型转换生成的三个文件在同一路径下|
 | --img  | 要预测的图片文件路径 |
 | --image_list  | 按行存储图片路径的.txt文件 |
-| --device  | 运行的平台, 默认值为"CPU" |
+| --device  | 运行的平台,可选项{"CPU","MYRIAD"} ,默认值为"CPU",VPU下上请使用"MYRIAD" |
 | --cfg_file | PaddleX model 的.yml配置文件 |
 
 ### 样例

+ 91 - 0
docs/deploy/raspberry/NCS2.md

@@ -0,0 +1,91 @@
+# 神经计算棒2代  
+PaddleX支持在树莓派上插入NCS2(神经计算棒2代)通过OpenVINO部署PadlleX训练出来的分类模型  
+
+**注意**:目前仅支持分类模型、仅支持Armv7hf的树莓派  
+
+## 前置条件  
+* OS: Raspbian OS 
+* PaddleX 1.0+
+* OpenVINO 2020.3+  
+
+- Raspbian OS:树莓派操作操作系统下载与安装请参考[树莓派系统安装与环境配置](./Raspberry.md#硬件环境配置)  
+- PaddleX: PaddleX安装请参考[PaddleX](https://paddlex.readthedocs.io/zh_CN/develop/install.html)  
+- OpenVINO: OpenVINO的安装请参考[OpenVINO-Raspbian](https://docs.openvinotoolkit.org/latest/openvino_docs_install_guides_installing_openvino_raspbian.html)  
+
+**注意**:安装完OpenVINO后需要初始化OpenVINO环境,并且需要对USB进行配置,请参考:  
+  
+```
+#初始化OpenVINO环境
+source /opt/intel/openvino/bin/setupvars.sh
+#将初始化OpenVINO环境的规则加入到bashrc中
+echo "source /opt/intel/openvino/bin/setupvars.sh" >> ~/.bashrc
+#配置USB
+sh /opt/intel/openvino/install_dependencies/install_NCS_udev_rules.sh
+```
+  
+## 部署流程  
+  
+部署流程主要分为模型转换与转换后模型部署两个步骤,下面以MobilnetV2模型为例,介绍如何将PaddleX训练好的模型通过OpenVINO部署到插入NCS2的树莓派  
+教程的示例项目训练MobilenetV2模型,请参考[PaddleX模型训练示例](https://aistudio.baidu.com/aistudio/projectdetail/439860)  
+
+## 模型转换
+  
+模型转换指的是将PaddleX训练出来的Paddle模型转换为OpenVINO的IR,对于模型转换教程可以参考[OpenVINO模型转换](../openvino/export_openvino_model.md)  
+
+**注意**:树莓派上面安装的OpenVINO是不带Model Optmizier模块的,不能在上面进行模型转换,请在Host下载与树莓派一直的OpenVINO版本,然后进行模型转换。  
+
+以转换训练好的MobileNetV2为示例,请参考以下命令:
+```
+#安装paddlex
+pip install paddlex
+
+#下载PaddleX代码
+git clone https://github.com/PaddlePaddle/PaddleX.git
+
+#进入模型转换脚本文件夹
+cd PaddleX/deploy/openvino/python
+
+#导出inference模型,执行命令前务必将训练好的MobileNetV2模型拷贝到当前目录,并命名为MobileNetV2
+paddlex --export_inference --model_dir ./MobileNetV2 --save_dir ./MobileNetV2 --fixed_input_shape [224,224]
+#完成导出后会在MobileNetV2文件夹下面出现,__model__、__params__、model.yml三个文件
+
+#转换Paddle inference模型到OpenVINO IR
+python converter.py --model_dir ./MobileNetV2 --save_dir ./MobileNetV2 --fixed_input_shape [224,224] --data_type FP16
+#转换成功后会在MobileNetV2目录下面出现 paddle2onnx.xml、paddle2onnx.mapping、paddle2onnx.bin三个文件
+```
+
+## 模型部署
+
+PaddleX支持Python和C++两种方式在树莓派上通过NCS2部署:  
+- C++:C++部署教程请参考[OpenVINO_Raspberry](../openvino/linux.md)
+- python:python部署教程请参考[OpenVINO_python](../openvino/python.md)  
+
+以转换好的MobileNetV2模型为示例  
+
+**准备工作**
+```
+#在树莓派上下载PaddleX代码
+git clone https://github.com/PaddlePaddle/PaddleX.git
+#进入OpenVINO部署代码
+cd PaddleX/deploy/openvino
+#将MobileNetV2转好的OpenVINO IR以及测试图片拷贝到树莓派上面,并以及MobileNetV2文件夹放到OpenVINO部署的代码的目录
+```
+  
+**C++部署**
+```
+#修改编译文件script/build.sh,将ARCH参数修改为armv7
+vim script/build.sh
+#编译代码
+sh script/build.sh
+#OpenVINO部署
+./build/classfier --model_dir MobileNetV2/paddle2onnx.xml --image [测试图片路径] --device MYRIAD --cfg_file MobileNetV2/model.yml --save_dir output
+```
+执行成功后会在output文件夹面保存测试图片的可视化结果  
+
+**python部署**
+```
+进入python部署代码目录
+cd python
+#python部署
+python demo.py --model_dir ../MobileNetV2/paddle2onnx.xml --img [测试图片路径] --device MYRIAD --cfg_file MobileNetV2/model.yml
+```

+ 18 - 10
docs/deploy/raspberry/Raspberry.md

@@ -44,35 +44,42 @@ git clone https://github.com/PaddlePaddle/PaddleX.git
 **说明**:其中C++预测代码在PaddleX/deploy/raspberry 目录,该目录不依赖任何PaddleX下其他目录,如果需要在python下预测部署请参考[Python预测部署](./python.md)。  
 
 #### Step2:Paddle-Lite预编译库下载
-提供了下载的opt工具对应的Paddle-Lite在ArmLinux下面的预编译库:[Paddle-Lite(ArmLinux)预编译库](https://bj.bcebos.com/paddlex/deploy/lite/inference_lite_2.6.1_armlinux.tar.bz2)。  
-建议用户使用预编译库,若需要自行编译,在树莓派上LX终端输入
+对于Armv7hf的用户提供了2.6.1版本的Paddle-Lite在架构为armv7hf的ArmLinux下面的Full版本预编译库:[Paddle-Lite(ArmLinux)预编译库](https://bj.bcebos.com/paddlex/deploy/lite/inference_lite_2.6.1_armlinux.tar.bz2)    
+对于Armv8的用户提供了2.6.3版本的Paddle-Lite在架构为armv8的ArmLinux下面的full版本预编译库:[Paddle-Lite(ArmLinux)与编译库](https://bj.bcebos.com/paddlex/paddle-lite/armlinux/paddle-Lite_armlinux_full_2.6.3.zip)  
+其他版本与arm架构的Paddle-Lite预测库请在官网[Releases](https://github.com/PaddlePaddle/Paddle-Lite/release)下载
+若用户需要在树莓派上自行编译Paddle-Lite,在树莓派上LX终端输入  
+
 ```
 git clone https://github.com/PaddlePaddle/Paddle-Lite.git
 cd Paddle-Lite
 sudo ./lite/tools/build.sh  --arm_os=armlinux --arm_abi=armv7hf --arm_lang=gcc  --build_extra=ON full_publish
-```  
-
+```
 预编库位置:`./build.lite.armlinux.armv7hf.gcc/inference_lite_lib.armlinux.armv7hf/cxx`  
 
-**注意**:预测库版本需要跟opt版本一致,更多Paddle-Lite编译内容请参考[Paddle-Lite编译](https://paddle-lite.readthedocs.io/zh/latest/user_guides/source_compile.html);更多预编译Paddle-Lite预测库请参考[Paddle-Lite Release Note](https://github.com/PaddlePaddle/Paddle-Lite/releases)
+**注意**:预测库版本需要跟opt版本一致,检测与分割请使用Paddle-Lite的full版本预测库,更多Paddle-Lite编译内容请参考[Paddle-Lite编译](https://paddle-lite.readthedocs.io/zh/latest/user_guides/source_compile.html);更多预编译Paddle-Lite预测库请参考[Paddle-Lite Release Note](https://github.com/PaddlePaddle/Paddle-Lite/releases)
 
 #### Step3 软件依赖
-提供了依赖软件的预编包或者一键编译,用户不需要单独下载或编译第三方依赖软件。若需要自行编译第三方依赖软件请参考:
+提供了依赖软件的预编包或者一键编译,对于armv7树莓派用户不需要单独下载或编译第三方依赖软件,对于armv8树莓派用户需要自行编译opencv,编译第三方依赖软件请参考:
 
 - gflags:编译请参考 [编译文档](https://gflags.github.io/gflags/#download)  
 
 - opencv: 编译请参考
-[编译文档](https://docs.opencv.org/master/d7/d9f/tutorial_linux_install.html)
+[编译文档](https://docs.opencv.org/master/d7/d9f/tutorial_linux_install.html)  
+**注意**:对于armv8树莓派用户,需要自行编译opencv  
 
 #### Step4: 编译
 编译`cmake`的命令在`scripts/build.sh`中,修改LITE_DIR为Paddle-Lite预测库目录,若自行编译第三方依赖软件请根据Step1中编译软件的实际情况修改主要参数,其主要内容说明如下:
 ```
 # Paddle-Lite预编译库的路径
 LITE_DIR=/path/to/Paddle-Lite/inference/lib
-# gflags预编译库的路径
+# gflags预编译库的路径,若没有自行编译无需修改
 GFLAGS_DIR=$(pwd)/deps/gflags
-# opencv预编译库的路径
+# opencv预编译库的路径,若自行编译请指定到对应路径
 OPENCV_DIR=$(pwd)/deps/opencv/
+# arm处理器架构 armv7或者armv8
+ARCH=armv7
+# Lite预测库版本 light或者full
+LITE=full
 ```
 执行`build`脚本:
  ```shell
@@ -154,4 +161,5 @@ OPENCV_DIR=$(pwd)/deps/opencv/
 ## NCS2部署
 树莓派支持通过OpenVINO在NCS2上跑PaddleX模型预测,目前仅支持PaddleX的分类网络,基于NCS2的方式包含Paddle模型转OpenVINO IR以及部署IR在NCS2上进行预测两个步骤。
 - 模型转换请参考:[PaddleX模型转换为OpenVINO IR](../openvino/export_openvino_model.md),raspbian OS上的OpenVINO不支持模型转换,需要先在host侧转换FP16的IR。
-- 预测部署请参考[OpenVINO部署](../openvino/linux.md)中VPU在raspbian OS部署的部分
+- 预测部署请参考[OpenVINO部署](../openvino/linux.md)中VPU在raspbian OS部署的部分  
+- 目前仅支持armv7的树莓派

+ 6 - 2
docs/deploy/raspberry/export_nb_model.md

@@ -3,7 +3,11 @@
 ### Step1:导出inference模型
 PaddleX模型转Paddle-Lite模型之前需要先把PaddleX模型导出为inference格式模型,导出的模型将包括__model__、__params__和model.yml三个文件名。具体方法请参考[Inference模型导出](../export_model.md)。
 ### Step2:导出Paddle-Lite模型
-Paddle-Lite模型需要通过Paddle-Lite的opt工具转出模型,下载并解压: [模型优化工具opt(2.6.1-linux)](https://bj.bcebos.com/paddlex/deploy/Rasoberry/opt.zip),在Linux系统下运行:
+Paddle-Lite模型需要通过Paddle-Lite的opt工具转出模型
+- 对于armv7hf的用户下载并解压: [模型优化工具opt(2.6.1-linux)](https://bj.bcebos.com/paddlex/deploy/Rasoberry/opt.zip)
+- 对于armv8的用户下载:[模型优化工具opt(2.6.3-linux)](https://github.com/PaddlePaddle/Paddle-Lite/releases/download/v2.6.3/opt_linux)  
+
+在Linux系统下运行:
 ``` bash
 ./opt --model_file=<model_path> \
       --param_file=<param_path> \
@@ -30,4 +34,4 @@ Paddle-Lite模型需要通过Paddle-Lite的opt工具转出模型,下载并解
 
 更多详细的使用方法和参数含义请参考: [使用opt转化模型](https://paddle-lite.readthedocs.io/zh/latest/user_guides/opt/opt_bin.html),更多opt预编译版本请参考[Paddle-Lite Release Note](https://github.com/PaddlePaddle/Paddle-Lite/releases)
 
-**注意**:opt版本需要跟预测库版本保持一致,如使2.6.0版本预测库,请从上面Release Note中下载2.6.0版本的opt转换模型
+**注意**:opt版本需要跟预测库版本保持一致,使2.6.0版本预测库,请从上面Release Note中下载2.6.0版本的opt转换模型

+ 1 - 0
docs/deploy/raspberry/index.rst

@@ -9,3 +9,4 @@
    Raspberry.md
    python.md
    export_nb_model.md 
+   NCS2.md

+ 0 - 46
docs/gui/faq.md

@@ -1,46 +0,0 @@
-
-
-1. **为什么训练速度这么慢?**
-
-   PaddleX完全采用您本地的硬件进行计算,深度学习任务确实对算力要求较高,为了使您能快速体验应用PaddleX进行开发,我们适配了CPU硬件,但强烈建议您使用GPU以提升训练速度和开发体验。
-
-   
-
-2. **我可以在服务器或云平台上部署PaddleX么?**
-
-   PaddleX GUI是一个适配本地单机安装的客户端,无法在服务器上直接进行部署,您可以直接使用PaddleX API,或采用飞桨核心框架进行服务器上的部署。如果您希望使用公有算力,强烈建议您尝试飞桨产品系列中的 [EasyDL](https://ai.baidu.com/easydl/) 或 [AI Studio](https://aistudio.baidu.com/aistudio/index)进行开发。
-
-   
-
-3. **PaddleX支持EasyData标注的数据吗?**
-
-   支持,PaddleX可顺畅读取EasyData标注的数据。但当前版本的PaddleX GUI暂时无法支持直接导入EasyData数据格式,您可以参照文档,将[数据集进行转换](https://paddlex.readthedocs.io/zh_CN/latest/appendix/how_to_convert_dataset.html)再导入PaddleX GUI进行后续开发。
-   同时,我们也在紧密开发PaddleX GUI可直接导入EasyData数据格式的功能。
-
-   
-
-4. **为什么模型裁剪分析耗时这么长?**
-
-   模型裁剪分析过程是对模型各卷积层的敏感度信息进行分析,根据各参数对模型效果的影响进行不同比例的裁剪。此过程需要重复多次直至FLOPS满足要求,最后再进行精调训练获得最终裁剪后的模型,因此耗时较长。有关模型裁剪的原理,可参见文档[剪裁原理介绍](https://paddlepaddle.github.io/PaddleSlim/algo/algo.html#2-%E5%8D%B7%E7%A7%AF%E6%A0%B8%E5%89%AA%E8%A3%81%E5%8E%9F%E7%90%86)
-
-   
-
-5. **如何调用后端代码?**
-
-   PaddleX 团队为您整理了相关的API接口文档,方便您学习和使用。具体请参见[PaddleX API说明文档](https://paddlex.readthedocs.io/zh_CN/latest/apis/index.html)
-   
-   
-   
-6. **如何在离线环境下使用PaddleX?**
-
-   PaddleX是支撑用户在本地离线环境中训练模型的,但是如果大家希望使用PaddleX团队为大家准备好的在标准数据集上训练的预训练模型,则需要在线环境进行下载。大家可以参照完整的无联网情况下进行模型训练的[文档](https://github.com/PaddlePaddle/PaddleX/blob/develop/docs/appendix/how_to_offline_run.md)查看如何一键快速下载所有预训练模型。
-
-   
-
-7. **有没有行业应用案例,或者实现好的工程实例?**
-
-   有的,PaddleX提供丰富的行业应用案例和完整的示例项目,请参考[PaddleX产业案例集](https://paddlex.readthedocs.io/zh_CN/develop/examples/index.html)
-
-**如果您有任何问题或建议,欢迎以issue的形式,或加入PaddleX官方QQ群(1045148026)直接反馈您的问题和需求**
-
-![](./images/QR.jpg)