YOLOv3中的批次和细分

问题描述 投票:2回答:1

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

例如,默认yolov3.cfg文件中的批处理大小为64,细分为16,这意味着将一次加载4张图像,并且需要这些迷你批处理中的16个来完成一次迭代。

我没看到的in the wiki

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

yolo darknet
1个回答
0
投票

我相信不一定必须是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的倍数的数字都可能导致部分已用内存未被充分利用。

但是,我建议您尝试使用这些参数来训练您的网络,以确保其可以正常工作。

© www.soinside.com 2019 - 2024. All rights reserved.