我正在尝试使用cvlib包,它使用yolov3模型来识别windows 10图像上的对象。让我们举一个简单的例子:
import cvlib as cv
import time
from cvlib.object_detection import draw_bbox
inittimer=time.time()
bbox, label, conf = cv.detect_common_objects(img,confidence=0.5,model='yolov3-worker',enable_gpu=True)
print('The process tooks %.3f s'%(time.time()-inittimer)
output_image = draw_bbox(img, bbox, label, conf)结果约为60ms。
cvlib使用opencv来计算cnn部分。
如果现在我尝试使用subprocess来查看GPU tensorflow使用了多少,结果只有824MiB。
当程序运行时,如果我启动nvidia-smi,它会显示以下结果:

如你所见,这里有更多的内存可用。我的问题很简单..为什么Cvlib (以及tensorflow)没有使用所有这些来提高检测时间?
编辑:
据我所知,cvlib使用tensorflow,但它也使用opencv检测器。我使用cmake和Cuda 10.2安装了opencv,我不知道为什么,但在nvidia-smi中,它是写的CUDA版本: 11.0,而不是。也许这就是问题的一部分?
发布于 2020-09-16 00:11:08
这样啊,原来是这么回事!问题来自于我为每个迭代创建了一个新的Net对象。
这里是github上的相关问题,你可以在那里关注它:https://github.com/opencv/opencv/issues/16348
使用自定义函数,它现在的工作速度约为60 fps。请注意,cvlib可能不是为了实时计算而做的。
发布于 2020-09-11 18:57:37
您可以验证opencv是否正在使用CUDA。这可以使用以下命令来完成
import cv2
print(cv2.cuda.getCudaEnabledDeviceCount())这应该会得到您的机器中支持CUDA的设备的数量。您还应该使用以下方法检查构建信息
import cv2
print cv2.getBuildInformation()以上两种情况的输出都可以指示您的opencv是否可以访问GPU。如果它不能访问GPU,那么你可以考虑重新安装。
发布于 2020-09-14 20:40:21
workon opencv_cuda
cd opencv
mkdir build
cd build
cmake -D CMAKE_BUILD_TYPE=RELEASE并分享结果。应该是这样的

https://stackoverflow.com/questions/63768916
复制相似问题