【问题标题】:How to improve YOLOv3 detection time? (OpenCV + Python)如何提高 YOLOv3 检测时间? (OpenCV + Python)
【发布时间】:2020-10-28 23:24:51
【问题描述】:

我正在使用 YOLOv3 自定义训练模型和使用 CUDA 编译的 OpenCV 4.2.0。当我在 Python 中测试代码时,我在 GPU (GTX1050 Ti) 上使用 OpenCV,但对单个图像 (416px x 416px) 的检测需要 0.055 秒 (~20 FPS)。我的配置文件设置为小对象检测,因为我需要在 2500 像素 x 2000 像素的图像上检测 ~ 10 像素 x 10 像素的对象,所以我将原始图像分成 30 个小块。我的目标是在 416px x 416px 图像上达到 0.013 秒(~80 FPS)。可以在 Python 中使用 OpenCV 吗?如果没有,如何正确处理?

PS。目前检测需要 50% 的 CPU、5GB RAM 和 6% 的 GPU。

【问题讨论】:

  • YOLOv3 不适用于较小的尺寸吗?有一个 YOLOv3-320 应该可以处理 320 x 320 的图像并且速度更快,不确定您是否想使用它来代替?
  • 320 x 320 图像意味着我需要对 50 个分割图像执行检测,因此我需要 125 FPS。我不知道这是否可能。首先,我不知道 Python 与 OpenCV 是否是一个好方法。
  • 我的意思是如果你有 CUDA 设置它不是 Python 问题。您可以尝试对其进行线程化,因为您的 GPU 似乎没有受到推理的影响。
  • 你有没有想过使用YOLOv5?
  • @MZ Python GIL 怎么样?我可以使用多处理,但我担心 RAM。我只有 16GB,单进程使用 ~5GB。 @yuRa 根据 YOLOv3 / 4 开发者 GitHub - The latest version - YOLOv4, with paper, with URLs from official repository, and with the best Accuracy/Speed among all known algorithms. YOLOv5-Ultralytics - is just a name, model is worse than YOLOv4, without improvements, without a scientific article, and with fake comparisons in a couple of blogs.

标签: python opencv darknet


【解决方案1】:

使用已经训练好的 Yolov3 模型改善检测时间的一些首选方法是:

  • 量化:使用 INT8 而不是 FP32 运行推理。为此,您可以使用此 repo
  • 使用推理加速器,例如 TensorRT,因为您使用的是 Nvidia 的 GPU。该工具包括大量面向推理的优化以及量化优化 INT8 和 FP16,以减少检测时间。这个thread 讨论了使用 TensorRT5 进行 Yolov3 推理。在 TensorRT7 上为 Yolov3 使用 this repo。
  • 使用推理库,例如 tkDNN,这是一个使用 cuDNN 和 tensorRT 原语构建的深度神经网络库,专门用于 NVIDIA Jetson Boards。

如果您愿意进行模型训练,除了上面提到的之外,还有其他选择:

  • 您可以使用更小的版本而不是完整的 Yolo 版本来训练模型,当然这是以降低准确性/mAP 为代价的。您可以训练tiny-yolov4(最新型号)或训练tiny-yolov3
  • 模型修剪 - 如果您可以根据神经元的贡献程度对网络中的神经元进行排名,那么您可以从网络中移除排名较低的神经元,从而形成更小更快的网络。修剪 yolov3 研究 paperimplementationThis 是另一个经过修剪的 Yolov3 实现。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-09-20
    • 2019-12-31
    • 1970-01-01
    • 1970-01-01
    • 2021-05-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多