在没有并行处理工具包的情况下在 MATLAB 中对非常大的图像集进行图像处理的并行化

Parallelization of image processing on very large image set in MATLAB without Parallel Processing Toolkit

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

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

您可以在 Windows 中的 Cygwin 下安装 GNU Parallel - 如果您 Google 有很多教程和博客描述该过程。

首先,我guessing/hoping下面的命令将从命令行处理一个这样的图像,所以在你进入下一步之前做个小实验看看它是否有效

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;"