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