【问题标题】:Faster calculation histogram of a set of images一组图像的更快计算直方图
【发布时间】:2017-06-08 19:23:27
【问题描述】:

我有大约 300 万张图片,需要为每张图片计算直方图。现在我正在使用python,但它需要很多时间。有没有办法批量处理图像?我有 NVIDIA 1080 Ti GPU 卡,所以也许有办法在 GPU 上进行处理?

我找不到任何代码或库来并行处理图像。感谢您对提高速度的任何帮助

【问题讨论】:

  • 你没有说到目前为止你一直在尝试什么,所以很难说什么会更好。根据您的应用程序,也许您可​​以使用np.bincount 而不是np.histogram,这要快得多,因为它不会对任意浮点数和任意范围执行分箱。另外,您是否确认实际的直方图计算是您的瓶颈,而不是 I/O?
  • 到目前为止,我正在使用 for 循环,如我的问题中所述。我为每张图片调用numpy.histogram。关于查询的第二部分,是的,直方图计算是瓶颈。我正在做一些其他处理以及直方图计算。如果我注释掉直方图部分,代码运行良好。
  • np.histogram 对于这个特定的任务来说太慢了。在我的笔记本电脑上np.bincount 大约快 5 倍。 OpenCV 还有一个可能更快的直方图函数(我没试过)。 Here 是所有三种方法的示例。

标签: python-3.x numpy histogram


【解决方案1】:

Python 是您可以使用的最慢的生产就绪语言之一。

由于您没有发布任何代码,我只能提供一般性建议。它们按实用性排列如下:

  • 使用 Python 的编译版本,例如 pypy 或 cpython
  • 使用具有所需功能的现有软件。在线查找免费软件并没有错。
  • 使用更高效(甚至可能有损)的算法来跳过计算
  • 使用更快的语言,例如 Rust、C++、C# 或 Java

【讨论】:

    【解决方案2】:

    您是否尝试过多处理包来处理如此繁重的计算任务?因为我假设您不关心这些图像的处理顺序。

    示例使用将是:

    from multiprocessing import Pool 
    
    pool = Pool()
    results = pool.map(create_histogram, images)
    

    【讨论】:

    • 这种方法看起来很有希望。但是,除了直方图计算之外,我正在做更多的图像处理。我只想以上述方式运行直方图部分,因为这似乎是瓶颈。一旦执行进入Pool,它似乎就开始在各个线程中执行整个代码。
    猜你喜欢
    • 2014-04-05
    • 1970-01-01
    • 2021-06-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-03
    相关资源
    最近更新 更多