我正在使用来自AlexeyAB 的 Darknet 分支的YOLOv3 和 YOLOv3-Tiny 。我知道图像大小必须是 32 的倍数。除以batch
决定subdivisions
并行处理的图像数量。
例如,默认的 yolov3.cfg 文件中的批量大小为64
,细分为16
,这意味着一次将加载 4 个图像,并且需要其中 16 个小批量才能完成一次迭代。
我在 wiki 中没有看到记录的内容:
这些值有限制吗? 它们必须是 16 的倍数吗?2 的幂?我可以有batch=25
和subdivisions=5
吗?
我相信它不一定是 2 的幂,重要的是它batch
必须可以被整除,subdivisions
因为代码使用小批量,正如您在parcer.cbatch / subdivisions
中看到的那样:
net->batch /= subdivs;
那么每一步处理的图像数量定义为detector.c:
int imgs = net.batch * net.subdivisions * ngpus;
虽然dark_cuda.hBLOCK
中定义的是 512,但内核中使用的值不必能被 2 整除,如dark_cuda.c中所示:num_blocks
int get_number_of_blocks(int array_size, int block_size)
{
return array_size / block_size + ((array_size % block_size > 0) ? 1 : 0);
}
Run Code Online (Sandbox Code Playgroud)
我认为唯一的问题可能是性能问题,因为 CUDA 以 32 为单位运行,因此任何不是 2 倍数的数字都可能导致部分已用内存未得到充分利用。
但是,我建议您尝试使用这些参数来训练您的网络,以确认其按预期工作。
归档时间: |
|
查看次数: |
12040 次 |
最近记录: |