如何在签名数据集中为特征 X 创建锚正和锚负对以训练连体网络

数据挖掘 神经网络 喀拉斯 美国有线电视新闻网 图像识别 连体网络
2022-02-17 23:02:09

如何在用于训练连体网络的签名数据集中为特征 X 创建锚正和锚负对?

我有一个雪松签名数据集,其中包含 55 个人的签名(类),其中包含 24 个原始图像(实例)和 24 个伪造图像(实例)。所以对于人 1(类)将有 24 个原始签名图像和 24 个伪造签名图像(48 个实例)

我需要创建 (Anchor-positive pair ,anchor -negative pair ) 来表示特征 X((img1,img2),(img1,img9)) 。特征 y(1,0) 1-> 相似 0-> 不相似

锚点-> 原始图像
正-> 这也代表原始图像,但有微小的变化
负-> 伪造图像

下面的代码没有给出 X 标签和 y 标签的确切对,因为负对不是随机选择的。

  1. 正-正对 -> 必须是 image1 和 image1 原始实例(共 - 24 对)
  2. 一世。正负对 -> 必须是 image1 和 image1 负实例(只需要 12 个)正负对 -> 必须是 image1 和任何其他随机图像实例(只需要 12 个) 最终正负对将是 24

下面的行获取 image1 并与 image1 的其他实例配对并将其标记为 1 -> 锚正对

z1, z2 = digit_indices[d][i], digit_indices[d][i+1]

下面的行获取 image1 并与其他图像的其他实例配对,例如:image9 并将其标记为 0 -> 锚负对

inc = random.randrange(1, nb_classes)
        dn = (d + inc) % nb_classes
        z1, z2 = digit_indices[d][i], digit_indices[dn][i]

问题总是存在完美的 50/50 正负对,并且模型正在进行随机选择预测(即)准确度分数始终为 50%

请建议如何创建一对有意义的正正图像和正负图像

def create_pairs(x, digit_indices, nb_classes):
"""      x:         X_train, array of array of all train samples.
    digit_indices:  List of an array, length = no of classes; each sublist consists of train sample indices
                    belonging to that particular class index/class
"""
""" Positive and negative pair creation.
    Alternates between positive and negative pairs.
"""
pairs = []
labels = []

print ('\n\n')
print ('X_train shape:  ', x.shape)
print ('Digit_indices shape:    ', np.array(digit_indices).shape)
print ('Length of digit indices:    ', len(digit_indices))
print ('No of classes:  ', nb_classes)
print ('\n\n')

n = min([len(digit_indices[d]) for d in range(nb_classes)]) - 1
for d in range(nb_classes):
    for i in range(n):
        z1, z2 = digit_indices[d][i], digit_indices[d][i+1]
        pairs += [[x[z1], x[z2]]]
        inc = random.randrange(1, nb_classes)
        dn = (d + inc) % nb_classes
        z1, z2 = digit_indices[d][i], digit_indices[dn][i]
        pairs += [[x[z1], x[z2]]]
        labels += [1, 0]    #check label based on similarity = 0 or 1
        # labels += [0,1]     #similar pairs = 0 in this case
return np.array(pairs), np.array(labels)
0个回答
没有发现任何回复~