从许多数字和字符图片中进行图像聚类,将相似的图片组合在一起
Posted
技术标签:
【中文标题】从许多数字和字符图片中进行图像聚类,将相似的图片组合在一起【英文标题】:Image clustering from many number and char pictures , group similar ones together 【发布时间】:2017-12-17 18:31:24 【问题描述】:我有很多图片,其中的内容是其中之一
0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ
,如下图:
有一万张图片,我不想自己贴标签。所以我尝试使用 sklearn 对它们进行聚类。
我的计划:
选择 sklearn 聚类模型,例如 Kmeans
由于1,l,I
c,C
o,O
s,S
x,X
v,V
z,Z
类似,我可以设置一个较低的n_cluster
参数,比如56。
将所有图像填充到相同大小,但位置随机(我认为这可能会带来很好的结果)。
集群完成后,我可以将标签(1~56)标记为真正的字符。然后可以使用这个数据集来训练一个分类器。
但梦想是美好的,事实是艰难的。
我的代码:
from sklearn import cluster
data = load('data.pkl', '.')
#data.shape
#(103083, 76, 70)
k_means = cluster.KMeans(n_clusters=56, n_jobs=-1)
k_means.fit(data.reshape((data.shape[0], -1)))
# print top 10 image which label by 25
for i in data[np.where(k_means.labels_==25)[0][:10]]:
plt.figure(figsize=(1,1)), plt.imshow(i, 'gray')
plt.xticks([]), plt.yticks([])
输出:
看起来 kmeans 仅由位置确定(标签 25 都在中间)。
我现在正在尝试其他模型(不包括神经网络),但其中许多没有n_job
参数(用于并行处理),非常慢。我猜结果也可能像kmeans
。所以我在这里为这种情况寻求适当的解决方案。
【问题讨论】:
比较是如何进行的?什么相似度得分? 【参考方案1】:如果我要这样做,我会
手动标记每个字符的几个样本(比如 4 个,大约 250 个图像),
对最近邻进行自动分类,
如果对分类有疑问,建议最接近的分类并请求人工确认。当最佳聚类和次佳聚类的相似度差异超过估计的聚类大小时,会提出疑问。
为了提高安全性,在第一个训练步骤之后,您可以检查每个集群中的异常值。
【讨论】:
【参考方案2】:K-means 和几乎所有聚类算法都不会比较相邻像素。因为向量中没有这样的邻接。所以聚类算法不能在像素上做到这一点。
即使是大多数分类算法也很难处理原始数据。很明显,您应该进行分类,而不是聚类。
如果你想要 10 年前的结果,那就仔细设计一些特征,比如边缘特征,用好的特征而不是像素。
如果您想对此类数据进行最先进的分类性能,请使用深度学习。
【讨论】:
以上是关于从许多数字和字符图片中进行图像聚类,将相似的图片组合在一起的主要内容,如果未能解决你的问题,请参考以下文章