Skip to content

Latest commit

 

History

History
312 lines (204 loc) · 14.9 KB

use_sdk_on_windows_build.md

File metadata and controls

312 lines (204 loc) · 14.9 KB

FastDeploy C++库在Windows上的多种使用方式

目录

1. 环境依赖

  • cmake >= 3.12
  • Visual Studio 2019
  • cuda >= 11.2 (当WITH_GPU=ON)
  • cudnn >= 8.0 (当WITH_GPU=ON)

2. 下载 FastDeploy Windows 10 C++ SDK

2.1 下载预编译库或者从源码编译最新的SDK

可以从以下链接下载编译好的 FastDeploy Windows 10 C++ SDK,SDK中包含了examples代码。

https://bj.bcebos.com/fastdeploy/release/cpp/fastdeploy-win-x64-gpu-0.2.1.zip

源码编译请参考: build_and_install

2.2 准备模型文件和测试图片

可以从以下链接下载模型文件和测试图片,并解压缩

https://bj.bcebos.com/paddlehub/fastdeploy/ppyoloe_crn_l_300e_coco.tgz # (下载后解压缩)
https://gitee.com/paddlepaddle/PaddleDetection/raw/release/2.4/demo/000000014439.jpg

3. Windows下多种方式使用 C++ SDK 的方式

3.1 SDK使用方式一:命令行方式使用 C++ SDK

3.1.1 在 Windows 上编译 PPYOLOE

Windows菜单打开x64 Native Tools Command Prompt for VS 2019命令工具,cd到ppyoloe的demo路径

cd fastdeploy-win-x64-gpu-0.2.1\examples\vision\detection\paddledetection\cpp
mkdir build && cd build
cmake .. -G "Visual Studio 16 2019" -A x64 -DFASTDEPLOY_INSTALL_DIR=%cd%\..\..\..\..\..\..\..\fastdeploy-win-x64-gpu-0.2.1 -DCUDA_DIRECTORY="C:/Program Files/NVIDIA GPU Computing Toolkit/CUDA/v11.2"

然后执行

msbuild infer_demo.sln /m:4 /p:Configuration=Release /p:Platform=x64

3.1.2 运行 demo

cd Release
infer_ppyoloe_demo.exe ppyoloe_crn_l_300e_coco 000000014439.jpg 0  # CPU
infer_ppyoloe_demo.exe ppyoloe_crn_l_300e_coco 000000014439.jpg 1  # GPU
infer_ppyoloe_demo.exe ppyoloe_crn_l_300e_coco 000000014439.jpg 2  # GPU + TensorRT

特别说明,exe运行时所需要的依赖库配置方法,请参考章节: 多种方法配置exe运行时所需的依赖库

3.2 SDK使用方式二:Visual Studio 2019 创建 sln 工程使用 C++ SDK

本章节针对非CMake用户,介绍如何在Visual Studio 2019 中创建 sln 工程使用 FastDeploy C++ SDK. CMake用户请直接看下一章节。另外,本章节内容特别感谢“梦醒南天”同学关于FastDeploy使用的文档教程:如何在 Windows 上使用 FastDeploy C++ 部署 PaddleDetection 目标检测模型

3.2.1 步骤一:Visual Studio 2019 创建 sln 工程项目

(1) 打开Visual Studio 2019,点击"创建新项目"->点击"控制台程序",从而创建新的sln工程项目.

image

image

(2)点击“创建”,便创建了一个空的sln工程。我们直接从examples里面拷贝infer_ppyoloe的代码这里。

image

3.2.2 步骤二:从examples中拷贝infer_ppyoloe.cc的代码到工程

(1)从examples中拷贝infer_ppyoloe.cc的代码到工程,直接替换即可,拷贝代码的路径为:

fastdeploy-win-x64-gpu-0.2.1\examples\vision\detection\paddledetection\cpp

image

3.2.3 步骤三:将工程配置设置成"Release x64"配置

image

3.2.4 步骤四:配置头文件include路径

(1)配置头文件include路径:鼠标选择项目,然后单击右键即可弹出下来菜单,在其中单击“属性”。

