opencv 深度排序使用大量CPU

yhqotfr8  于 2023-06-06  发布在  其他
关注(0)|答案(2)|浏览(106)

我正在创建一个软件,它可以使用OpenCV在不同的线程中读取多个相机,然后使用YOLOv 4 Tensorflow模型在主线程中处理它们。这样,我的GPU运行在大约40%的容量上,我的CPU核心在gnome-system-monitor中也都在30-40%左右。
然而,当我集成深度排序时,GPU的使用率保持不变,但CPU负载在每个核心上都达到100%。
我的问题是,这正常吗?深度排序主要在CPU上运行吗?
我正在初始化并运行深度排序,就像在这个repo文件中一样:https://github.com/theAIGuysCode/yolov4-deepsort/blob/9e745bfb3ea5e7c7505cb11a8e8654f5b1319ad9/object_tracker.py#L48
使用:

  • Ubuntu 18.04
  • Python 3.8
  • Tensorflow 2.3.1
  • OpenCV Python 4.4.0.44
  • CUDA 10.1.243,cuDNN 7.6.5,带驱动程序418.152

工作站笔记本电脑规格:

  • NVIDIA RTX Quadro 5000
  • 英特尔®至强(R)E-2276 M CPU@2.80GHz × 12
  • 32 GB内存
voj3qocg

voj3qocg1#

不这不正常这是一个bug。查一下我的回购记录
https://github.com/mikel-brostrom/Yolov5_DeepSort_Pytorch/issues/48
您需要对HPC库使用的CPU进行限制,如下所示:

# limit the number of cpus used by high performance libraries
import os
os.environ["OMP_NUM_THREADS"] = "1"
os.environ["OPENBLAS_NUM_THREADS"] = "1"
os.environ["MKL_NUM_THREADS"] = "1"
os.environ["VECLIB_MAXIMUM_THREADS"] = "1"
os.environ["NUMEXPR_NUM_THREADS"] = "1"
8zzbczxx

8zzbczxx2#

在_cosine_distance中,numpy数组应该声明dtype。

if not data_is_normalized:
    a = np.asarray(a) / np.linalg.norm(a, axis=1, keepdims=True)
    b = np.asarray(b) / np.linalg.norm(b, axis=1, keepdims=True)

变更为:

if not data_is_normalized:
    a = np.array(a, dtype=np.float128) / np.linalg.norm(a, axis=1, keepdims=True)
    b = np.array(b, dtype=np.float128) / np.linalg.norm(b, axis=1, keepdims=True)

相关问题