问题标签 [halide]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
220 浏览

halide - 如何对卤化物中特定像素的邻域执行操作?

图像中有许多特定像素,我想在这些像素周围找到最小局部梯度。对于图像中的所有像素,我可以很容易地做到这一点:

但是如何为图像中的一组特定像素做到这一点呢?如果它们是有图案的,是否可以做这样的事情?:

假设 (x, y) 从 运行(0 .. n, 0 .. m)。我要达到的效果与将循环计数器增加大于 1 的步长相同。

另外,有没有办法记录最小梯度点的x,y坐标是什么?

0 投票
3 回答
1899 浏览

c++ - 卤化物中的可变域减少

现在我正在尝试编写一些对图像进行二次采样的卤化物代码。基本上,我希望将图像的每 2 x 2 平方缩小为一个包含最大值的像素。一个简单的例子是转换

进入

现在我正在尝试一些类似的东西(我知道这会给出总和而不是最大值,但这是同一过程的一个玩具示例):

但是,此代码无限运行。(我不确定为什么)。我知道我可以使用 Halide::RDom 来表示某个范围内的 reduce 操作。但是,在任何示例中,我发现您不能将变量传递给随机域对象。

编辑:

在玩了一些 Halide 之后,我能够构建这个:

最大减少 2x2。但是,当我把它放在一个循环中时,它不会调用,因为它不能被定义。无论如何,这是否可以减少域?

0 投票
1 回答
957 浏览

c++ - 卤化物“选择”而不评估两个参数

如您所知,您是否尝试过 Halide select(x,y,z); 类似于 C++ 中的三元运算符,其中 x 是条件 y(如果为真)和 z(如果为假)。

想象一下 y 只是返回 0 而 z 是一个非常昂贵的函数,跳过对 x 为假的 z 进行评估是有意义的,不幸的是,即使我设置了 select(x,likely(y),z); ,Halide 也会评估这两个术语;或者至少如果我使用 compile_to_file (.h + .lib)

对此有任何想法吗?

谢谢!

0 投票
1 回答
395 浏览

c++ - 归一化互相关期间卤化物挂起

我正在尝试在 Halide 中实现标准化互相关。

下面的代码构建,Halide JIT 编译不会抛出任何错误。但是,在 JIT 编译后,Halide 似乎挂起。无论trace_*我在不同的 Funcs 上进行了多少次调用,都只会打印一条迹线(在 上Func output):

任何建议都会有所帮助。

该算法等同于 OpenCV中的CV_TM_CCOEFF_NORMED 和 MATLAB 中的 normxcorr2 :

0 投票
2 回答
1595 浏览

c++ - C++ 数组到卤化物图像(和返回)

我开始使用 Halide,虽然我已经掌握了它设计的基本原则,但我正在努力解决有效安排计算所需的细节(阅读:魔法) 。

我在使用 Halide 将数组从一个位置复制到另一个位置的 MWE 下方发布。我曾假设这将编译成只有少数指令,并且运行时间不到一微秒。相反,它产生了 4000 条装配线,运行时间为 40 毫秒!因此,很明显,我的理解存在重大漏洞。

  1. 将现有数组包装在 a 中的规范方法是Halide::Image什么?
  2. 应该如何安排函数copy以有效地执行复制?

最小的工作示例

编译标志

0 投票
0 回答
368 浏览

c++ - Halide::Func 定义崩溃

我在将图像数据从 cv::Mat 获取到 Halide::Image 时遇到了一点问题。我正在使用 Visual Studio 2015 Community 开发 Windows 7,并使用 Halide for Windows 32bit 的可下载二进制文件。例子:

收到以下错误消息

我还尝试了使用普通 malloc 数据并将其提供给 Halid::Buffer 但得到了同样的错误。我想内存所有权存在一些问题,因为如果您尝试两次删除对象,可能会发生此错误,但我不确定这一点。这是卤化物中的错误还是我正在做某事。错误的?

编辑:调用堆栈

0 投票
1 回答
389 浏览

c++ - Halide中的递归函数调用

我正在使用卤化物并尝试计算给定二维输入的最大连接单元的大小。这个想法是使用递归函数,但我不知道如何用 Halide 语言编写它。

参考python脚本和预期结果如下。

Halide 实现在这里,但我收到下面的错误消息。

错误信息:

根据错误消息,我不能在右侧使用“x-1”和“x+1”。但我想这样做。有没有办法实现这样的递归 Func 调用?

*如果我能在 Halide 中得到预期的结果,我不会坚持递归调用。

0 投票
1 回答
638 浏览

halide - 在卤化物中混合int和float

我在 VS2013 中使用卤化物。我已经成功构建并运行了第一个教程。

我正在尝试实现我的一些代码,但不明白为什么它不会编译。代码如下:

错误发生在 m45(x, y) = ... 行中。显然, input_lum 不被视为浮点值。错误消息是“不存在从 Halide::Expr 到 float 的合适转换。”

显然所有的演员表和浮动数学都被忽略了。

(我知道我还没有初始化输入——我试图理解我在编写 Halide 代码时的思考方式,而类型推断让我很适应。)

我在这里做错了什么?

(如果不清楚,我只想获取 RGB 图像的亮度,并对亮度进行一些数学运算。如果可行,我会很高兴留在整数空间中。)

好的,我试验并尝试了这个:

现在编译了,但我不知道它在做什么。为什么 input_lum() 的类型不是浮点数?

0 投票
1 回答
274 浏览

halide - 嵌套选择行为和效率

我有四个功能 A、B、C、DI 希望交错((0,0)是左上角):

所以,我有类似的东西:

有没有更好(更有效)的方法来做到这一点?我注意到 A、B、C、D 也包含一些 select()(它们是非常非线性的函数。)

同样,我在 A 内部有这个结构:

Halide 会在选择之前生成计算 a0、a1 和 a2 的代码吗?我真的宁愿只为(x,y)的任何特定值计算选择的Func。

0 投票
1 回答
223 浏览

halide - “简单”卤化物程序在编译时会出现堆栈溢出

这是代码。我在 2015 年 8 月 5 日的 Win64 主干 VS2013 上使用 Halide。当我执行 diag.compile_to_lowered_stmt("diag.html", {}, HTML) 时,我在 halide.dll 中遇到堆栈溢出。

有任何想法吗?如果你想提供一个改进的时间表,我也很乐意接受——我只是想先运行一些基本的东西。

(我在 diag.compute_root() 之后添加了一个绑定对,但这似乎没有帮助。我确实想最终限制 diag 系数。)