【问题标题】:Is it possible to significantly reduce the inference time of images by reducing the number of object classes?是否可以通过减少对象类的数量来显着减少图像的推理时间?
【发布时间】:2020-07-24 15:28:36
【问题描述】:

我正在使用 YOLOv4 来训练我的自定义检测器。来源:https://github.com/AlexeyAB/darknet

训练时的问题之一是 GPU 的计算能力和可用的视频 RAM。对象类的数量与训练模型所需的时间之间有什么关系?此外,是否可以通过减少对象类别的数量来显着减少图像的推理时间?目标是在 Raspberry Pi 或 Jetson Nano 上运行推理。

非常感谢任何帮助。谢谢。

【问题讨论】:

  • 课程越少,一般来说越容易训练。我不确定暗网是如何工作的,如果它在有更多类时使用更多层。还是您选择层数?如果是这样,请尝试使用更少的类来减少层数。更少的层数意味着更快的模型。
  • 感谢您的回复。据我所知,我们可以选择图层。我使用的是有 38 层的 YOLO tiny,而标准的 YOLO 有大约 110 层。我有8节课。我觉得结果没有我想要的那么好。我可能会参加标准的 YOLO 培训。
  • 减少类的数量只会影响预测 (YOLO) 层中的计算。在计算上,其他层仅保持不变。当您考虑像 YOLOv4 这样的密集模型时,它根本不重要。您还可以在处理能力有限的 Tiny-YOLOv4(Jetson Nano、rasp pi 等)并且想要更轻的模型。

标签: object-detection yolo


【解决方案1】:

变化是类的数量对 推理时间。

例如对于Yolov4,它有3个Yolo层,类的变化会导致conv层之前的conv层的filter size变化@层和一些Yolo 层内的计算减少就是这样。与整体推理时间相比,这非常短,因为Yolo 层之前的conv 层是具有非常小的宽度和高度的底层,而且花费在取决于Yolo 层内的类数量的逻辑上的时间也非常少。

这里:

filters=(classes + 5)x3

请注意,更小的 yolov4 版本,即 tiny-yolov4 只有两个 Yolo 层,而不是 3 个。

如果您的目的是减少推理时间,尤其是在 raspberry pi 或 jetson nano 上,而不损失准确性/mAP,请执行以下操作:

  • 量化:使用INT8 而不是FP32 运行推理。您可以为此目的使用此repo。您可以对 Jetson nano 和 raspberry pi 执行此操作。

  • 使用推理库,例如 tkDNN,这是一个使用 cuDNNtensorRT 原语构建的深度神经网络库,特别适用于 NVIDIA Jetson 板。您可以将其用于 Jetson nano。请注意,对于TensorRT,您可以使用INT8FP16 而不是FP32 来减少检测时间。

以下技术可用于减少推理时间,但它们的代价是准确度/mAP 显着下降:

  • 您可以使用更小的版本而不是完整的 Yolo 版本来训练模型。
  • 模型修剪 - 如果您可以根据神经元的贡献程度对网络中的神经元进行排名,那么您可以从网络中移除排名较低的神经元,从而形成更小更快的网络。修剪 yolov3 研究 paperimplementationThis 是另一个经过修剪的 Yolov3 实现。

【讨论】:

    【解决方案2】:

    我尝试在 YOLOv3 上将类别数量从 80 个减少到 5 个,我的目标是仅检测车辆,发现时间减少了。例如,使用 Intel Core i5-6300U CPU @ 2.40 GHz,时间减少了 50%,而对于 Nvidia GeForce 930M,时间减少了 20%。通常,处理器越强大,您减少的时间就越少。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-11-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-18
      • 1970-01-01
      • 2017-05-04
      • 2011-05-27
      相关资源
      最近更新 更多