如何使用graphpad做柱形图_系列文章 如何使用PaddleDetection做一个完整项目(三)...
系列文章 如何使用PaddleDetection做一個完整項目(三)
該文章是PaddleDetection的完結篇,請參考之前兩篇文章
https://zhuanlan.zhihu.com/p/106981555?zhuanlan.zhihu.comhttps://zhuanlan.zhihu.com/p/111807886?zhuanlan.zhihu.com本文將針對如何使用PaddleDetection中C++預測庫的編譯,封裝,調用進行說明。
- 如何進行C++預測的編譯(生成.sln解決方案);
- 如何將C++預測代碼封裝成一個dll;
- 如何使用python調用生成好的dll;
- 如何使用C#調用生成好的dll;
如何進行C++預測代碼的編譯(生成.sln解決方案)
使用工具:Cmake vs2019社區版 Git(提前下載好git,不然在后期編譯過程中會不成功)
預測代碼來源:https://github.com/PaddlePaddle/PaddleDetection/tree/master (注意選擇master分支)
依賴庫:
Opencv:選擇3.4.6版本
https://sourceforge.net/projects/opencvlibrary/files/3.4.6/opencv-3.4.6-vc14_vc15.exe/download?sourceforge.netPaddle預測庫:選擇win10下的cuda10版本。
安裝與編譯 Windows 預測庫?www.paddlepaddle.org.cn一、首先將上述需要依賴的opencv和預測庫,PaddleDetection下載好,并保存在某個文件夾中。如下圖是作者存放的一個文件夾。
二、將opencv添加到環境變量里面,如下圖所示。
三、利用Cmake軟件進行編譯。源碼路徑為cpp文件所在目錄,應為里面有CMakeLists.txt文件,作者同時在該目錄下創建了新的文件夾/out用于生成編譯后的文件。
四、點擊config,選擇vs2019 X64選項后,點擊Generate
五、根據報錯進行修改,主要修改cuda_lib、opencv、paddle_dir路徑
六、再次點擊Generate
七、點擊open project,同時我們在out文件夾下發現了生成了解決方案。
八、針對“main”項目進行“重新生成”。同時一定要將模式配置成為Release
九、出現報錯
十、修改報錯---根據報錯,應該是編譯過程中,cudnn.lib尋找不正確。通過修改路徑實現。方式為點擊屬性--連接器--輸入--附加依賴項。
十一、改正上述錯誤后的正確的形式
十二、重新生成,如下圖是重新生成后的結果。
十二、運行該生成的main.exe文件。方式為打開out/release文件,會發現有一個main.exe文件。利用命令行打開后,運行即可。運行過程中需要添加模型的路徑以及預測圖像的路徑。
Ps#####此時此刻進行預測的模型是按照《系列文章 如何適用PaddleDetection實現一完整的項目(一)》中export.py文件形式導出“__model__”和“__params__”的形式,但是在后續paddle的升級過程中,export.py文件不僅僅會導出“__model__”和“__params__”,還會導出一個infer_cfg.yml的文件。作者在這個過程中,是使用PaddleDetection-release0.3版本進行導出的,因為作者之前安裝的paddle版本是1.7的,而目前的master分支是必須使用paddle2.0版本的。因此小伙伴們需要注意這個問題。
如下圖是所示的模型保存后的結果形式,作者依舊使用水果檢測的模型進行預測。
其中yml文件內容
十三、預測結果如下圖所示,我們看到輸出的結果中有檢測框的坐標、置信度、類別信息。
如下是在out文件夾生成的命名為“output.jpeg”的檢測后圖像
十四、對代碼進行一下小修改。之前我們需要在命令行中輸入圖像和模型的路徑,作者在代碼中添加圖像和模型的路徑,查看預測情況。修改如下:
十五、修改上述兩處代碼后,設置“設為啟動項目”,并點擊“本地windows調試器”
,直接查看輸出的結果。
至此,完成了第一步以及第一步的所有測試。
如何將C++預測代碼封裝成一個dll
將add_executable(main src/http://main.cc src/http://preprocess_op.cc src/http://object_detector.cc) 變成ADD_library(main SHARED src/http://main.cc src/http://preprocess_op.cc src/http://object_detector.cc)
六、然后我們繼續點擊“重新生成”,重新生成的dll就是下述步驟中我們即將調用的dll。
如何使用python調用生成好的dll;
在上一章節我們說了如何生成dll,這一章節,我們需要進行測試,在這里我們使用python進行測試,利用python調用dll。在生成的dll的文件中創建一個叫mian.py的python文件。
Python部分代碼如下:
from ctypes import * dll=CDLL("main.dll") print(dll.add(1,2)) print(dll.Loadmodel())運行python代碼,可以看到最終輸出結果如下圖:
至此說明利用python調用dll成功了。
如何使用C#調用生成好的dll;
在上一個章節中我們說了如何使用python調用dll,接著,我們嘗試使用C#調用一個dll,此方式為工業上經常使用的一種方式。
一、將C++release路徑下生成的文件全部復制到C#項目運行目錄下,在C++的release文件中,有一些文件只有dll,沒有對應的lib文件,這個時候,我們需要搜索到這些dll對應的lib文件,全部放在C#的運行目錄下。(PS#這些對應的文件都在我們下載的paddle預測庫中可以找到)
二、點擊“啟動按鈕”進行測試;
三、我們在C#的運行目錄下發現了生成了一張output.jpeg圖片,證明我們調用成功
至此,該系列文章基本上完成了從訓練到部署的所有流程,十分感謝在寫作過程中paddle同學的幫助,非常感謝高松鶴、梁鈺同學的大力幫助。后續會根據paddle針對C++預測的更新,繼續更新完善該文章。
如有問題,歡迎溝通,作者微信yzl819819
總結
以上是生活随笔為你收集整理的如何使用graphpad做柱形图_系列文章 如何使用PaddleDetection做一个完整项目(三)...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 我的世界手机版怎么邀请好友(汉典我字的基
- 下一篇: 我的世界精美别墅教程