我正在研究一种暹罗模型,以区分两个手写单词。模型将包含手写单词的两个图像作为输入,并返回图像之间的相似度得分。我将此问题视为模式匹配问题。
要训练模型,我准备了一个包含50个手写单词的数据集。数据集看起来像这样:
对于每个单词,我都会做出正负样本。
然后,我通过旋转,随机缩放和平移增强了数据。我为每个样本生成了3张增强图像。
我总共有大约13,000张包含手写单词的图像(正+负)。
要训练暹罗模型,我已经从我的13,000张图像中准备了成对的(正,正)和(正,负)样本。 (正,负)对之间的距离保持0
进行训练,而(正,负)对之间的距离也为1
。两种对的总数之比为1。因此,配对后,我有900,000多个训练对。训练对的示例:
培训:
在通过提前停止回调停止训练之前,对模型进行了9个时期的训练。
在进行训练时,每个时期后我都保存了模型。然后,在训练和验证集上,针对0-4之间的阈值,我计算了每个模型(每个时期后保存的模型)的最佳精度。这些是结果:
型号名称:signet-bhsig260-001.h5 Train_Acc:0.9148792424521732 Val_Acc:0.9155029059218598 Train_thresh:0.46 Val_thresh:0.45
型号名称:signet-bhsig260-002.h5 Train_Acc:0.9611607731639384 Val_Acc:0.9553975714544457 Train_thresh:0.9 Val_thresh:0.88
型号名称:signet-bhsig260-003.h5 Train_Acc:0.9917850274632911 Val_Acc:0.9910994343036379 Train_thresh:0.821 Val_thresh:0.86
型号名称:signet-bhsig260-004.h5 Train_Acc:0.9733841038804691 Val_Acc:0.9751037440663962 Train_thresh:0.08 Val_thresh:0.08
型号名称:signet-bhsig260-005.h5 Train_Acc:0.9688207744827331 Val_Acc:0.966909018821772 Train_thresh:0.05 Val_thresh:0.05
型号名称:signet-bhsig260-006.h5 Train_Acc:0.9751844029504473 Val_Acc:0.9773983855349668 Train_thresh:1.6 Val_thresh:1.56
型号名称:signet-bhsig260-007.h5 Train_Acc:0.573793840947319 Val_Acc:0.5815152521697614 Train_thresh:0.01 Val_thresh:0.01
型号名称:signet-bhsig260-008.h5 Train_Acc:0.7119624704175049 Val_Acc:0.7147077374129519 Train_thresh:0.02 Val_thresh:0.02
型号名称:signet-bhsig260-009.h5 Train_Acc:0.9496454966527798 Val_Acc:0.9441032442260764 Train_thresh:1.6 Val_thresh:1.56
测试:
更早的模型正在检测每个单词都来自数据库。后来的模型没有这个问题。
两个模型都对每个检测到的单词错误进行分类。
我已经检查了训练数据上的模型,并且预测非常好。我已多次检查代码。分词和图像预处理没有问题。在测试图像上方书写的单词在视觉上与我的训练数据中显示的图像非常相似。不过,我的模型并未针对看不见的数据进行概括。
此外,在训练模型时,我从训练数据中随机选择了10000张图像,并在训练模型时将其用于验证。从以上训练结果可以看出,模型在验证数据上的表现与训练数据相当。