如何在用于训练连体网络的签名数据集中为特征 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 标签的确切对,因为负对不是随机选择的。
- 正-正对 -> 必须是 image1 和 image1 原始实例(共 - 24 对)
- 一世。正负对 -> 必须是 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)