最近開始研究影像辨識的套件
於是找到一個目前非常火紅YOLO
其官方網站:https://pjreddie.com/darknet/yolo/
而其效果就如首頁這張圖
擁有相當高的mAP-50(越高越好)以及執行效率(越快越好)
官方的github連結:https://github.com/pjreddie/darknet
恩...就是一個說明很簡短的gitlab首頁
反而比較有名的是AlexeyAB的fork版本,github連結為:https://github.com/AlexeyAB/darknet
乍看之下真的會以為這個才是官方版本... XDD
底下的說明內容非常完整
所以目前也是以此版本下載進行測試,如下圖:
下載完後在build\darknet資料夾有幾個相關的方案檔,如下圖:
這裡有一篇大陸的介紹,算是相當完整:https://www.zhihu.com/appview/p/45845454
也是透過這篇才能比較順利的進行建置
但有些地方需要進行調整及差異的就在此補充說明
目前採用的開發IDE是MSVS2017(需安裝C++開發套件)
以及目標環境是windows10、Cuda10.0
Cuda 10.0的下載位置:https://developer.nvidia.com/cuda-downloads?target_os=Windows&target_arch=x86_64&target_version=10
以及所搭配的cuDNN:https://developer.nvidia.com/rdp/cudnn-download
以及該套件所需參考的openCV:https://sourceforge.net/projects/opencvlibrary/files/opencv-win/3.4.0/opencv-3.4.0-vc14_vc15.exe/download
由於開發的環境並沒有支援cuda的顯卡
因此在安裝Cuda 10.0時,可僅安裝相關的開發套件,如下圖:
一定要安裝development跟Visual Studio Integration
(其他應該都可以不用安裝)
而cuDNN下載後執行就進行解壓縮動作,解完資料夾如下:
這些資料夾內的檔案之後會需要進行搬移,等等再進行說明
OpenCV下載後執行也是進行解壓縮動作,解出來的資料夾如下:
待會兒會需要include跟x64這兩個資料夾的path,所以請把openCV放置在你認為適合的位置
接著用VS2017開啟darknet.sln會出現以下畫面:
由於原先該作者是用VS2015開發的,所以就點選確定進行專案升級
開啟後該方案會停在Debug、Win32的組態環境
對著方案右鍵,選擇組態管理員,將其組態改成release、x64
改完之後就可以進行建置,第一次建置會出現這樣的錯誤:
於是對著專案按右鍵->屬性,進行cuda path的設定:
預設的安裝位置會在:C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.0
設定完之後再進行建置:
會出現cudnn的error
這時候就將剛剛解壓縮的cudnn的三個資料夾bin、include、lib中的檔案(共三個檔案)
複製到cuda的安裝目錄:C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.0 相對應的資料夾內
cudnn\cuda\bin的cudnn64_7.dll 複製到 CUDA\v10.0\bin裡面
cudnn\cuda\bin的cudnn.h 複製到 CUDA\v10.0\include裡面
cudnn\cuda\lib\x64\cudnn.lib 複製到 CUDA\v10.0\lib\x64裡面
接著再進行建置:
會出現OpenCV的錯誤
於是再針對專案按右鍵->屬性,設定VC++目錄以及連結器
VC++目錄中,先在Include目錄加入OpenCV的include path
build\include、build\include\opencv、build\include\opencv2 這三個路徑
以及程式庫目錄中加入OpenCV的lib path
build\x64\vc14\lib 這一個路徑
接著在連結器的輸入頁面的其他相依性加入
opencv_world340.lib
以上都完成後再進行建置,就終於能建置成功了!
建置成功,會在專案的資料夾build\darknet\x64產生一個darknet.exe
即可透過該指令進行物件辨識的測試
該執行檔會依賴於build\darknet\x64裡面的pthreadGC2.dll、pthreadVC2.dll 這兩個元件
以及cudnn:cudnn64_7.dll、openCV:opencv_world340.dll、ffmpeg:opencv_ffmpeg340_64.dll
將這五個dll以及exe都放置於同一個資料夾中才能正常執行
目前測試採用coco資料集 以及 yolo3的model
所需的資料有:yolov3.weights、yolov3.cfg、coco.data、coco.names
yolov3.weights比較麻煩需上網下載:https://pjreddie.com/media/files/yolov3.weights
其他三個在下載的build\darknet\x64\cfg以及data資料夾中可找到
這些檔案的配置如下:
yolov3.cfg、yolov3.weights 放在與執行檔同一層資料夾
coco.data放在cfg資料夾
coco.names放在data資料夾
然後在build\darknet\x64\data的資料夾內有一個labels的資料夾
也要將該資料夾放置到目標的data資料夾裡面
利用命令提示字元執行
Bird2.png就是要進行影像辨識的檔名,放在與exe同一個目錄下
執行結果如下:
這樣就表示成功,花費了27.95 ms
辨識的結果會在執行目錄下產出一個predictions.jpg
以上就是建置darknet.sln產生出exe以及執行exe的方式
若要測試影片
則執行的命令如下:
darknet.exe detector demo cfg/coco.data yolov3.cfg yolov3.weights yourVideo.mp4
yourVideo.mp4就是你所要測試的影片檔
執行結果如下:
執行後會跳出一個新視窗,該視窗會顯示標記所有辨識到的物件
而原本的console視窗會不斷跳出辨識物件的資訊,以及辨識影片的FPS
這個darknet.exe的執行方法可以協助做第一步的影片測試
除了測試辨識效果外也能初步確認GPU顯卡的計算效能
算是相當方便!
重點提醒:若要測試影片檔,一定要將所參考的opencv_ffmpeg340_64.dll
放置到執行目錄,否則會出現如下的錯誤訊息:
會一直以為是CUDA參數錯誤的錯誤訊息... XDD
而下載中的另外一個方案yolo_cpp_dll.sln也是用一樣的方式建置
產出來的dll就能透過外部程式進行引用呼叫
下一篇再來介紹AlturosDestinations作者所提供C# Wrapper - Alturos.Yolo
版主你好,我在建置darknet時出現這個錯誤,懇請版主替我找到解決辦法。 MSB3721 命令 ""C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.0\bin\nvcc.exe" -gencode=arch=compute_30,code=\"sm_30,compute_30\" -gencode=arch=compute_75,code=\"sm_75,compute_75\" --use-local-env --cl-version 2015 -ccbin "D:\Visual Studio2015\VC\bin\x86_amd64" -x cu -IC:\opencv_3.0\opencv\build\include -I..\..\include -I..\..\3rdparty\include -I"C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.0\include" -I"C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.0\include" -I\include -I\include -I"C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.0\include" --keep-dir x64\Release -maxrregcount=0 --machine 64 --compile -cudart static -DCUDNN_HALF -DOPENCV -DCUDNN -D_TIMESPEC_DEFINED -D_SCL_SECURE_NO_WARNINGS -D_CRT_SECURE_NO_WARNINGS -D_CRT_RAND_S -DGPU -DWIN32 -DNDEBUG -D_CONSOLE -D_LIB -D_MBCS -Xcompiler "/EHsc /W3 /nologo /O2 /FS /Zi /MD " -o x64\Release\network_kernels.cu.obj "D:\darknet-master\src\network_kernels.cu"" 已結束,代碼為 1。
回覆刪除你提供的資訊有點少,你是依照我文章的步驟進行建置嗎? 目前看起來像是"C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.0\bin\nvcc.exe" 缺少了這個檔案nvcc.exe,是不是cuda沒安裝成功呢?
刪除'opencv2/core/version.hpp': No such file or directory darknet D:\2\darknet-master\src\image_opencv.cpp 'opencv2/opencv.hpp': No such file or directory darknet D:\2\darknet-master\src\http_stream.cpp
回覆刪除請問一下這兩個錯誤要如何解決
請問你有下載安裝OpenCV,並在darknet專案的程式庫目錄中加入OpenCV的lib path嗎?
刪除'opencv2/core/version.hpp': No such file or directory darknet D:\2\darknet-master\src\image_opencv.cpp 'opencv2/opencv.hpp': No such file or directory darknet D:\2\darknet-master\src\http_stream.cpp
回覆刪除請問一下這兩個錯誤要如何解決
您好:
回覆刪除我在進行第一次編譯時(更改組態)
出現這個錯誤訊息"並未將物件參考設定為物件的執行個體"
sorry~ 資訊太少,無法提供任何建議
刪除請問測試影片如何存檔?? 以目前測試結果看,分辨成功率並不高,不知版主有心得分享嗎? 謝謝~
回覆刪除目前的做法是將辨識結果一張一張影像保存起來,在用ffmpeg將連續的影像轉成影片。
刪除不知道你認為分辨成功率不高是指哪方面呢?
作者已經移除這則留言。
回覆刪除請問,已經照上述跑完opencv的部分卻出現錯誤無法開啟檔案cudnn.lib,該怎麼辦
回覆刪除你少裝了 CUDNN 補丁,抓來之後丟到相對應的 CUDA 目錄下的三個目錄即可(檔案不會重複所以可以直接資料夾覆蓋)
刪除作者已經移除這則留言。
回覆刪除不好意思,我想問如何能連接攝像頭,我輸入darknet.exe detector demo data\coco.data yolov3.cfg weights\yolov3.weights,但執行時出現CUDA-version: 10000 (10020), cuDNN: 7.6.5, CUDNN_HALF=1, GPU count: 1
回覆刪除OpenCV version: 3.4.0
Couldn't open file: data\coco.data
看起來是找不到data目錄裡的coco.data檔案?
刪除你好怎麼使用darknet_video.py檔案?
回覆刪除你好,我這邊不是使用python教學呦。
刪除作者已經移除這則留言。
回覆刪除作者已經移除這則留言。
回覆刪除作者您好我想請問一下我照著方法建置後執行完卻發生Couldn't open file: cfg/coco.data 這個問題,想請問是因為我路徑沒有設定好嗎還是coco.data的路徑不對呢?
回覆刪除請問你coco.data有放在cfg資料夾裡面嗎?
刪除原本的cfg中就有一個coco.data了所以我就沒在動,還是我應該要去下載MSCOCO的data檔呢?
刪除那你data資料夾裡面有coco.names的檔案嗎?
刪除作者您好,我也遇到了相同的問題,data資料夾裡有coco.names的檔案,想請問應該如何解決呢?
刪除作者已經移除這則留言。
回覆刪除你好, 我嘗試在CPU上運行yolo但發現影片非常的慢.... FPS 只有0.5 , 請問這是我電腦的運算力問題嗎, 還是有地方可以調較速度? 謝謝
回覆刪除你是用什麼的CPU呢? 你可以參考我另外一篇FPS比較文:https://yy-programer.blogspot.com/2019/04/cpu-vs-gpuyolo-darknet-vs-tensorflow.html
刪除如果在CPU上想要有速度上的優化~建議可以參考我新一篇用emguCV導入yolo的方法:https://yy-programer.blogspot.com/2020/07/emgucv-dnn-yolov3.html#more
版大你好 全部照著步驟進行
回覆刪除最後執行時顯示"應用程式無法正確啟動(0x0000007b)"
用cmd執行darknet.exe 顯示"此應用程式無法在您的電腦執行 若要尋找適用您電腦的版本...","存取被拒"
環境是Win10(940MX) CUDA10.1 VS2015版
前面建置都很正常 無錯誤或警告訊息
版大你好 全部照著步驟進行
回覆刪除最後執行時顯示"應用程式無法正確啟動(0x0000007b)"
用cmd執行darknet.exe 顯示"此應用程式無法在您的電腦執行 若要尋找適用您電腦的版本...","存取被拒"
環境是Win10(940MX) CUDA10.1 VS2015版
前面建置都很正常 無錯誤或警告訊息