【问题标题】:Can an image segmentation algorithm like GrabCut run on the iPhone GPU?像 GrabCut 这样的图像分割算法可以在 iPhone GPU 上运行吗?
【发布时间】:2012-08-31 06:54:37
【问题描述】:

我一直在玩 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 秒或更短的时间内运行。

提前致谢。

【问题讨论】:

  • 看来在GPU上“正常处理”是可能的。不幸的是,iPhone 还不支持 OpenCL,所以我仍然不确定从哪里开始,也不知道我可以期待什么样的性能改进。
  • 这是一个非常复杂的过程,要决定自己实施。 GPU 上的图像分割是相当多的研究主题,因此您可以从有关该主题的研究出版物开始:web.iiit.ac.in/~vibhavvinet/Research。如果没有实际硬件上的有效实现,也无法回答性能问题,因为您确实无法预测 iOS GPU 性能(我应该知道)。在 OpenGL ES 方面,您可以利用以下内容:github.com/BradLarson/GPUImage 为您处理较低级别的细节。

标签: ios image-processing gpu


【解决方案1】:

似乎grabcut 并没有从图像分辨率中受益。这意味着结果的质量并不直接取决于输入图像的质量。另一方面,性能受益于尺寸,这意味着图像越小,执行剪切的算法就越快。因此,尝试将图像缩小到 300x300,应用抓取,取出蒙版,将蒙版缩放到原始大小,然后将蒙版应用于原始图像以获得结果。让我知道它是否有效。

卢卡

【讨论】:

  • 这很有效。将我的计算时间从 11 天缩短到 3 天,得到的掩码仍然相当不错。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-01-17
  • 1970-01-01
  • 2014-01-02
  • 2019-10-19
  • 2016-11-17
  • 2014-12-01
  • 2020-08-05
相关资源
最近更新 更多