分类器不预测真实数据

数据挖掘 机器学习 图像分类 opencv
2022-02-17 12:22:14

我正在尝试训练一个分类器来识别我自己的签名。这就是我构建分类器的方式

我是如何收集数据的?

  1. 在一张纸上签名 50 次,并从中创建了 50 张图像。

  2. 对于负面测试用例,我下载了IAM Handwriting database其中包含大约 600MB 的手写数据。这是为了否定其他可能的匹配。

我是怎么做特征工程的?

第 1 步:读取和转换灰度图像。执行中值模糊。

img = cv2.imread(image,0)
img = cv2.medianBlur(img,5)

步骤2:执行自适应阈值,然后进行形态学开放以减少图像中的噪声。

edges = cv2.adaptiveThreshold(img,255,cv2.ADAPTIVE_THRESH_GAUSSIAN_C,cv2.THRESH_BINARY_INV,11,2)    
kernel = np.ones((2,2),np.uint8)
dilation = cv2.morphologyEx(edges, cv2.MORPH_OPEN, kernel)

我是如何进行模型训练的?

  1. 从所有样本图像中提取 ORB 特征进行训练(矩阵大小 RX32)并用于RandomForestClassifier训练。

问题

我的分类器的准确度高达 0.9874066374996978,但它几乎无法识别我在相同光照条件下在同一张纸上签名的几乎所有新签名样本。我是应用 ML 的新手。你们专家认为我应该检查什么?

2个回答

使用传统的机器学习方法来解决这个问题会导致模型的准确性降低。这可以通过使用深度学习,更具体地说是卷积神经网络 (CNN)轻松解决。

如果您使用卷积网络进行特征提取,则无需对签名图像进行特征工程。但是,尽管使用卷积网络,我希望您重新考虑您的方法和逻辑,因为在访问签名时有许多因素会发挥作用。

签署签名的身体动作需要协调大脑、眼睛、手臂、手指、肌肉和神经。因此,每个签名不必每次都相同。

在对分类器建模之前,请参阅这些论文。

您正在有效地尝试对图像进行分类。卷积神经网络在这项任务上要好得多。Keras是一个易于使用的神经网络库。

查看教程,例如:https ://machinelearningmastery.com/handwritten-digit-recognition-using-convolutional-neural-networks-python-keras/

https://www.pyimagesearch.com/2017/12/11/image-classification-with-keras-and-deep-learning/