我的生成器管道中有两个输入图像(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来实现什么目标?
答案 0 :(得分:2)
与其将其作为多阶段功能进行操作,不如尝试使用select在单个阶段中填充不同的渠道。
批处理(x,y,c,n)= select(n == 0,image_1_resize(x,y,c),image_2_resize(x,y,c));
然后您可以通过绑定和展开n来安排它,而卤化物将删除分支:
batch.bound(n,0,2).unroll(n);