【发布时间】:2020-04-19 10:34:28
【问题描述】:
我想在闭路电视镜头上运行人脸识别。我已经在推理过程中实现了几个用于人脸嵌入比较的距离度量,例如欧几里德距离、余弦距离、KDTree、SVM、L1 和 L2 距离等,但最后我只保留了前两个,因为我没有得到预期的准确度很难找到一个好的阈值。
def distance(self, embeddings1, embeddings2, distance_metric=0):
if distance_metric == 0:
# Euclidian distance
embeddings1 = embeddings1/np.linalg.norm(embeddings1, axis=1, keepdims=True)
embeddings2 = embeddings2/np.linalg.norm(embeddings2, axis=1, keepdims=True)
dist = np.sqrt(np.sum(np.square(np.subtract(embeddings1, embeddings2))))
return dist
elif distance_metric == 1:
# Distance based on cosine similarity
dot = np.sum(np.multiply(embeddings1, embeddings2), axis=1)
norm = np.linalg.norm(embeddings1, axis=1) * np.linalg.norm(embeddings2, axis=1)
similarity = dot/norm
dist = np.arccos(similarity) / math.pi
return dist[0]
else:
raise 'Undefined distance metric %d' % distance_metric
Q1:关于人脸嵌入比较准确度的最佳指标是什么?如何设置阈值?
Q2:除了欧式和余弦距离之外,Face Embedding 比较最快更好的方法是什么?
【问题讨论】:
-
您是否尝试搜索
Triplet-loss? -
我之前使用
Triplet-loss训练了我的模型,但在这里我想要一个距离度量,用于在识别过程中进行人脸比较,而不是Loss function。