对从文本中提取的图像的错误预测

Incorrect predictions on extracted images from text

我在 EMNIST 数据集上用 PyTorch 训练了一个模型——在测试集上获得了大约 85% 的准确率。现在,我有一张手写文本的图像,我从中提取了单个字母,但我提取的图像的准确性非常差。

我正在使用的一个热映射-

letters_EMNIST = {0: '0', 1: '1', 2: '2', 3: '3', 4: '4', 5: '5', 6: '6', 7: '7', 8: '8', 9: '9',
         10: 'A', 11: 'B', 12: 'C', 13: 'D', 14: 'E', 15: 'F', 16: 'G', 17: 'H', 18: 'I', 19: 'J',
         20: 'K', 21: 'L', 22: 'M', 23: 'N', 24: 'O', 25: 'P', 26: 'Q', 27: 'R', 28: 'S', 29: 'T',
         30: 'U', 31: 'V', 32: 'W', 33: 'X', 34: 'Y', 35: 'Z', 36: 'a', 37: 'b', 38: 'd', 39: 'e',
         40: 'f', 41: 'g', 42: 'h', 43: 'n', 44: 'q', 45: 'r', 46: 't'}

作为参考,这是用于测试数据的图像示例 -

这是我提取的图像示例 -

我该如何调试?

首先,您应该检查您的提取技术以及它是否正常工作。其余答案假定已完成此步骤。

EMNIST的分布和你提取的数据的分布可能有很大的不同,因此可能很难获得好的结果。

虽然您可以采取一些步骤来提高分数。

附加数据

如果你有办法提取更多的字母和密码图像并适当地标记它们,你应该在神经网络训练期间使用它。

你得到的越多,你的结果可能就越好(前提是数据质量很高,例如误报不多)。

数据扩充

我认为您可以轻松完成此操作。

您必须记住 数据扩充必须保留标签。所以没有像 flipping 这样的东西(数字 8 没问题,但是 u 翻转可能会变成 n)。

应该没问题的增强:

  • 小旋转(最多 20 度左右)
  • 小高斯噪声或类似噪声
  • 带有小块的剪切图(大小为 3x3 像素的黑色矩形或类似图像在图像上被归零)
  • 温和的空间变换(重新缩放、移位、线性变换)
  • MixUp(您将两个具有不同标签的图像线性混合(例如 A 的图像乘以 0.6 和密码 2 乘以 0.4 并尝试对其进行分类如 0.6 A0.4 2)。记住标签不必完全是二进制的。这应该有助于您的网络不要对其预测过于自信

您可以在 albumentations 第三方库中找到所有这些。

模型扩充

对于您的模型,您可以使用 dropout(注意它与 batch norm 的集成)、shake shake、Stochastic Depth 等。

决赛

你可以使用所有这些,记得测试它的性能。我试图将最有希望的方法列在最前面。

一种可能性是通过扩充使模型对方差更稳健。