object-detection - 是否可以通过减少对象类的数量来显着减少图像的推理时间?

标签 object-detection yolo

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

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

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

最佳答案

Change is number of classes doesn't have significant impact on inference time.

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

Snapshot of Yolo layer

这里:

filters=(classes + 5)x3

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

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

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

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

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

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

关于object-detection - 是否可以通过减少对象类的数量来显着减少图像的推理时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63076707/

相关文章:

yolo - 在暗网上训练时 map /图表没有出现?

machine-learning - 无法理解 YOLOv4 架构

c++ - 如何使用 HOG 描述符检测图像中的对象?

用于目标检测的 OpenCV 图像预处理

tensorflow - fast-rcnn 目标检测中的误报

yolo - 如何在 ML.Net 中对 yolo v3 或 v4 onnx 模型实现后处理

javascript - 我们如何为使用YOLO检测到的不同对象设置不同的 `colors`

tensorflow - 图像评估中的张量板边界框限制

image-processing - 对定向梯度直方图的理解

machine-learning - 树莓派上的 SSD 或 YOLO