YOLOv3 中的批次和细分

Posted

技术标签:

【中文标题】YOLOv3 中的批次和细分【英文标题】:batch and subdivisions in YOLOv3 【发布时间】:2020-02-09 19:34:47 【问题描述】:

我正在使用来自AlexeyAB's fork of Darknet 的 YOLOv3 和 YOLOv3-Tiny。我知道图像大小必须是 32 的倍数。batch 除以subdivisions 决定了将并行处理的图像数量。

例如,默认yolov3.cfg文件中的batch size为64,细分为16,即一次加载4张图片,需要16个mini batch完成一次迭代.

我没有看到记录在 in the wiki:

对这些值有限制吗?它们需要是 16 的倍数吗? 2的幂?我可以有batch=25subdivisions=5 吗?

【问题讨论】:

【参考方案1】:

我相信不是必须是 2 的幂,重要的是 batch 必须能被 subdivisions 整除,因为代码使用了小批量的 batch / subdivisions,正如您在 中看到的那样parcer.c

net->batch /= subdivs;

然后每一步处理的图像数量定义为detector.c

int imgs = net.batch * net.subdivisions * ngpus;

虽然在 dark_cuda.h 中定义的 BLOCK 是 512,但在内核中使用的 num_blocks 不必能被 2 整除,如 dark_cuda 中所示。 c

int get_number_of_blocks(int array_size, int block_size)

    return array_size / block_size + ((array_size % block_size > 0) ? 1 : 0);

我认为唯一的问题可能是性能问题,因为 CUDA 以 32 次循环运行,因此任何不是 2 的倍数的数字都可能导致部分已用内存未被充分利用。

但是,我建议您尝试使用这些参数训练您的网络,以确认其是否按预期工作。

【讨论】:

当批次不能被细分整除时,代码可以处理,以供参考。反正没什么大不了的!

以上是关于YOLOv3 中的批次和细分的主要内容,如果未能解决你的问题,请参考以下文章

从零开始学习YOLOv37. 教你在YOLOv3模型中添加Attention机制

[OpenCV实战]7 使用YOLOv3和OpenCV进行基于深度学习的目标检测

yolov3算法详解

经典论文解读YOLOv3 目标检测

YOLO算法之YOLOv3精讲

经典论文解读YOLOv3 目标检测