我是Halide的初学者,我试着用它来加速伪装。
到目前为止,与c版本相比,性能确实很好。然后,我遇到了一个困扰我几天的问题:非最大抑制(Nms),这是一个经典的算法,但我没有在卤化物中找到类似的例子,总结如下:
首先对数组框进行排序,然后对方框中的每一个I进行排序,从i+1到该数组的末尾,用boxi计算重叠,然后保留它或根据重叠删除它。能在卤化物中实现吗?我是否必须使用定义::extern?如果有人能回答的话,请多多指摘。
最新情况:
对不起,我没有很好地解释这个问题。MaskRcnn中的非最大抑制与Canny边缘检测器中的非最大值抑制略有不同,您可以参考以下内容:
https://www.pyimagesearch.com/2015/02/16/faster-non-maximum-suppression-python/
其中python代码是这种算法的实现。
如果时间太长,想想这个简单的问题:
对于数组a10= {1,2,3,4,5 ,6,7,8,9,10},我们需要计算ai和j之间的乘积,如果这个乘积值小于6(例如),那么我们删除aj,在范围0,9中对所有i迭代这个操作。谢谢。
发布于 2017-10-31 17:55:18
WRT非最大抑制:快速查看维基百科和这个演示文稿(detection.pdf),让我对算法的功能有一些了解。我不知道如何确定边缘方向,但我认为这可能会有帮助:
假设一个简单的过滤器(x +/- 1,y +/- 1),Halide可以使用一个RDom找到这组值的最大值。把结果打给麦克斯。创建一个系数的过滤器使用最大值-一个1和0的过滤器。把系数乘以原始矩阵,你就应该有非最小抑制.
系数滤波器可以通过使用MAX(符号)(像素- (MAX - 1)),0来创建,其中像素值是无符号的。本质上,使用无符号减法和饱和从原始值中减去MAX-1 .过滤器的结果是一个1和0的数组。
正如您所看到的,在Halide中创建这样的算法并不特别困难;实际上,要理清像“重叠”这样的术语的含义要困难得多。希望这能让你知道该怎么做。
祝你好运,-Phil
https://stackoverflow.com/questions/47020346
复制相似问题