我们可以使用hadoop在多个图像上运行SIFT吗?
SIFT在每个图像上花费大约1秒来提取关键点及其描述符。考虑到每次运行都独立于其他运行,并且无法减少1次运行的运行时间,我们能否以任何方式减少运行时间?
多线程可以将运行时间减少一倍的核心处理器数量。我们可以在每个处理器上运行每个图像。
无论如何可以使用hadoop在多个图像上并行运行? 如果是,那么通过什么因素可以减少运行时假设我们有3个集群?
答案 0 :(得分:2)
是的,Hadoop可用于从多个图像中提取SIFT描述符。这是一个example of SIFT descriptor extraction for Hadoop using OpenIMAJ。
Hadoop将在所有群集节点上并行处理图像。但潜在的加速取决于图像数据集的大小。如果大小很小,则运行时可能会因Hadoop开销而增加。
您可能会遇到两个问题。
将图像复制到HDFS可能很慢。可以更快地处理一台计算机上的所有图像,然后将它们复制到HDFS并在3节点集群上进行处理。它取决于数据集的大小和集群中的节点数。
与HDFS块大小(默认为64M)相比,通常图像大小较小。 Hadoop对这些文件(see Cloudera blog)很糟糕。您可以使用Hadoop序列文件将许多小图像文件合并到一个大文件中。 OpenIMAJ包含SequenceFileTool,可用于此目的。