有效过滤两个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

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

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