image

(2)在弹出来的属性页中选择:C/C++ —> 常规 —> 附加包含目录,然后在添加 fastdeploy 和 opencv 的头文件路径。如:

D:\qiuyanjun\fastdeploy_build\built\fastdeploy-win-x64-gpu-0.2.1\include
D:\qiuyanjun\fastdeploy_build\built\fastdeploy-win-x64-gpu-0.2.1\third_libs\install\opencv-win-x64-3.4.16\build\include  

注意,如果是自行编译最新的SDK或版本>0.2.1,依赖库目录结构有所变动,opencv路径需要做出适当的修改。如:

D:\qiuyanjun\fastdeploy_build\built\fastdeploy-win-x64-gpu-0.2.1\third_libs\install\opencv\build\include  

image

用户需要根据自己实际的sdk路径稍作修改。

3.2.5 步骤五:配置lib路径和添加库文件

(1)属性页中选择:链接器—>常规—> 附加库目录,然后在添加 fastdeploy 和 opencv 的lib路径。如:

D:\qiuyanjun\fastdeploy_build\built\fastdeploy-win-x64-gpu-0.2.1\lib
D:\qiuyanjun\fastdeploy_build\built\fastdeploy-win-x64-gpu-0.2.1\third_libs\install\opencv-win-x64-3.4.16\build\x64\vc15\lib

注意,如果是自行编译最新的SDK或版本>0.2.1,依赖库目录结构有所变动,opencv路径需要做出适当的修改。如:

D:\qiuyanjun\fastdeploy_build\built\fastdeploy-win-x64-gpu-0.2.1\third_libs\install\opencv\build\include  

image

(2)添加库文件:只需要 fastdeploy.lib 和 opencv_world3416.lib

image

3.2.6 步骤六:编译工程并运行获取结果

(1)点击菜单栏“生成”->“生成解决方案”

image

image

编译成功,可以看到exe保存在:

D:\qiuyanjun\fastdeploy_test\infer_ppyoloe\x64\Release\infer_ppyoloe.exe  

(2)执行可执行文件,获得推理结果。 首先需要拷贝所有的dll到exe所在的目录下。同时,也需要把ppyoloe的模型文件和测试图片下载解压缩后,拷贝到exe所在的目录。 特别说明,exe运行时所需要的依赖库配置方法,请参考章节: 多种方法配置exe运行时所需的依赖库

image

3.3 SDK使用方式三:Visual Studio 2019 创建 CMake 工程使用 C++ SDK

本章节针对CMake用户,介绍如何在Visual Studio 2019 中创建 CMake 工程使用 FastDeploy C++ SDK.

3.3.1 步骤一:Visual Studio 2019 创建“CMake”工程项目

(1)打开Visual Studio 2019,点击"创建新项目"->点击"CMake",从而创建CMake工程项目。以PPYOLOE为例,来说明如何在Visual Studio 2019 IDE中使用FastDeploy C++ SDK.

image

image

image

(2)打开工程发现,Visual Stuio 2019已经为我们生成了一些基本的文件,其中包括CMakeLists.txt。infer_ppyoloe.h头文件这里实际上用不到,我们可以直接删除。

image

3.3.2 步骤二:在CMakeLists中配置 FastDeploy C++ SDK

(1)在工程创建完成后,我们需要添加infer_ppyoloe推理源码,并修改CMakeLists.txt,修改如下:

image

(2)其中infer_ppyoloe.cpp的代码可以直接从examples中的代码拷贝过来:

(3)CMakeLists.txt主要包括配置FastDeploy C++ SDK的路径,如果是GPU版本的SDK,还需要配置CUDA_DIRECTORY为CUDA的安装路径,CMakeLists.txt的配置如下:

project(infer_ppyoloe_demo C CXX)
cmake_minimum_required(VERSION 3.12)

# Only support "Release" mode now  
set(CMAKE_BUILD_TYPE "Release")

# Set FastDeploy install dir
set(FASTDEPLOY_INSTALL_DIR "D:/qiuyanjun/fastdeploy-win-x64-gpu-0.2.1"
    CACHE PATH "Path to downloaded or built fastdeploy sdk.")

