Есть ли способ сложить два входных изображения в один 4-мерный буфер в галоидном генераторе?

У меня есть два входных изображения (rgb) в моем конвейере генератора. Каждый из них проходит пользовательскую обрезку и изменяется до изображения NxNx3. Выход генератора Output<Buffer<float>> {"batch", 4}; // (N, N, 3 ,2) и я установил

batch(x, y, c, batch_size) = cast<float>(0); 
batch(x, y, c, 0) = image_1_resized(x, y, c);
batch(x, y, c, 1) = image_2_resized(x, y, c);

но когда я собираюсь скомпилировать это, происходит ошибка (я не могу получить полезную информацию об отладке). Если я попробую это:

clamped_image_1 = BoundaryConditions(image_1_resized, 0 ,{{0, N}, {0, N});

batch(x, y, c, batch_size) = cast<float>(0); 
batch(x, y, c, 0) = image_1_resized(x, y, c);
batch(x, y, c, 1) = clamped_image_1(x + 10, y, c);

Он компилируется и отлично работает. Мне любопытно узнать, возможно ли то, что я пытаюсь сделать, с помощью Halide?


person Oscar Argueta    schedule 25.09.2019    source источник


Ответы (1)


Вместо того, чтобы делать это как многоэтапную функцию, попробуйте использовать select для заполнения разных каналов на одном этапе.

пакет (x, y, c, n) = select (n == 0, image_1_resized (x, y, c), image_2_resized (x, y, c));

затем вы можете запланировать его, ограничив и развернув n, а halide удалит ветвление:

batch.bound(n, 0, 2).unroll(n);

person Mike Woodworth    schedule 26.09.2019