用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
感謝這位大牛!