我如何将 SIFT 描述符与 Apache Spark kmeans 聚类(通过或不通过 pickle)

How can I cluster SIFT descriptors with Apache Spark kmeans (via pickle or not)

我使用 OpenCV 3.1 计算了一批图像的 SIFT 描述符。 每个描述符都有一个形状 (x, 128),我使用基于 pickle 的 .tofile 函数将每个描述符写入磁盘。在图像样本中,x 在 2000 和 3000 之间

我希望通过 pyspark 使用 Apache Spark 的 kmeans 集群,但我的问题分为两部分。

  1. 酸洗是传输描述符数据的最佳方式
  2. 如何从一堆 pickle 文件中获取集群就绪数据集以及我应该注意哪些陷阱(Spark、pickling、SIFT)

我感兴趣的是 python2 代码的序列,假设在描述符生成代码和集群环境之间存在一些公共存储

Is pickling the best way to transfer the descriptor data?

best 在这里非常具体。你可以试试 pickle 或 protobuf。

How do I get from the bunch of pickle files to a cluster ready dataset?

  1. 反序列化您的数据。
  2. 创建一个 RDD,它将包含向量(即 RDD将是一个特征,一个128维的向量))。
  3. 缓存 RDD,因为 kMeans 会一次又一次地使用它。
  4. 训练 kMeans 模型,得到你的集群。

例如,LOPQ 人员,请执行以下操作:

C0 = KMeans.train(first, V, initializationMode='random', maxIterations=10, seed=seed)

其中 first 是我提到的 RDD,V 是簇数,C0 是计算的簇(在 GitHub 的第 67 行检查) .

  1. 取消坚持你的 RDD。