партия и подразделения в YOLOv3 - PullRequest
2 голосов
/ 12 октября 2019

Я использую YOLOv3 и YOLOv3-Tiny из AlexeyAB форка Darknet . Я понимаю, что размер изображения должен быть кратным 32. И batch, деленное на subdivisions, определяет количество изображений, которые будут обрабатываться параллельно.

Например, размер пакета по умолчаниюФайл yolov3.cfg имеет значение 64, а подразделение - 16, что означает одновременную загрузку 4 изображений, и для выполнения одной итерации потребуется 16 таких мини-пакетов.

Что я не делаюсм. документально в вики :

Есть ли ограничения для этих значений? Должны ли они быть кратными 16? Мощность 2? Могу ли я иметь batch=25 и subdivisions=5?

1 Ответ

2 голосов
/ 26 октября 2019

Я считаю, что это не обязательно быть степенью 2, важно то, что batch должно делиться на subdivisions, так как код использует небольшие партии batch / subdivisions, как вы можете видеть в parcer.c :

net->batch /= subdivs;

, тогда количество изображений, обрабатываемых на каждом шаге, определяется как в detector.c :

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

Хотя значение BLOCK в dark_cuda.h равно 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, может стать причинойиспользованная память используется не полностью.

Тем не менее, я рекомендую вам попробовать настроить сеть с этими параметрами, чтобы убедиться, что она работает должным образом.

...