识别计算机扫描的数字

数据挖掘 深度学习 美国有线电视新闻网 图像识别 极简主义
2022-02-26 02:40:09

我有如下数字图像,我想识别它们:

在此处输入图像描述

有些质量稍差:

在此处输入图像描述

图像的分辨率不是固定的,但大多在(80*20 到 130*40)范围内。由于缺乏足够的标记数据(~3K 行),我不得不去寻找一个开源数字数据集。我尝试了 MNIST 和 SVHN,但运气不佳。我在下面详细介绍了我的两种方法..

注意:我使用的唯一预处理是转换为灰度,将图像调整为固定大小并对图像进行平均减法。

1. 用于测试的单位数 MNIST 和滑动窗口 我在 MNIST 集上训练了一个 Convnet,在验证集上大约有 99%。然后我使用一个滑动窗口在我的测试图像上移动并预测每个图像。这种方法有两个问题首先,由于我的图像不是固定分辨率,我经常无法获得正确的滑动窗口(一个完全只包含一个数字的窗口)。其次,我从我的测试图像中裁剪出单个数字,并在这些数字上测试了我的 MNIST 模型,结果“非常糟糕”,在我裁剪出的大约 15 个样本中,我的 MNIST 模型甚至无法正确. 这是裁剪后的图像以供参考。

在此处输入图像描述

  1. SINGLE DIGIT SVHN我认为我的 MNIST 模型在我的测试集上的性能可能很差,因为这两个是不同类型的图像,SVHN 数据集中的数字与我发布的更相似。我用 SVHN 重复了同样的一位数练习,结果要好得多,在我剪裁出来的 15 个数字上,这次我得到了 10 个正确的数字,但滑动窗口问题仍然存在。

  2. MULTI DIGIT SVHN:由于 SVHN 中的门牌号码比我的号码长度更小(最多 5 个),我通过水平堆叠来自 SVHN 多位数数据集的不同数字创建了 50k 个长度为 8 的数字。我能够做到的最佳验证损失从这个模型中获得的结果是 6.70,不是很好,而且在预测方面显然不是很有效。我使用了具有以下架构的 ConvNet:

model_input = Input(input_shape)
  x = Conv2D(32, (3, 3),data_format='channels_first', activation='relu', name='conv_32_1',padding='same')(model_input)
  x = Conv2D(32, (3, 3), data_format='channels_first',activation='relu',name='conv_32_2',padding='same')(x)
  x = MaxPooling2D(pool_size=(2, 2))(x)    
  x = Dropout(0.35)(x)

  x = Conv2D(64, (3, 3),  data_format='channels_first',activation='relu',name='conv_64_1',padding='same')(x)       
  x = Conv2D(64, (3, 3), data_format='channels_first',activation='relu',name='conv_64_2',padding='same')(x)    
  x = MaxPooling2D(pool_size=(2, 2))(x)    

  x = Conv2D(128, (3, 3), data_format='channels_first',activation='relu',name='conv_128_1',padding='same')(x)    
 x = Dropout(0.35)(x)

 x = Flatten()(x)

 x = Dense(768, activation='relu')(x)    
 x = Dropout(0.50)(x)
 output_list = [Dense(11, activation='softmax',name='digit_'+str(i))(x)    for i in range(1,9)]
 adam = Adam(lr=0.0005)

 model = Model(inputs=model_input, outputs=output_list)

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

这是损失曲线: 在此处输入图像描述

我的问题,从最后一种方法到第一种方法:

  1. 对于这个问题/数据集,我的 MULTI SVHN 模型是否太小?如果没有,我该如何提高它的性能?
  2. 有没有办法生成更好的候选滑动窗口,因为我的个位数 SVHN 似乎是我在这三个模型中最好的模型。
  3. 我的推理是否正确,即 MNIST 模型在我的图像上效果不佳,因为数字有些不同(手写与计算机生成)?
  4. 是否有其他预处理技术可以用来提高我的性能,特别是对于像第二个(18458882)这样的图像?
  5. 有没有其他方法可以尝试解决这个问题?
0个回答
没有发现任何回复~