我想在CCTV素材上运行人脸识别。我在推理过程中实现了多个距离度量进行人脸嵌入比较,例如欧几里得距离,余弦距离,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:除了欧几里得距离和余弦距离之外,人脸嵌入比较最快,更好的方法是什么?
最好,如果您是指最先进的技术-这是要遵循的列表:https://paperswithcode.com/sota/face-verification-on-labeled-faces-in-the