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

У меня есть два входных изображения (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?

1 Ответ

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

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

batch (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);

...