我正在使用 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 内层数非常少。
这里:
filters=(classes + 5)x3
请注意 yolov4 的更小版本,即 tiny-yolov4只有两个 Yolo
层,而不是 3 个。
如果您的目的是减少推理时间,尤其是在树莓派或 jetson nano 上,而不损失准确性/mAP,请执行以下操作:
量化:使用
INT8
而不是FP32
运行推理。你可以用这个 repo以此目的。您可以为 Jetson nano 和 raspberry pi 执行此操作。使用推理库,例如 tkDNN ,这是一个使用
cuDNN
和tensorRT
原语构建的深度神经网络库,特别适合在 NVIDIA Jetson 板上运行。您可以将其用于 Jetson nano。请注意 TensorRT ,您可以使用INT8
和FP16
代替FP32
以减少检测时间。
以下技术可用于减少推理时间,但它们的代价是精度/mAP 显着下降:
- 您可以使用更小的版本而不是完整的 Yolo 版本来训练模型。
- 模型修剪 - 如果您可以根据神经元的贡献程度对网络中的神经元进行排名,则可以从网络中移除排名较低的神经元,从而使网络更小更快。修剪 yolov3 研究 paper它是 implementation . This是另一个经过修剪的 Yolov3 实现。
关于object-detection - 是否可以通过减少对象类的数量来显着减少图像的推理时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63076707/