如何让灵闪的Task运行速度尽可能快?

Viewed 74

所有的项目都追求更快的算法执行速度,因为这通常都意味着更低的CT,更高的UPH。

也有很多项目,在配置Task的时候,可能因为“不小心”或者不熟悉灵闪算法工具的特性,导致了时间的浪费。也因此,可能导致项目中需要花费更高的成本采购更贵的CPU。

因此,这是一个有价值的问题。

2 Answers

优化的步骤

万事都讲究套路,有成熟的套路可以事半功倍。即使没套路,也得先总结套路。

第一步:仔细检查并删除没有用的工具

我们经常会在研发过程中做很多实验,在Task中配置很多实验性质的工具,探索解决问题的各种不同的可能性。

虽然探索的过程是快乐的,但,忘记“打扫卫生”的结果却是苦涩的。

所以,总是应该从仔细检查并删除没有用的工具开始,尽可能对Task进行瘦身,而且,更棒的是,这还是无痛的,因为执行结果不会改变,只是Task的运行耗时降低了。

第二步:根据工具耗时排行从前往后排查

解决问题一定要从重点开始,所以,总是从耗时最大的那个工具开始总是没错的。因为我们都不想花费大量的时间在那些受益很少的事情上,尤其是那些数量巨大,但耗时都小于0.1ms的工具。

现实中,我们总是抱怨,为什么被“收割”的总是穷人,为什么富人越是有钱却越是不容易被收割。所以,至少在优化Task性能的时候,我们应该从“富人”开始。

可参考的优化经验

ROI越小越好

对任何算法工具,ROI越小总是会让他越快。原来跑得比较慢的工具,ROI缩小带来的受益更大。

粗定位搭配缩小图像

在几乎所有的项目中,粗定位工具需要的图像,总是可以缩小的。因为粗定位的目标是为后续高精度定位的工具的ROI提供定位器,所以,它不需要亚像素的定位精度,甚至很多时候,有5个像素的偏差都是可以接受的。

所以,大胆地从缩小20%开始尝试,因为这个时候,额外增加的缩放工具所需的时间开销大概率远小于后续的粗定位工具减少的时间开销。

这个经验对使用模板定位工具来实现粗定位的项目有奇效。

组合ROI要避免大孔洞

组合ROI是很灵活好用的功能,尤其是检测目标的形状不规则,或有多个离散的区域的检测标准不同时。

但,当使用组合ROI的时候,需要特别注意最终组合得到的ROI是否存在巨大的孔洞,如果有,那么后续的算法可能会面临巨大的性能浪费。

因为后续的算法很可能还是收到了一个和组合ROI的包围盒一样大的图片,并在这个大图上执行了所有的步骤,并在得到最终结果后才根据组合ROI的实际有效范围对结果进行了过滤。

所以,如果组合ROI的结果存在孔洞时,要对其进行拆分,让后续的算法工具收到的图像中,有效区域的面积占比尽可能大一些,这样就不会浪费算力资源了。

在缩小的图上过滤出大目标

如果目前关心的目标大小总是比较大的,比如大于10*10像素,那么,总是可以把图像缩小,再设置更小的过滤面积或尺寸得到这个目标。

比如原图是1024 * 1024,关心的目标最小是10 * 10,此时缩小图像到原来50%,设置要过滤的目标大小是5 * 5,同样可以过滤出原图上 10 * 10 的目标。

当然,这样做虽然可以降低耗时到原来的25%左右(因为图像面积变成了原来的25%),但是,会让目标的面积或尺寸计算的精度下降,例如尺寸测量会下降一半的精度。所以,如果过滤目标大小的时候的精度要求没有那么高,这个方法是完全可行而实用的加速方法。

即使,真的还是需要达到更高的大小计算精度来过滤目标,那么,也可以在找到候选目标之后,再在目标局部设置一个比目标大的ROI,裁剪出局部的图像,在原始分辨率上,进行二次判断,满足高精度的要求。

image.png
开启灵闪高速模式