我有一个包含身份证,账单和护照的图像数据库。
我想将这些图像分为不同的组(即身份证,账单和护照)。
据我所知,完成此任务的方法之一是集群化(因为它将不受监督)。
对我来说,想法是这样的:聚类将基于图像之间的相似性(即,具有相似特征的图像将被分组在一起)。
我也知道可以使用k-means来完成此过程。
所以对我来说,问题在于功能和使用带有K均值的图像。
如果有人以前做过此事或有任何线索,请为您推荐一些开始的链接或建议可能有用的功能。
答案 0 :(得分:2)
标记一些示例,并使用分类。
聚类可能会给您聚类“带有淡蓝色的图像”,“灰度扫描”和“温暖的色温”。这是引用这类图像的合理方法。
此外,k均值对异常值非常敏感。而且您可能在那里。
由于您想要您的集群与某些人类概念相对应,因此您需要使用分类。
答案 1 :(得分:1)
获得良好结果的最简单方法是将问题分为两部分:
我建议分别在Keras和Sklearn中实现(使用已经实现的)1、2。
答案 2 :(得分:1)
我已经使用聚集层次聚类实现了基于图像相似性的无监督聚类。
我的用例具有人的图像,因此我从每个图像中提取了面部嵌入(也称为特征)矢量。我已经使用dlib进行人脸嵌入,因此每个特征向量均为128d。
通常,可以提取每个图像的特征向量。预先训练的VGG或CNN网络,其最终分类层已删除;可以用于特征提取。
可以为文件夹中的所有图像创建一个以KEY作为IMAGE_FILENAME,VALUE作为FEATURE_VECTOR的字典。这将使文件名与其特征向量之间的关联更加容易。
然后创建一个单一的特征向量,即X,它由文件夹/组中每个需要聚类的图像的各个特征向量组成。
在我的用例中,X的尺寸为:文件夹中的图像数128(即每个特征向量的大小)。例如,X的形状:50,128
然后可以使用该特征向量来拟合聚集层次集群。需要凭经验微调距离阈值参数。
最后,我们可以编写代码来识别哪个IMAGE_FILENAME属于哪个集群。
就我而言,每个文件夹大约有50张图像,因此这是一个可管理的解决方案。这种方法能够将一个人的图像分组为一个集群。例如,PERSON1的15张图像属于CLUSTER 0,PERSON2的10张图像属于CLUSTER 2,依此类推……