有效过滤两个numpy.ndarray中相似的图像

目前我在玩一些机器学习算法,我有两组图像(训练集和验证集),它们存储在np.ndarray中。图像是灰度的,大小为28×28。我大约有200000张训练图像和大约20000张验证图像。我知道我的数据集不是理想的,并且:- 在每个数据集中可能有相同或几乎相同的图像- 验证集和训练集之间可能存在重叠

直觉告诉我,训练集和验证集中存在相同或相似的图像可能会影响我的机器学习算法的性能,因此我决定尝试清理我的数据集。

我可以轻松地通过合并两个数据集,并使用哈希(例如使用md5哈希,逐步构建一个md5哈希字典,并仅将那些md5哈希在哈希字典中不存在的图像复制到新的ndarray中)来清理数据集,从而删除相同的图像。

但是!我不确定如何在存在另一张图像几乎与其他图像相同的情况下删除其中一张图像。例如,当28×28像素中只有几个像素值不同时。有什么想法可以提出有效的图像间距离度量方法吗?这里的有效也意味着它最好能相对快速地工作,因为我不确定像素级比较是否是一个好主意。此外,如果有人能提供任何见解,关于通过移除相似的图像来清理数据集是否有实际的好处,那将非常有用?


回答:

您可以通过以下方式找到两张图像在RGB空间中的距离总和:

(((a - b)**2).sum(axis=2)**0.5).sum()

但是您必须非常小心,因为实际上非常相似的两张图像之间可能会有很大的差异(即其中

b = numpy.roll(a, 1, axis=0)

神经网络可能是一种有效的方法来确定图像之间的相似性!但是您是用原始图像训练您的系统吗?通常,最好按照@sascha的建议进行一些感知风格的预处理(当我最近研究这个问题时,我最终做了亮度->边缘->H.O.G.处理,并且发现使用纯numpy比scikit-image更快 https://github.com/paddywwoof/Machine-Learning/blob/master/image_processor.py),显然您应该在预处理之后测试结果之间的距离。

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注