手写签名验证

时间:2019-01-21 07:03:49

标签: python keras deep-learning computer-vision

我正在进行签名验证项目。我使用过ICDAR 2011 Signature Dataset。目前,我正在将原始图像的编码和伪造品配对使用,以获取训练样本(标记为0)。从预训练的VGG-16卷积神经网络(删除完全连接的层)获得编码。然后,我修改了具有以下体系结构的全连接层:

  • 输入大小:50177
  • 第一隐藏层:1000个单位(激活:“ sigmoid”,退出:0.5)
  • 第二个隐藏层:500个单位(激活:“ sigmoid”,退出:0.2)
  • 输出层:1个单位(激活:“ Sigmoid”)

问题在于,尽管训练集准确性提高了,但验证准确性却随机波动。它在测试集上的表现非常差

我尝试了不同的体系结构,但似乎无济于事 那么还有其他准备数据的方法吗?还是应该继续尝试不同的体系结构?

1 个答案:

答案 0 :(得分:0)

我不认为使用VGG16模型为您的任务提取特征是正确的方法。您正在使用经过相对复杂的RGB图像训练的模型,而不是尝试将其用于基本上由边缘(签名)的灰度图像组成的数据集。然后,您将使用最后一个嵌入层,其中包含ImageNet数据集(VGG模型的原始训练数据集)的最复杂,最专业的表示形式。

获得的功能没有实际意义,这可能就是为什么当您尝试微调模型时,训练精度和验证精度根本不相关的原因。

我的建议是使用VGG16的较早层进行特征提取(我正在谈论5-6层附近的某个地方),或者更好的是,使用经过更多训练的简单模型相似的数据集,例如MNIST数据集。

MNIST 数据集由手写数字组成,因此与您的任务非常相似,并且对其进行训练的任何模型都将充当任务的更好的特征提取器。 您可以从MNIST上以下基准测试结果列表中选择任何模型,并将其用作特征提取器:

MNIST Benchmark Results