【问题标题】:Parallelization of image processing on very large image set in MATLAB without Parallel Processing Toolkit在没有并行处理工具包的 MATLAB 中对非常大的图像集进行图像处理的并行化
【发布时间】:2015-04-06 08:49:36
【问题描述】:

我有大约 2,500,000 张图像要在一台计算机上处​​理。我目前为我的函数的单个输出顺序运行输入图像(计算大约需要 5 秒)。这显然需要太多时间。我还可以采用哪些其他方法来加快流程?我曾想过启动多个 MATLAB 实例并在数据子集上运行每个实例,但我不确定我是否真的通过这种方法实现了并行性。提高整体速度的更好方法是什么?

【问题讨论】:

  • 试试看。除非您的 PC 内存不足,否则将其拆分为多个 matlab 实例应该会更快。
  • 在 SO 上搜索我的一些答案 GNU Parallel... 你在 Windows 上吗?
  • 如果你有 4 个内核,即 8 个线程,那么启动 4 个 MATLAB 实例可能只有效率,因为 MATLAB 在处理矩阵时会在内部进行一些多线程处理。
  • @MarkSetchell,我在 Windows 上,不幸的是我必须使用 MATLAB。是否可以将 GNU 与 MATLAB 并行使用?
  • 不要被多个线程争夺对单个 I/O 路径的访问权并降低吞吐量...

标签: image matlab parallel-processing


【解决方案1】:

由于似乎没有人提供帮助,我想我会尝试一下,看看是否可以让您开始一些并行化。我不使用 Windows 或 Matlab,所以它可能需要一些更正......所以,如果有人知道更好......请随时贡献。

您可以在 Windows 中的 Cygwin 下安装 GNU Parallel - 如果您使用 Google 搜索,会有大量教程和博客描述该过程。

首先,我猜测/希望下面的命令会从命令行处理一个这样的图像,所以在你进入下一步之前,先做一个小实验,看看这是否可行

matlab.exe -nodisplay -nosplash -nodesktop -r "run('mfile.m image.jpg');exit;"

然后,要并行运行,您需要生成一个包含所有 2,500,000 个 JPEG 的列表,看起来像这样

DIR /B /S | FINDSTR /I "*JPG$"

你需要把它输入到 GNU Parallel 中,像这样

DIR /B /S | FINDSTR /I "*JPG$" | parallel matlab.exe -nodisplay -nosplash -nodesktop -r "run('mfile.m {}');exit;"

显然,在一个虚拟目录上使用一些文件的副本对此进行测试,以免任何内容被破坏或覆盖。

正如@Daniel 建议的那样,启动 Matlab 存在开销,因此更改代码以处理作为参数提供的所有图像可能会更好,然后也许您可以将 2-8 个图像传递给 Matlab 的每次调用,例如每个 Matlab 作业有 4 张图像:

DIR /B /S | FINDSTR /I "*JPG$" | parallel -N 4 matlab.exe -nodisplay -nosplash -nodesktop -r "run('mfile.m {1} {2} {3} {4}');exit;"

【讨论】:

  • 这正是我用于长时间运行的 matlab 进程的方法,但开始为每个图像重新启动 matlab 是一个坏主意。此解决方案可能比顺序版本慢。我建议以每个 15 分钟到 1 小时的作业启动 Matlab,因此一次传递多个图像。
  • @Daniel 太棒了!非常感谢您的反馈。如果有必要,也许 OP 可以更改他的代码,以便为一次 Matlab 调用处理多个图像 - 我会相应地更新答案。
  • 非常感谢您的回复,这给了我一个很好的方向。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-10-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-18
  • 2023-03-30
  • 1970-01-01
相关资源
最近更新 更多