yolov4檢測識別不出目標的問題

用cmake編譯yolo4,並順利用生成的darknet.exe測試yolov4.weights模型,可以正常檢測出目標;

但是,用vs編譯yolo_cpp_dll 動態庫後,卻檢測不出目標,只會返回1000個參數全是0的bbox。

一開始懷疑是vs編譯yolo_cpp_dll 項目屬性沒有沒有設置好,但是檢查了多次之後,還是不行,在另外一臺電腦上同樣的項目屬性卻可以正常檢測出來。

其次懷疑是cudnn或者cuda,但是檢查了版本都符合官網要求。

搜索一通之後,網上有人說opencv4.1有問題,不能用,要用3.4版本的,但是在另一臺電腦也是4.1,也能檢測出來,況且cmake編譯出來的也是用的4.1.

繼續找,yolo使用gpu識別不出檢測框_始原始的博客-CSDN博客 這裏有和我可能相同的問題,說是顯卡1650算力不支持cudnn_half ,去掉之後,果然可以檢測出來了。我用cmake編譯的時候時間長忘了cudnn_half被關閉了,所以cmake編譯的可以正常檢測出來,但是檢測時間變長了。

所以RTX1650等的顯卡項目上不要去選了。。。

原文如下:

項目場景:
操作系統:windows10
硬件設備:RTX1650(其他可能出現該問題的顯卡:遊戲本顯卡1650,1660以及1660Ti)

問題描述
yolo系列運行成功後,在cpu中能跑出檢測框來,gpu中識別不出檢測框。
c語言代碼:

darknet_no_gpu.exe detect yolov3.cfg yolov3.weights dog.jpg
1
cpu用時:1148.185000 milli-seconds.

darknet.exe detect yolov3.cfg yolov3.weights dog.jpg
1
gpu用時:517.685000 milli-seconds.

python語言代碼:

python detect.py --weights yolov7.pt --source bus.jpg --no-trace --device cpu
1
cpu用時:(720.1ms) Inference

python detect.py --weights yolov7.pt --source bus.jpg --no-trace
1
gpu用時:(231.3ms) Inference

原因分析:
猜測原因:RTX1650沒有達到CUDNN_HALF使用要求

解決方案:
總結:需要關閉CUDNN_HALF
一、yolov3;Visual Studio 2019;c語言

方法一:右鍵屬性 -> C/C++ -> 預處理器定義 -> 刪除cudnn_half        
方法二:使用記事本打開darknet.vcxproj -> 編輯 -> 查找 ->刪除cudnn_half

二、yolov7;PyCharm Community Edition 2021;python語言
在主函數中添加:

torch.backends.cudnn.enabled = False

感謝這位大牛!

如遇其他問題,可去githubissue上查詢。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章