字符识别结果不佳

Posted

技术标签:

【中文标题】字符识别结果不佳【英文标题】:Poor character recognition results 【发布时间】:2021-08-02 11:21:20 【问题描述】:

我正在尝试从图像中读取六位数字。我使用 tensorflow/keras 进行训练。 这是我为此提出的模型:

model = Sequential()

model.add(Conv2D(20, (5, 5), padding="same", input_shape=(20, 20, 1), activation="relu"))
model.add(MaxPooling2D(pool_size=(2, 2), strides=(2, 2)))

model.add(Conv2D(50, (5, 5), padding="same", activation="relu"))
model.add(MaxPooling2D(pool_size=(2, 2), strides=(2, 2)))

model.add(Flatten())
model.add(Dense(500, activation="relu"))

model.add(Dense(10, activation="softmax"))

model.compile(loss="categorical_crossentropy", optimizer="adam", metrics=["accuracy"])

model.fit(X_train, Y_train, validation_data=(X_test, Y_test), batch_size=40, epochs=30, verbose=1)

我采集了 97,000 多个样本,其中 30% 用于测试。 训练后:

如您所见,样本上的结果非常好,但是当我使用相同的样本进行测试时,我几乎每 10 个项目都会得到一个错误的结果。

我匹配了训练和测试样本,它们都是一样的。这是预处理部分:

letter_image = img_number[y: y + h, x: x + w]
letter_image = cv2.copyMakeBorder(letter_image, 5, 5, 5, 5, cv2.BORDER_CONSTANT, value=(255, 255, 255))
letter_image = cv2.cvtColor(letter_image, cv2.COLOR_BGR2GRAY)
letter_image = helper.resize_to_fit(letter_image, 20, 20)
raw = letter_image
letter_image = np.expand_dims(letter_image, axis=2)
letter_image = np.expand_dims(letter_image, axis=0)
prediction = cheque_number_model.predict(letter_image)
letter = cheque_number_label.inverse_transform(prediction)[0]

如果有任何建议,我将不胜感激。 谢谢,也对不起我的英语。

【问题讨论】:

这很可能与测试数据的预处理有关。请发布更多代码,以便我们弄清楚。 感谢您的宝贵时间。我添加了预处理部分。 我看不到您的完整 val loss 和 val acc 但是如果它与之前时期的最终结果(大约 0.99)在同一范围内,请尝试提前停止(您可以查看 EarlyStopping 回调或训练对于更少的时期) 感谢您的宝贵时间。我不认为更少的时期会有所帮助。我会试试看。非常感谢。 【参考方案1】:

我认为您应该考虑以下几点来提高准确性。

    尝试增加训练-测试拆分。 您在 Conv2D 中添加的层具有非常小的 5x5 形状,而您的输入是 20x20。想想你在做什么,你实际上是在裁剪或忽略数据的重要特征。 随着您不断添加新层,形状保持不变,但神经元数量却在增加,这很荒谬。 还要考虑最大池化对输入形状的影响。

请查看这 4 点并做出相应的更改。 你会看到进步。请回复我的结果。

【讨论】:

感谢您的宝贵时间。我真的很感激。我不知道Conv的很多概念。关于第二点:我应该增加形状还是增加输入大小?关于第三点:您的意思是要删除 Conv2 的第二层吗? 将第二个点的 (Conv2D(20, (5, 5)...) 更改为 ((Conv2D(20, (20, 20)...) ,然后减少 (20 ,20) 让我们说 2 或 3 用于后续层。对于第三点,不,我不是说你应该删除第二层,我的意思是只改变它的大小,如前所述。如果你还需要什么。

以上是关于字符识别结果不佳的主要内容,如果未能解决你的问题,请参考以下文章

在 SQL Server(查询分析器)中的查询结果中识别隐藏字符的最佳方法是啥?

识别车牌的字符

字符识别OCR研究一(模板匹配&BP神经网络训练)

Tesseract 无法识别随机英文字符序列

OCR识别要依赖于深度学习的进展吗?

深度学习入门比赛——街景字符识别