如何使用 MNIST 数据集对相似图像(色盲图)进行预测?

数据挖掘 卷积 迁移学习 极简主义
2021-10-06 06:48:33

我正在尝试使用 MNIST 数据集来训练卷积神经网络来对用色盲图表书写的数字进行分类。正如一些人建议的那样,我尝试过调整亮度和对比度,以及转换为灰度,但所有这些结果都不一致,因为所有图表都非常不同。

我正在寻找有关我可以尝试的方法的一般想法。风格转移有意义吗?这是我希望能够分类的简单图表的示例:

在此处输入图像描述

我尝试了各种转换并得到了这样的结果。虽然对我这个轻度色盲的人来说,这些更容易看到,但它与 MNIST 相差无几。

在此处输入图像描述

TLDR:我没有色盲图表数据集。然而,MNIST 很容易获得。我正在尝试以某种方式使用 MNIST(可能在对其进行转换之后)使神经网络对我拥有的有限色盲图表进行分类。MNIST 和图表是不同的,我需要使它们相似,以便在经过修改的 MNIST 训练后的 NN 可以预测色盲图表。

编辑:

我尝试了这些建议并将各种 OpenCV 转换应用于图像。最后,一切都被调整大小并转换为灰度。我的准确率从 11%(在未处理的图像上)上升到新图像的 33%。

我的问题是找到一组通用的转换。我的转换适用于某些图像:

在此处输入图像描述

有些不太好: 在此处输入图像描述

我该如何改进呢?以下是我所做的转换:

image = cv2.imread(imagePath)
    image = imutils.resize(image, height=400)
    contrasted_img = CONTRASTER.apply(image, 0, 60) #applies contrast
    median = cv2.medianBlur(contrasted_img,15)
    blur_median = cv2.GaussianBlur(median,(3,3),cv2.BORDER_DEFAULT)
    clustered = CLUSTERER.apply(blur_median, 5) #k-means clustering with 5
    gray = cv2.cvtColor(clustered, cv2.COLOR_BGR2GRAY) #RESULT

第二次编辑:

我使用书面建议并计算出该数字通常占据图像的 0.1 到 0.35 ish 之间。所以我增加了黑白的阈值,直到发生这种情况。这导致了这样的图像:

在此处输入图像描述

我的 NN 准确率高达 45%!另一个惊人的改进。但是,我最大的问题是数字比背景暗的图像:

在此处输入图像描述

这会导致不正确的阈值。我也有一些噪音问题,但这些问题不太常见,可以通过调整我的白色百分比和阈值来解决:

在此处输入图像描述

1个回答

我觉得RG像素的颜色分量形成向量,如果你在球坐标中看到它们,角度就是颜色,半径就是强度。

我试过了,结果是:

颜色到球面角的转换

为每个像素(背景和两种颜色)计算的角度构建一个 3 类分类器。

如果你最终只有 2 个类(第三个类的成员很少),你就会遇到强度问题,你应该重新分类半径(或者只取一个阈值)。

如果你有 3 个班级,你就有颜色问题。丢弃(黑色)背景颜色的类(可能只是左上角像素的类。同时丢弃与图像中心的平均距离最大的类,即第二个背景。

剩余的像素将为白色,其他像素为黑色。

您仍然有一张带有圆圈形成数字的图片,但池化过滤器会将其拉平。

角度的三向分类(R、G、B 表示类别)

直接在图像上进行 3-way 分类不成功,因为浅灰色和深灰色之间的距离类似于浅灰色/浅紫色。角度更加可分离。