我在 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'}
作为引用,这是用于测试数据的图像示例 -
这是我提取的图像的示例 -
如何调试这个?
最佳答案
首先,您应该检查您的提取技术及其是否正常工作。其余答案假设此步骤已完成。
EMNIST
的分布和提取数据的分布可能有很大不同,因此可能很难获得良好的结果。
不过,您可以采取一些步骤来提高分数。
其他数据
如果您有某种方法可以提取更多字母和密码的图像并适本地标记它们,您应该在神经网络训练期间使用它。
您获得的数据越多,您的结果可能就越好(前提是数据质量相当高,例如误报不多)。
数据增强
我认为您无需做太多工作就可以做到这一点。
您必须记住,数据增强必须保留标签。所以没有像翻转
这样的东西(对于数字8
来说没问题,但u
翻转可能会变成n
)。
应该没问题的增强:
- 小幅旋转(最多
20
度左右) - 小高斯噪声或类似噪声
- 带有小补丁的剪切图(图像上将大小为 3x3 像素的黑色矩形或类似的区域归零)
- 温和的空间变换(重新缩放、平移、线性变换)
- MixUp(线性混合两个具有不同标签的图像(例如
A
的图像乘以0.6
和密码2
乘以0.4
并尝试将其分类为0.6
A
和0.4
2
)。记住标签没有完全是二进制的。这应该有助于您的网络不要对其预测过于自信
您可以在 albumentations
中找到所有这些内容第三方库。
模型增强
对于你的模型,你可以使用 dropout(不过要小心它与批量归一化的集成)、shake shake、随机深度等。
决赛
您可以使用所有这些,记得测试它的性能。我试图将它们列出来,并将最有前途的方法放在最上面。
一种可能性是通过增强使模型对方差更加鲁棒。
关于machine-learning - 对从文本中提取的图像的预测不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59629985/