我一直在玩 iPhone 上的 GrabCut 算法(在 OpenCV 中实现)。表演是可怕的。即使在模拟器上运行大约 800x800 的图像也需要大约 10-15 秒。在我的手机上它运行了几分钟,最终内存不足并崩溃(iPhone 4)。我敢肯定,如果我用 C 编写自己的算法版本,我可能会做一些优化,但我觉得再多的优化都不会让它接近可用。我在一些学术论文中挖掘了一些性能测量,甚至他们在多核 1.8 ghz CPU 上看到了 30 秒的运行时间。
所以我唯一的希望是 GPU,我对此一无所知。到目前为止,我已经对 OpenGL ES 进行了一些基础研究,但这是一个非常深入的话题,我不想浪费数小时或数天来学习基本概念,以便了解我是否在正确的道路。
所以我的问题是双重的:
1) 像 GrabCut 这样的东西可以在 GPU 上运行吗?如果是这样,我希望有一个“学习 OpenGL ES”以外的起点。理想情况下,我想知道我需要特别注意哪些概念。请记住,我没有使用 OpenGL 的经验,也没有图像处理方面的经验。
2)即使这种算法可以在GPU上运行,我应该期待什么样的性能提升?考虑到当前的运行时间在 CPU 上的最佳时间约为 30 秒,GPU 似乎不太可能在运行时间中产生足够大的凹痕以使算法有用。
编辑:为了让算法“有用”,我认为它必须在 10 秒或更短的时间内运行。
提前致谢。