Я считаю, что это не обязательно быть степенью 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, может стать причинойиспользованная память используется не полностью.
Тем не менее, я рекомендую вам попробовать настроить сеть с этими параметрами, чтобы убедиться, что она работает должным образом.