提问人:vmchance 提问时间:11/3/2023 最后编辑:vmchance 更新时间:11/7/2023 访问量:63
在大型数据集上使用提取的特征向量进行图像聚类
Image clustering with extracted feature vectors on a large dataset
问:
我一直在尝试在一个非常大的图像数据集(大约 100 万张图像)上使用多种聚类技术。该过程非常标准 - 例如,使用预训练的 CNN(在本例中为 VGG19)来提取特征并测试许多聚类方法(目前是分层和 k 均值)以将图像组合在一起。这适用于我的数据子集。
但是,当我在大型数据集上执行此操作时,我有两个主要问题:
- Python 中的大多数聚类示例都需要数组作为输入。我的数据太大,无法放入内存中的数组中(我目前有 64gb)。
- 我可以使用 keras 中的图像生成器/批处理方法处理 VGG16 中的特征,但是我找不到一种方法在不转换为数组的情况下在聚类算法(例如,scipy 的分层聚类或 sklearn 聚类)中使用这些输出。
我基本上无法弄清楚如何在不使用数组的情况下将这些提取的特征(可以很容易地批量处理)移动到聚类方法。
这些图像实际上来自大约 4,000 个“类”,但它们在不同类之间并不完全不同。这种聚类方法的目标是使用无监督聚类将这些类减少到更广泛的类别 - 所以我确实需要所有数据,而且我没有办法对其进行子集(我已经使用了来自随机图像样本的测试用例,现在我正在尝试将其应用于整个数据集)。
有没有办法像在 scipy 或 sklearn 中使用数组进行集群包,或者我应该以不同的方式解决这个问题?
我尝试使用 dask 和 numpy mmemap 查看 TensorFlow 数据集,但我不太清楚如何获取这些对象/示例中的任何一个并使用聚类算法处理它们。从本质上讲,我有一些运气处理并将提取的特征存储为输出,但似乎卡在将其移动到聚类模型/不同模型中。
我还探索了降维,但我同样找不到任何可以方便地使用 TF 数据集之类的东西,在这些数据集中,我处理过的特征可以很容易地从模型中存储。
更新:经过一些调查和有用的评论,似乎成对距离计算是某些聚类算法所需的问题。这仍然给我留下了一些可以使用的方法(例如批处理 KMean),尽管如果有其他解决方案可以计算较大数组/特征上的成对距离,我会很感兴趣。
答: 暂无答案
评论