# Set CUDA_DIRECTORY (CUDA 11.x) for GPU SDK
set(CUDA_DIRECTORY "C:/Program Files/NVIDIA GPU Computing Toolkit/CUDA/v11.7"
    CACHE PATH "Path to installed CUDA Toolkit.")

include(${FASTDEPLOY_INSTALL_DIR}/FastDeploy.cmake)

include_directories(${FASTDEPLOY_INCS})

add_executable(infer_ppyoloe_demo ${PROJECT_SOURCE_DIR}/infer_ppyoloe.cpp)
target_link_libraries(infer_ppyoloe_demo ${FASTDEPLOY_LIBS})  

# Optional: install all DLLs to binary dir.
install_fastdeploy_libraries(${CMAKE_CURRENT_BINARY_DIR}/Release)

注意,install_fastdeploy_libraries函数仅在最新的代码编译的SDK或版本>0.2.1下有效。

3.3.3 步骤三:生成工程缓存并修改CMakeSetting.json配置

(1)点击"CMakeLists.txt"->右键点击"生成缓存":

image

发现已经成功生成缓存了,但是由于打开工程时,默认是Debug模式,我们发现exe和缓存保存路径还是Debug模式下的。 我们可以先修改CMake的设置为Release.

(2)点击"CMakeLists.txt"->右键点击"infer_ppyoloe_demo的cmake设置",进入CMakeSettings.json的设置面板,把其中的Debug设置修改为Release.

image

同时设置CMake生成器为 "Visual Studio 16 2019 Win64"

image

(3)点击保存CMake缓存以切换为Release配置:

image

(4):(4.1)点击"CMakeLists.txt"->右键"CMake缓存仅限x64-Release"->"点击删除缓存";(4.2)点击"CMakeLists.txt"->"生成缓存";(4.3)如果在步骤一发现删除缓存的选项是灰色的可以直接点击"CMakeLists.txt"->"生成",若生成失败则可以重复尝试(4.1)和(4。2)

image

最终可以看到,配置已经成功生成Relase模式下的CMake缓存了。

image

3.3.4 步骤四:生成可执行文件,运行获取结果。

(1)点击"CMakeLists.txt"->"生成"。可以发现已经成功生成了infer_ppyoloe_demo.exe,并保存在out/build/x64-Release/Release目录下。

image

(2)执行可执行文件,获得推理结果。 首先需要拷贝所有的dll到exe所在的目录下,这里我们可以在CMakeLists.txt添加一下命令,可将FastDeploy中所有的dll安装到指定的目录。注意,该方式仅在最新的代码编译的SDK或版本>0.2.1下有效。其他配置方式,请参考章节: 多种方法配置exe运行时所需的依赖库

install_fastdeploy_libraries(${CMAKE_CURRENT_BINARY_DIR}/Release)

(3)同时,也需要把ppyoloe的模型文件和测试图片下载解压缩后,拷贝到exe所在的目录。 准备完成后,目录结构如下:

image

(4)最后,执行以下命令获得推理结果:

D:\xxxinfer_ppyoloe\out\build\x64-Release\Release>infer_ppyoloe_demo.exe ppyoloe_crn_l_300e_coco 000000014439.jpg 0
[INFO] fastdeploy/runtime.cc(304)::fastdeploy::Runtime::Init    Runtime initialized with Backend::OPENVINO in Device::CPU.
DetectionResult: [xmin, ymin, xmax, ymax, score, label_id]
415.047180,89.311569, 506.009613, 283.863098, 0.950423, 0
163.665710,81.914932, 198.585342, 166.760895, 0.896433, 0
581.788635,113.027618, 612.623474, 198.521713, 0.842596, 0
267.217224,89.777306, 298.796051, 169.361526, 0.837951, 0
......
153.301407,123.233757, 177.130539, 164.558350, 0.066697, 60
505.887604,140.919601, 523.167236, 151.875336, 0.084912, 67

Visualized result saved in ./vis_result.jpg

打开保存的图片查看可视化结果: