欢迎光临散文网 会员登陆 & 注册

【第八节】程序性能检测及优化

2022-11-16 18:27 作者:海鸥之道  | 我要投稿

目标

        在图像处理中你每秒钟都要做大量的运算,所以你的程序不仅要能给出正确的结果,同时还必须要快。所以这节我们将要学习:

  • 检测程序的效率

  • 一些能够提高程序效率的技巧

  • 你要学到的函数有: CV2.getTickCount,CV2.getTickFrequency等

        除了OpenCV, Python 也提供了一个叫time的的模块,你可以用它来测量程序的运行时间。另外-个叫做profile的模块会帮你得到--份关于你的程序的详细报告,其中包含了代码中每个函数运行需要的时间,以及每个函数被调用的次数。如果你正在使用IPython的话,所有这些特点都被以-种用户友好的方式整合在一起了。我们会学习几个重要的,要想学到更加详细的知识就打开更多资源中的链接吧。

1、使用OpenCV检测程序效率

        CV2.getTickCount函数返回从参考点到这个函数被执行的时钟数。所以当你在一个函数执行前后都调用它的话,你就会得到这个函数的执行时间(时钟数)。

        CV2.getTickFrequency返回时钟频率,或者说每秒钟的时钟数。所以你可以按照下面的方式得到一个函数运行了多少秒:

        我们将会用下面的例子演示。下面的例子使用窗口大小不同(5,7,9)的核函数来做中值滤波:

2、OpenCV中的默认优化

        OpenCV中的很多函数都被优化过(使用SSE2, AVX等)。也包含一些没有被优化的代码。如果我们的系统支持优化的话要尽量利用只一点。在编译时优化是被默认开启的。因此OpenCV运行的就是优化后的代码,如果你把优化关闭的话就只能执行低效的代码了。你可以使用函数CV2.useOptimized()来查看优化是否被开启了,使用函数CV2.setUseOptimized()来开启优化。

3、更多 IPython的魔法命令

    还有几个魔法命令可以用来检测程序的效率,profiling, line profiling,内存使用等。他们都有完善的文档。所以这里只提供了超链接。感兴趣的可以自己学习一下。

4、 效率优化技术

        有些技术和编程方法可以让我们最大的发挥Python和Numpy的威力。我们这里仅仅提一下相关的,你可以通过超链接查找更多详细信息。我们要说的最重要的- -点是:首先用简单的方式实现你的算法(结果正确最重要),当结果正确后,再使用上面的提到的方法找到程序的瓶颈来优化它。

  1. 尽量避免使用循环,尤其双层三层循环,它们天生就是非常慢的。

  2. 算法中尽量使用向量操作,因为Numpy和OpenCV都对向量操作进行了优化。

  3. 利用高速缓存一致性。

  4. 没有必要的话就不要复制数组。使用视图来代替复制。数组复制是非常浪费资源的。

就算进行了上述优化,如果你的程序还是很慢,或者说大的训话不可避免的话,你应该尝试使用其他的包,比如说Cython,来加速你的程序。













【第八节】程序性能检测及优化的评论 (共 条)

分享到微博请遵守国家法律