machine-learning - 对从文本中提取的图像的预测不正确

标签 machine-learning image-processing pytorch ocr

我在 PyTorch 中在 EMNIST 数据集上训练了一个模型 - 在测试集上获得了大约 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'}

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

enter image description here

这是我提取的图像的示例 -

enter image description here

如何调试这个?

最佳答案

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

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

不过,您可以采取一些步骤来提高分数。

其他数据

如果您有某种方法可以提取更多字母和密码的图像并适本地标记它们,您应该在神经网络训练期间使用它。

您获得的数据越多,您的结果可能就越好(前提是数据质量相当高,例如误报不多)。

数据增强

我认为您无需做太多工作就可以做到这一点。

您必须记住,数据增强必须保留标签。所以没有像翻转这样的东西(对于数字8来说没问题,但u翻转可能会变成n)。

应该没问题的增强:

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

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

模型增强

对于你的模型,你可以使用 dropout(不过要小心它与批量归一化的集成)、shake shake、随机深度等。

决赛

您可以使用所有这些,记得测试它的性能。我试图将它们列出来,并将最有前途的方法放在最上面。

一种可能性是通过增强使模型对方差更加鲁棒。

关于machine-learning - 对从文本中提取的图像的预测不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59629985/

相关文章:

python - 从 NumPy 或 PyTorch 中的矩阵获取对角线 "stripe"

machine-learning - 如何将 AUC 和平均 11 点精度/召回率结合起来?

machine-learning - 如何正确实现DQN算法

validation - 训练数据的分布与测试/预测的分布

c# - Azure Custom Vision是否可以分析视频流并计算车辆的车轮数

php - GD vs ImageMagick vs Gmagick for jpg?

c++ - 如何在直方图上训练 OpenCV 中的神经网络

android - 如何将布局或 View 作为图像导出到 Android 中的可见图库文件夹?

python - torch.clamp 中的列相关边界

machine-learning - 如何对具有可变长度的分类数据进行编码,以便可以将其提取到 PyTorch 中的 nn.Embedding