对从文本中提取的图像的错误预测
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
A
和 0.4
2
)。记住标签不必完全是二进制的。这应该有助于您的网络不要对其预测过于自信
您可以在 albumentations
第三方库中找到所有这些。
模型扩充
对于您的模型,您可以使用 dropout(注意它与 batch norm 的集成)、shake shake、Stochastic Depth 等。
决赛
你可以使用所有这些,记得测试它的性能。我试图将最有希望的方法列在最前面。
一种可能性是通过扩充使模型对方差更稳健。
我在 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
A
和0.4
2
)。记住标签不必完全是二进制的。这应该有助于您的网络不要对其预测过于自信
您可以在 albumentations
第三方库中找到所有这些。
模型扩充
对于您的模型,您可以使用 dropout(注意它与 batch norm 的集成)、shake shake、Stochastic Depth 等。
决赛
你可以使用所有这些,记得测试它的性能。我试图将最有希望的方法列在最前面。
一种可能性是通过扩充使模型对方差更稳健。