【问题标题】:Is there a way to stack two input images into a single 4 dimensional buffer in a Halide Generator?有没有办法将两个输入图像堆叠到卤化物发生器中的单个 4 维缓冲区中?
【发布时间】:2019-09-25 21:12:24
【问题描述】:

我的生成器管道中有两个输入图像 (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);

它可以编译并且运行良好。我很想知道,如果我想用卤化物来完成我想要完成的事情吗?

【问题讨论】:

    标签: c++ halide


    【解决方案1】:

    不要将它作为一个多阶段函数来执行,而是尝试使用 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);

    【讨论】:

      猜你喜欢
      • 2021-07-17
      • 1970-01-01
      • 2014-04-03
      • 2013-02-09
      • 2018-07-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-02
      相关资源
      最近更新 更多